使用NMaximize
第一近似:
s = NDSolve[{x''[t] + x[t] - 0.167 x[t]^3 ==
0.005 Cos[t + -0.0000977162*t^2/2], x[0] == 0, x'[0] == 0}, x[t],
{t, 0, 1000}]
NMaximize[{Evaluate[x[t] /. s[[1]]] , 100 < t < 1000}, t]
{1.26625, {t -> 821.674}}
由於你的函數是一種快速振盪是這樣的:
,它並沒有趕上真正的最大值,如下所示:
Plot[{1.26625, Evaluate[x[t] /. s[[1]]]}, {t, 790, 830},
Frame -> {True, True, False, False}, FrameLabel -> {"t", "x"},
FrameStyle -> Directive[FontSize -> 15], Axes -> False,
PlotRange -> {{790, 830}, {1.25, 1.27}}]
![alt text](https://i.stack.imgur.com/g0y45.png)
所以我們完善我們的邊界,並調整了一點NMaximize功能:
NMaximize[{Evaluate[x[t] /. s[[1]]] , 814 < t < 816}, t,
AccuracyGoal -> 20, PrecisionGoal -> 18, MaxIterations -> 1000]
NMaximize::cvmit: Failed to converge to the requested accuracy or
precision within 1000 iterations. >>
{1.26753, {t -> 814.653}}
它沒有要求的精度內收斂,但現在的結果已經足夠好
Plot[{1.2675307922753962`, Evaluate[x[t] /. s[[1]]]}, {t, 790, 830},
Frame -> {True, True, False, False}, FrameLabel -> {"t", "x"},
FrameStyle -> Directive[FontSize -> 15], Axes -> False,
PlotRange -> {{790, 830}, {1.25, 1.27}}]
![alt text](https://i.stack.imgur.com/8O0ax.png)
請允許我歡迎您來到Stack Overflow,並記住我們通常在這裏做的三件事:1)當您收到幫助時,請嘗試t o也給予答案**在您的專業領域回答問題** 2)**閱讀常見問題解答!! ** 3)當您看到好的問題和答案時,請使用灰色三角形**作爲可信度系統的基礎是用戶通過分享知識獲得的聲譽。還請記住接受更好地解決您的問題的答案,如果有的話,**按複選標記** http://i.imgur.com/uqJeW.png – 2010-12-27 01:54:20