我需要一些帮助来绘制mathematica上混沌振荡器的速度与强制项图。
基本上,我必须解决以下微分方程
x''[t] + b x'[t] - x[t] + x[t]^3 - f Cos[w t] == 0, x'[0] == 0,
x[0] == 0
并以2 * Pi的增量在区间[0,1000]中绘制我的解的速度 对于不同的f值。
也就是说,对于区间[0,2]中的每个f(以.05为增量),我将有大约150个速度点,我必须在一个图上绘制所有这些点。
我虽然使用了一个do循环并想出了像
这样的东西Remove["Global`*"]
b = .1;
w = 1;
Period = 1;
tstep = 2 Pi/Period;
Do[{Do[{data =
Table[Flatten[
Evaluate[{f,
x'[t] /.
NDSolve[{x''[t] + b x'[t] - x[t] + x[t]^3 - f Cos[w t] == 0,
x'[0] == 0, x[0] == 0}, x[t], {t, 0, 1000},
MaxSteps -> 59999]}]], {t, 0, 1000, tstep}]}, {t, 0, 1000,
1}]}, {f, 0, 2, .1}]
但没有运气。
我该怎么做?
答案 0 :(得分:2)
这样做你想要的吗?
b = .1;
w = 1;
sol := {f,
NDSolve[{x''[t] + b x'[t] - x[t] + x[t]^3 - f Cos[w t] == 0,
x'[0] == 0, x[0] == 0}, x[t], {t, 0, 1000}, MaxSteps -> 59999][[1, 1, 2]]}
interpsols = Table[sol, {f, 0, 2, 0.1}];
ListPlot[Table[interpsols, {t, 0, 1000, 2 Pi}]]
首先,让我关注sol
。这是接近你自己的代码(有变化)但是为了清晰而重构,而不是埋没在循环中。
sol :=
相当于SetDelayed[sol, ...
NDSolve
操作不会在sol
某处使用我所做的更改是从NDSolve
:
InterpolatingFunction[{{0.,1000.}},<>][t]
我使用Part
执行此操作:NDSolve[...][[1, 1, 2]]
也可以使用x[t] /. First @ NDSolve[...]
此提取的部分与列表中f
的当前值配对:{f, NDSolve[ ... }
以便稍后可以绘制它们。
现在:
interpsols = Table[sol, {f, 0, 2, 0.1}];
构建一个sol
变化值的表,因为它会全局更改f
的值。这是执行NDSolve的地方。
结果是这种形式的f
的每个值的一系列解决方案:
{{0.,InterpolatingFunction[{{0.,1000.}},<>][t]},
{0.1,InterpolatingFunction[{{0.,1000.}},<>][t]},
{0.2,InterpolatingFunction[{{0.,1000.}},<>][t]},
{0.3,InterpolatingFunction[{{0.,1000.}},<>][t]},
{0.4,InterpolatingFunction[{{0.,1000.}},<>][t]}
...
最后:
ListPlot[Table[interpsols, {t, 0, 1000, 2 Pi}]]
通过评估上面创建的整个系列结果来创建表格,以便全局更改t
和ListPlot
的值。
我想说的更多,但我没时间。我会在几个小时内进行进一步的编辑。