我需要求解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.
我已经查看了其他问题,但没有人解决这个问题。
答案 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的规范,而不是你的等式的数学。有一些常数,例如Mu
和s
,你没有给出。