我正在使用NMaximize从NDSolve函数中获取值:
Flatten[NDSolve[{x''[t] == (F Cos[\[CapitalOmega] t] -
c x'[t] - (k + \[Delta]kb) x[t] + \[Delta]kb y[t])/m,
y''[t] == (-c y'[t] - (k + \[Delta]kb) y[t] + \[Delta]kb x[t])/m,
x'[0] == 0, y'[0] == 0, x[0] == 0, y[0] == 0}, {x[t], y[t]}, {t, 0, 10}]];
NMaximize[{Evaluate[y[t] /. s], 8 < t < 9}, t]
这是一组耦合的二阶常微分方程(它们是由恒定转速陀螺仪导出的)的情况。 在瞬态解决方案褪色并且不再影响结果后,我需要获得最大的响应函数。
我正在尝试使用For循环来获得一系列“CapitalOmega”所达到的不同最大值,例如80到130,步长为1/2。
目前我收到的结果是:
{a, {t -> b}}
如何将它放在列表中,以获取从For循环获得的“a”的所有值?这样就可以使用
绘制它们ListLinePlot[]
答案 0 :(得分:1)
如果对于CapitalOmega的每个值,你从NDSolve得到一些{a,{t-> b}},你只需要'a'值列表
Table[First[NDSolve[...],{CapitalOmega,80,130,1/2}]
应该这样做。 First将每次提取'a'并使用Table而不是For将它们放入列表中。如果我的示例与您的实际代码不完全相同,那么您仍然可以使用这个想法来完成您想要的任务。
注意:当我尝试将您的NDSolve [...]粘贴到Mathematica中时,我得到了
NDSolve :: ndnum:在t == 0`时遇到导数的非数值。
这可能是一个真正的问题,或者可能只是因为你剪切和粘贴你的帖子。