Mathematica NDSolve给出错误

时间:2017-12-14 19:36:27

标签: wolfram-mathematica runge-kutta

我需要求解w'=g(t,w(t))形式的差分方程式,其中g定义如下

g[t_, w_] := {f1[t, {w[[3]], w[[4]]}], f2[t, {w[[3]], w[[4]]}], w[[1]],w[[2]]};

和f1,f2是

f1[t_, y_] := Sum[\[Mu][[i]] (s[[i]] - y)/Norm[s[[i]] - y]^2, {i, 1, 5}][[1]];

f2[t_, y_] := Sum[\[Mu][[i]] (s[[i]] - y)/Norm[s[[i]] - y]^2, {i, 1, 5}][[2]];

其他所有内容都已正确定义,并不是错误的原因。 然而,当我使用

sout = NDSolve[{y'[tvar] == g[tvar, y[tvar]], 
y[0] == {Cos[Pi/6], Sin[Pi/6], 0, 0}}, y, {tvar, 0, 2}, Method -> "ExplicitRungeKutta"];

我收到错误

Part::partw: Part 3 of y[tvar] does not exist.
Part::partw: Part 4 of y[tvar] does not exist.

我已经查看了其他问题,但没有人解决这个问题。

1 个答案:

答案 0 :(得分:1)

你想在$ R ^ 4 $中找到一个满足微分方程的函数。

我不认为DSolve和NDSolve有一种操纵矢量微分方程的标准方法,除非用维度表示每个组件的明确名称或索引。

这是一个工作示例,可以在维度4中没有方法规范的情况下执行,其中包含与您的问题类似的符号:

sout={w1[t],w2[t],w3[t],w4[t]} /. NDSolve[{
  w1'[t]== t*w2[t],
  w2'[t]== 2*t*w1[t],
  w3'[t]==-2*w2[t]+w1[t],
  w4'[t]== t*w3[t]-w1[t]+w2[t],

  w1[0]==0,
  w2[0]==1,
  w3[0]==1,
  w4[0]==0
},{w1[t],w2[t],w3[t],w4[t]},{t,0,2}]


ParametricPlot[{{sout[[1, 1]], sout[[1, 3]]}, {sout[[1, 2]], sout[[1, 4]]}}, {t, 0, 2}]

我认为您可以根据自己的需要调整这个工作示例。

我没有使用你原来的问题,因为我想专注于Mathematica的规范,而不是你的等式的数学。有一些常数,例如Mus,你没有给出。