2013-03-07 105 views
1

大家好,我試圖找到函數的所有最大值,並畫出最大值所在的點。查找某個函數的所有局部最大值

的功能是:

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的功能,但我也滿足了,如果有人給我一個代碼,找出所有 最大值與功能的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 - > {「×」,「成本迪雅可比。」}]

我看到了類似的帖子,但具有更復雜的功能,所以我不明白如何修改代碼:https://mathematica.stackexchange.com/questions/5575/how-to-find-all-the-local-minima-maxima-in-a-range

有人可以幫助我嗎?謝謝。

回答

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]] 
] 
+0

所以問題在於3D功能。因爲我無法理解在這種情況下如何使用最大化。 – federico 2013-03-08 03:13:08