Во-первых, это кажется (из ContourPlot) довольно простой проблемой максимизации, почему FindMaximum с методом Ньютона имеет проблемы?
Во-вторых, как мне избавиться от предупреждений?
В-третьих, если я не могу избавиться от этих предупреждений, как я могу определить, является ли предупреждение значимым, т.е. максимизация не удалась?
Например, в приведенном ниже коде FindMaximum с методом Ньютона выдает предупреждение, тогда как метод PrincipalAxis не
o = 1/5 Log[E^(-(h/Sqrt[3]))/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
3/10 Log[E^(h/Sqrt[3])/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
1/5 Log[E^(-(h/Sqrt[3]) - Sqrt[2] j)/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
1/10 Log[E^(h/Sqrt[3] - Sqrt[2] j)/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
1/10 Log[E^(-Sqrt[3] h + Sqrt[2] j)/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
1/10 Log[E^(Sqrt[3] h + Sqrt[2] j)/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))];
(* -1 makes more contours towards maximum *)
contourFunc[n_, p_] := Function[{min, max},
range = max - min;
Table[Exp[p (x - 1)] x range + min, {x, 0, 1, 1/n}]
];
cf = contourFunc[10, -1];
ContourPlot @@ {o, {j, -1, 1}, {h, -1, 1}, Contours -> cf}
FindMaximum @@ {o, {{j, 0}, {h, 0}}, Method -> "Newton"}
FindMaximum @@ {o, {{j, 0}, {h, 0}}, Method -> "PrincipalAxis"}
Обратите внимание, я подумал, что, возможно, проблема в том, что градиент, равный 0 в направлении одного из компонентов, был проблемой, но если я нарушу начальную точку, я получу то же предупреждение, вот пример
o = 1/5 Log[E^(-(h/Sqrt[3]))/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
1/5 Log[E^(h/Sqrt[3])/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
1/10 Log[E^(-(h/Sqrt[3]) - Sqrt[2] j)/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
3/10 Log[E^(h/Sqrt[3] - Sqrt[2] j)/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
1/10 Log[E^(-Sqrt[3] h + Sqrt[2] j)/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))] +
1/10 Log[E^(Sqrt[3] h + Sqrt[2] j)/(
2 E^(-(h/Sqrt[3])) + 2 E^(h/Sqrt[3]) +
E^(-(h/Sqrt[3]) - Sqrt[2] j) + E^(h/Sqrt[3] - Sqrt[2] j) +
E^(-Sqrt[3] h + Sqrt[2] j) + E^(Sqrt[3] h + Sqrt[2] j))];
ContourPlot @@ {o, {j, -1, 1}, {h, -1, 1}}
FindMaximum @@ {o, {{j, -0.008983550852535105`}, {h,
0.06931364191023386`}}, Method -> "Newton"}