如何从For循环中的NMaximize获取值

时间:2013-09-27 20:40:47

标签: for-loop coding-style wolfram-mathematica maximize

我正在使用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[]

1 个答案:

答案 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`时遇到导数的非数值。

这可能是一个真正的问题,或者可能只是因为你剪切和粘贴你的帖子。