level 2
可是我是小文静
楼主
有没有大佬可以帮忙看下我的代码,FindMinimum求出局部最小值,而不是指定范围内的最小值,这种情况应该怎么解决呀?
Mw = 30;
trainwstd={-0.343619, -1.78989, -0.380043, 1.72798, -0.627254, 0.348522, 0.656261, -0.768291, -0.503788, -0.145976, 1.07402, 1.75997, -0.270296, -0.558593, -1.77163, 0.572725, -0.156404, -1.67037, -0.506315, -0.462523, 1.05856, 1.32859, 0.959541, 1.44407, 0.25478, -0.0461008, -0.648199, -1.45474, 0.924093, -0.00507966};
trainLastd={0.816689, -0.060828, -0.328293, -1.54609, 0.822371, -0.469302, 0.343922, 1.41374, -0.65231, -1.45734, -1.48847, -1.00997, 0.394152, -0.245409, 1.62749, 0.0605587, 1.01268, 1.51944, 0.431856, 1.7025, -0.434982, -0.957084, -0.0629937, -1.99956, 0.014591, 0.389466, 0.849428, -0.0900073, 0.590357, -1.18661};
Alpha = Table[b1, {Mw}];
result4 = Table[Norm[trainwstd[[i]] - trainwstd[[j]]], {i, 1, Mw}, {j, 1, Mw}];
result5 = Exp[-(result4^2)*Alpha*0.5];
f = Table[Sum[result5[[i, j]], {j, 1, Mw}], {i, 1, Mw}];
ff = Table[D[f[[i]], b1], {i, 1, Mw}];
Alpha1 = Table[b1 + (f[[1]] - f[[j]])/ff[[j]], {j, 2, Mw}];
result0 = Table[Norm[trainwstd[[j]] - trainwstd[[i]]], {j, 2, Mw}, {i, 1, j - 1}];
result11 = Table[trainLastd[[i]]* Exp[-(result0[[j - 1, i]]^2)*Alpha1[[j - 1]]*0.5], {j, 2, Mw}, {i,1, j - 1}];
result1 = PadRight[result11];
result22 = Table[Exp[-(result0[[j - 1, i]]^2)*Alpha1[[j - 1]]*0.5], {j, 2, Mw}, {i, 1, j - 1}];
result2 = PadRight[result22];
predtrainLastdup = Table[Sum[result1[[i, j]], {j, 1, Mw - 1}], {i, 1, Mw - 1}];
predtrainLastddown = Table[Sum[result2[[i, j]], {j, 1, Mw - 1}], {i, 1, Mw - 1}];
predtrainLastd = predtrainLastdup/predtrainLastddown;
result33 = Table[Exp[-2*(result0[[j - 1, i]]^2)], {j, 2, Mw}, {i, 1, j - 1}];
result3 = PadRight[result33];
rou = Table[Sum[result3[[i, j]], {j, 1, Mw - 1}], {i, 1, Mw - 1}];
matrixb2 =Table[rou[[i]]*(trainLastd[[i + 1]] - predtrainLastd[[i]])^2, {i, 1, Mw - 1}];
b2 = Sum[matrixb2[[i]]/(Mw - 1), {i, 1, Mw - 1}];
postp = -Log[b2^(-(Mw - 1)/2)]*Exp[-(Mw - 1)/2];
Plot[postp, {b1, 0, 50}]

optb1 = FindMinimum[{postp, 0.0001 < b1 < 50}, b1]
{0.0000132482, {b1 -> 5.33917}}
2020年11月16日 05点11分
1
Mw = 30;
trainwstd={-0.343619, -1.78989, -0.380043, 1.72798, -0.627254, 0.348522, 0.656261, -0.768291, -0.503788, -0.145976, 1.07402, 1.75997, -0.270296, -0.558593, -1.77163, 0.572725, -0.156404, -1.67037, -0.506315, -0.462523, 1.05856, 1.32859, 0.959541, 1.44407, 0.25478, -0.0461008, -0.648199, -1.45474, 0.924093, -0.00507966};
trainLastd={0.816689, -0.060828, -0.328293, -1.54609, 0.822371, -0.469302, 0.343922, 1.41374, -0.65231, -1.45734, -1.48847, -1.00997, 0.394152, -0.245409, 1.62749, 0.0605587, 1.01268, 1.51944, 0.431856, 1.7025, -0.434982, -0.957084, -0.0629937, -1.99956, 0.014591, 0.389466, 0.849428, -0.0900073, 0.590357, -1.18661};
Alpha = Table[b1, {Mw}];
result4 = Table[Norm[trainwstd[[i]] - trainwstd[[j]]], {i, 1, Mw}, {j, 1, Mw}];
result5 = Exp[-(result4^2)*Alpha*0.5];
f = Table[Sum[result5[[i, j]], {j, 1, Mw}], {i, 1, Mw}];
ff = Table[D[f[[i]], b1], {i, 1, Mw}];
Alpha1 = Table[b1 + (f[[1]] - f[[j]])/ff[[j]], {j, 2, Mw}];
result0 = Table[Norm[trainwstd[[j]] - trainwstd[[i]]], {j, 2, Mw}, {i, 1, j - 1}];
result11 = Table[trainLastd[[i]]* Exp[-(result0[[j - 1, i]]^2)*Alpha1[[j - 1]]*0.5], {j, 2, Mw}, {i,1, j - 1}];
result1 = PadRight[result11];
result22 = Table[Exp[-(result0[[j - 1, i]]^2)*Alpha1[[j - 1]]*0.5], {j, 2, Mw}, {i, 1, j - 1}];
result2 = PadRight[result22];
predtrainLastdup = Table[Sum[result1[[i, j]], {j, 1, Mw - 1}], {i, 1, Mw - 1}];
predtrainLastddown = Table[Sum[result2[[i, j]], {j, 1, Mw - 1}], {i, 1, Mw - 1}];
predtrainLastd = predtrainLastdup/predtrainLastddown;
result33 = Table[Exp[-2*(result0[[j - 1, i]]^2)], {j, 2, Mw}, {i, 1, j - 1}];
result3 = PadRight[result33];
rou = Table[Sum[result3[[i, j]], {j, 1, Mw - 1}], {i, 1, Mw - 1}];
matrixb2 =Table[rou[[i]]*(trainLastd[[i + 1]] - predtrainLastd[[i]])^2, {i, 1, Mw - 1}];
b2 = Sum[matrixb2[[i]]/(Mw - 1), {i, 1, Mw - 1}];
postp = -Log[b2^(-(Mw - 1)/2)]*Exp[-(Mw - 1)/2];
Plot[postp, {b1, 0, 50}]

optb1 = FindMinimum[{postp, 0.0001 < b1 < 50}, b1]{0.0000132482, {b1 -> 5.33917}}