> 数学 >
Mathematica 解常微分方程组问题
Mathematica 输入:
DSolve[{{x1'[t] == k1[t]*(x2[t] - x1[t]),
y1'[t] == k1[t]*(y2[t] - y1[t]),x2'[t] == k2[t]*(x3[t] - x2[t]),
y2'[t] == k2[t]*(y3[t] - y2[t]),x3'[t] == k3[t]*(x4[t] - x3[t]),
y3'[t] == k3[t]*(y4[t] - y3[t]),x4'[t] == k4[t]*(x1[t] - x4[t]),
y4'[t] == k4[t]*(y1[t] - y4[t]),(x1'[t])^2 + (y1'[t])^2 ==
v^2,(x2'[t])^2 + (y2'[t])^2 == v^2,(x3'[t])^2 + (y3'[t])^2 ==
v^2,(x4'[t])^2 + (y4'[t])^2 == v^2},{x1[0] == 0,y1[0] == a,
x2[0] == 0,y2[0] == 0,x3[0] == a,y3[0] == 0,x4[0] == a,
y4[0] == a,k1[0] == v/a,k2[0] == v/a,k3[0] == v/a,
k4[0] == v/a}},{x1[t],y1[t],x2[t],y2[t],x3[t],y3[t],x4[t],
y4[t],k1[t],k2[t],k3[t],k4[t]},t]
输出为:
{}
请问大侠哪里出错了?
人气:454 ℃ 时间:2020-06-23 05:48:12
解答
格式上的错误是,大括号有一对就可以了,不需要把初始条件和微分方程分割开来.然后,即使改了也是解不了的……要不是这个没有解析解,要不就是mathematica还不会解这个方程的解析解.(mathematica的符号计算不是万能的.)所以,这个只能用NDSolve求数值解,那样要求给出v和a的具体数值,t的定义域,然后,因为不了解你这个方程的具体背景我也只能弄到这里了…… 不过我试着赋了一些v和a的值,都不符合,所以最后还得问一句,你确认这个方程组无误吗?

你说的求它们走过的路程,是要求路线的函数表达式,还是一个标量?如果是标量的话,那应该就是a吧,用相对运动来分析的话。如果是求表达式的话,那就是应该用与你这个类似的思路,但是,你对这个问题的分析不足啊。你仔细看看,k其实是可以用x和y表示出来的。

我试了一下,新得出的方程似乎依旧不能DSolve,但是NDSolve是没问题的。试算了一下(取了v和a等于1):


a = NDSolve[{

    (x2[t] - x1[t]) == 

    x1'[t] Sqrt[(x2[t] - x1[t])^2 + (y2[t] - y1[t])^2],

   (y2[t] - y1[t]) == 

    y1'[t] Sqrt[(x2[t] - x1[t])^2 + (y2[t] - y1[t])^2],

   

   (x3[t] - x2[t]) == 

    x2'[t] Sqrt[(x3[t] - x2[t])^2 + (y3[t] - y2[t])^2],

   (y3[t] - y2[t]) == 

    y2'[t] Sqrt[(x3[t] - x2[t])^2 + (y3[t] - y2[t])^2],

   

   (x4[t] - x3[t]) == 

    x3'[t] Sqrt[(x4[t] - x3[t])^2 + (y4[t] - y3[t])^2],

   (y4[t] - y3[t]) == 

    y3'[t] Sqrt[(x4[t] - x3[t])^2 + (y4[t] - y3[t])^2],

   

   (x1[t] - x4[t]) == 

    x4'[t] Sqrt[(x1[t] - x4[t])^2 + (y1[t] - y4[t])^2],

   (y1[t] - y4[t]) == 

    y4'[t] Sqrt[(x1[t] - x4[t])^2 + (y1[t] - y4[t])^2],

   

   x1[0] == 1, y1[0] == 1, x2[0] == 1, y2[0] == 0,

   x3[0] == 0, y3[0] == 0, x4[0] == 0, y4[0] == 1}, {x1[t], y1[t], 

   x2[t], y2[t], x3[t], y3[t], x4[t], y4[t]}, {t, 0, 1}]


ParametricPlot[{{First@(x1[t] /. a), 

   First@(y1[t] /. a)}, {First@(x2[t] /. a), 

   First@(y2[t] /. a)}, {First@(x3[t] /. a), 

   First@(y3[t] /. a)}, {First@(x4[t] /. a), First@(y4[t] /. a)}}, {t,

   0, 1}, PlotRange -> All]


结果曲线:


推荐
猜你喜欢
© 2024 79432.Com All Rights Reserved.
电脑版|手机版