1

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

1 回答 1

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

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

于 2013-09-27T21:28:03.917 回答