FindMinimum求解最小值
mathematica吧
全部回复
仅看楼主
level 2
_19941110 楼主
Clear["Global`*"]
k ={0.207239, 0.114225, 0.0998755, 0.0870856, 0.0749025, 0.0637518, \
0.0539005, 0.0454015, 0.0381785, 0.0320959, 0.0270006, 0.0227438, \
0.0191909, 0.0162248, 0.0137463, 0.011672, 0.00993279, 0.0084715, \
0.00724103, 0.00620256, 0.00532413, 0.00457938, 0.00394655, \
0.00340763, 0.00294769, 0.00255433, 0.00221724, 0.00192779, \
0.00167878, 0.00146417, 0.00127887, 0.0011186, 0.000979762, \
0.000859288, 0.00075459, 0.000663467, 0.00126811, 0.00146042, \
0.000899216, 0.000561987, 0.000355937, 0.000228154, 0.000147845, \
0.0000967613, 0.0000639082, 0.000120691};
H0 ={82.8954, 22.845, 13.3167, 8.70856, 5.9922, 4.25012, 3.08003, \
2.27008, 1.69682, 1.28384, 0.98184, 0.758126, 0.590488, 0.463567, \
0.366568, 0.2918, 0.233713, 0.188256, 0.152443, 0.124051, 0.101412, \
0.0832615, 0.0686356, 0.0567938, 0.047163, 0.0392974, 0.032848, \
0.0275399, 0.0231556, 0.0195222, 0.0165015, 0.0139825, 0.0118759, \
0.0101093, 0.00862389, 0.00737186, 0.0137093, 0.014248, 0.00799303, \
0.00458765, 0.00268632, 0.00160108, 0.000969478, 0.000595454, \
0.000370482, 0.000661319};
\[Epsilon] ={0., 0.0025, 0.005, 0.0075, 0.01, 0.0125, 0.015, 0.0175, 0.02, \
0.0225, 0.025, 0.0275, 0.03, 0.0325, 0.035, 0.0375, 0.04, 0.0425, \
0.045, 0.0475, 0.05, 0.0525, 0.055, 0.0575, 0.06, 0.0625, 0.065, \
0.0675, 0.07, 0.0725, 0.075, 0.0775, 0.08, 0.0825, 0.085, 0.0875, \
0.09, 0.0925, 0.1025, 0.1125, 0.1225, 0.1325, 0.1425, 0.1525, 0.1625, \
0.1725, 0.1825};
\[Sigma]\[Sigma] ={0., 0.377763, 0.548288, 0.661699, 0.741819, 0.800168, 0.843536, \
0.876279, 0.901322, 0.920689, 0.935815, 0.947731, 0.957192, 0.964758, \
0.970848, 0.975779, 0.979793, 0.983078, 0.985779, 0.988009, 0.989858, \
0.991397, 0.992682, 0.993759, 0.994664, 0.995428, 0.996074, 0.996621, \
0.997086, 0.997483, 0.997821, 0.998111, 0.998359, 0.998573, 0.998757, \
0.998915, 0.999052, 0.999171, 0.999508, 0.999703, 0.999817, 0.999886, \
0.999928, 0.999954, 0.99997, 0.999981, 0.999987};
ahi ={0., 0.0001, 0.000342303, 0.000738871, 0.00120405, 0.00170343, \
0.00221742, 0.0027375, 0.00325998, 0.0037696, 0.00426339, 0.00473977, \
0.00519872, 0.00564111, 0.00606413, 0.00646839, 0.00685463, \
0.00722371, 0.00757649, 0.00791443, 0.00823768, 0.00854714, \
0.00884368, 0.00912814, 0.00940131, 0.00966392, 0.00991667, \
0.0101602, 0.0103952, 0.010622, 0.0108412, 0.0110533, 0.0112588, \
0.0114579, 0.0116512, 0.0118389, 0.0120213, 0.0121988, 0.0128646, \
0.0134699, 0.0140256, 0.0145401, 0.0150199, 0.0154699, 0.0158942, \
0.0162961, 0.0166781};
ahii = ahi[[2 ;; -1]];
H = H0*(a*ahii^6 + b*ahii^5 + c*ahii^4 + d*ahii^3 + e*ahii^2 +
f*ahii + g);
ns = Length[k];
\[Epsilon]\[Epsilon] = \[Epsilon];
num = Length[\[Epsilon]\[Epsilon]];
(*ns=46,num=47*)
(*参数*)
R0 = 3000;
m\[Sigma] = 9.0;
mh = -2.2;
\[Sigma]u = 1;
(*定义*)
\[Epsilon]0 = 0.0;
\[Alpha]0 = Table[0, {i, 1, ns}];
\[Alpha]r0 = 0;
\[Alpha]h0 = 0;
\[Sigma]st = Table[0, {i, 1, num}];
\[Epsilon]st = Table[0, {i, 1, num}];
Do[\[Epsilon]1 = \[Epsilon]\[Epsilon][[i]];
(*Start*)
\[Epsilon] = \[Epsilon]0;
\[Alpha] = \[Alpha]0;
\[Alpha]r = \[Alpha]r0;
\[Alpha]h = \[Alpha]h0;
(*Definition*)
y = Table[0, {i, 1, ns}];
While[Abs[\[Epsilon] - \[Epsilon]1] > 2*10^-6, \[Sigma] =
H.(\[Epsilon] - \[Alpha] - \[Alpha]r);
(*指定\[Delta]\[Epsilon]*)
\[CapitalDelta]\[Epsilon]1 = Total[k]/(50*Total[H]);
\[CapitalDelta]\[Alpha]b =
Min[Select[
Sign[(\[Epsilon]1 - \[Epsilon])]*(-\[Epsilon] + \[Alpha] + \
\[Alpha]r + Sign[(\[Epsilon]1 - \[Epsilon])]*(k/H)) // N, # > 0 &]];
If[\[Alpha]h == 0, \[Alpha]h = 10^-4];
R = R0*(Abs[\[Sigma]]/\[Sigma]u)^m\[Sigma] (\[Alpha]h/10^-4)^
mh (k/\[Sigma]u) // N;
\[CapitalDelta]\[Epsilon]2 =
Abs[(1 +
Sign[\[Sigma]]*Sign[(\[Epsilon]1 - \[Epsilon])]*y*
R)*\[CapitalDelta]\[Alpha]b];
\[CapitalDelta]\[Epsilon]3 = Abs[\[Epsilon]1 - \[Epsilon]];
\[CapitalDelta]\[Epsilon] =
Min[\[CapitalDelta]\[Epsilon]1, \[CapitalDelta]\[Epsilon]2, \
\[CapitalDelta]\[Epsilon]3];
If[\[CapitalDelta]\[Epsilon] < 1*10^-6, \[CapitalDelta]\[Epsilon] =
1*10^-6];
\[CapitalDelta]\[Epsilon] =
Sign[(\[Epsilon]1 - \[Epsilon])]*\[CapitalDelta]\[Epsilon] // N;
\[Epsilon] = \[Epsilon] + \[CapitalDelta]\[Epsilon];
(*参数y赋值*)
\[Chi] = H*(\[Epsilon] - \[Alpha] - \[Alpha]r);
Do[If[Abs[\[Chi][[i]]] - k[[i]] > 0, y[[i]] = 1, y[[i]] = 0], {i,
1, ns}];
\[CapitalDelta]\[Alpha] = \[CapitalDelta]\[Epsilon]/(1 +
Sign[\[Sigma]]*Sign[\[CapitalDelta]\[Epsilon]]*(y.R));
\[Alpha] = \[Alpha] + y*\[CapitalDelta]\[Alpha];
\[Alpha]r = \[Alpha]r + \[CapitalDelta]\[Alpha]*(y.R);
\[Alpha]h = \[Alpha]h + Abs[\[CapitalDelta]\[Alpha]]*(y.R)
];
\[Epsilon]1 = \[Epsilon];
\[Alpha]1 = \[Alpha];
\[Alpha]r1 = \[Alpha]r;
\[Alpha]h1 = \[Alpha]h;
\[Sigma]1 = H.(\[Epsilon]1 - \[Alpha]1 - \[Alpha]r1);
(*循环更新:\[Epsilon]0,\[Alpha]0,\[Alpha]r0,\[Alpha]h0*)
\[Epsilon]0 = \[Epsilon]1;
\[Alpha]0 = \[Alpha]1;
\[Alpha]r0 = \[Alpha]r1;
\[Alpha]h0 = \[Alpha]h1;
\[Sigma]st[[i]] = \[Sigma]1;
\[Epsilon]st[[i]] = \[Epsilon]1,
{i, 1, num}];
FindMinimum[{Total[(\[Sigma]\[Sigma] - \[Sigma]st)^2],
Thread[H >= 0]}, {{a, 0.01}, {b, 0.01}, {c, 0.01}, {d, 0.01}, {e,
0.01}, {f, 0.01}, {g, 0.01}}]
\[Sigma]\[Sigma]
请问这个规划程序为什么得不到最小值?谢谢
2021年04月22日 07点04分 1
1