查找函数的所有局部最大值

时间:2013-03-07 17:50:49

标签: function maxima

大家好,我试着找到一个函数的所有最大值并绘制最大值所在的点。

功能是:

U[x_,y_,a_]:=-((1-a)/Sqrt[(x-a)^2+y^2])-a/Sqrt[(x+1-a)^2+y^2]- 0.5*(x^2+y^2);

当然这是一个3D功能但我也很满意,如果有人给我一个代码来找到所有 maxima与2D版本的功能。我把功能图表。

points1=Table[{x, 2*U[x, 0, a]}, {x, -1.5, 1.5,0.005}];

ListPlot[points1, Joined->True,PlotRange->{{-1.5,1.5},{-5.5,-3.0}},

AxesLabel-> {“x”,“cost.di Jacobi”}]

我看到了类似的帖子,但功能更复杂,所以我无法理解如何修改代码:https://mathematica.stackexchange.com/questions/5575/how-to-find-all-the-local-minima-maxima-in-a-range

有人可以帮助我吗?感谢。

1 个答案:

答案 0 :(得分:0)

我终于用最大化解决了2d问题。看看我是如何解决这个问题的!

a=0.23;
J=-3.5;
U[x_,y_,a_]:=-((1-a)/Sqrt[(x-a)^2+y^2])-a/Sqrt[(x+1-a)^2+y^2]- 0.5*(x^2+y^2);

f[x_] := U[x, 0, a];
g[x_] := J;

{max1,val1} = Maximize[{U[x,0,a], x < a-1}, x];

{max2,val2} = Maximize[{U[x,0,a], a-1 < x < a}, x];

{max3,val3} = Maximize[{U[x,0,a], x > a}, x];

sol = x /. NSolve[g[x] == f[x] && -1.5 < x < 1.5, x];

Show[
    Plot[{f[x], g[x]}, {x, -1.5, 1.5},AxesLabel->{"x","cost. di Jacobi J(x,a)"},
        Epilog -> { 
            {Red, PointSize[0.025], 
            Point[{x /. val1, max1}], 
            Point[{x /. val2, max2}],
            Point[{x /. val3, max3}],
            Text["\!\(\*SubscriptBox[\(L\), \(1\)]\)",{x /. val1, max1-0.4}],
            Text["\!\(\*SubscriptBox[\(L\), \(2\)]\)",{x /. val2, max2-0.4}],
            Text["\!\(\*SubscriptBox[\(L\), \(3\)]\)",{x /. val3, max3-0.4}]},
            {Black, PointSize[0.025], 
            Point[{a, -6.0}],
            Point[{a-1, -6.0}],
            Text["Cost. di Jacobi \!\(\*SubscriptBox[\(J\), \(0\)]\)",{1.0, J-0.2}]}
                }
        ],
    ListPlot[{#, g[#]} & /@ sol, PlotStyle -> PointSize[Large]]
]