使用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}}]
所以我们完善我们的边界,并调整了一点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}}]
请允许我欢迎您来到Stack Overflow,并记住我们通常在这里做的三件事:1)当您收到帮助时,请尝试t o也给予答案**在您的专业领域回答问题** 2)**阅读常见问题解答!! ** 3)当您看到好的问题和答案时,请使用灰色三角形**作为可信度系统的基础是用户通过分享知识获得的声誉。还请记住接受更好地解决您的问题的答案,如果有的话,**按复选标记** http://i.imgur.com/uqJeW.png – 2010-12-27 01:54:20