作业帮 > 综合 > 作业

matlab 二元高阶微分方程的求解

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 15:10:27
matlab 二元高阶微分方程的求解
x"=(-5*x/sqrt(x^2+y^2))/(x^2+y^2)
y"=(-5*y/sqrt(x^2+y^2))/(x^2+y^2)
我自己的代码是:
function f=tuoyuan(t,x)
f=[x(3);
(-5*x(1)/sqrt((x(1)^2+x(2)^2)))/(x(1)^2+x(2)^2);
x(4);
(-5*x(2)/sqrt((x(1)^2+x(2)^2)))/(x(1)^2+x(2)^2);]
----------------------------------------------------------------
[t,x]=ode45(@tuoyuan,[0,1000],[3 4 1 2]);
plot(x(:,1),x(:,2))
理论上,图形应该是个椭圆,但实际上总不对,
另外我想问的是,为什么ode45函数运算的结果总会显示出来?加了分号照样会显示.
1、你的ode函数写的有问题,应该是
function f=tuoyuan(t,x)
f=[x(3);
x(4);
(-5*x(1)/sqrt((x(1)^2+x(2)^2)))/(x(1)^2+x(2)^2);
(-5*x(2)/sqrt((x(1)^2+x(2)^2)))/(x(1)^2+x(2)^2)];
这样,f(1)-f(4)分别对应x'、y'、x"、y",你原来的写法把顺序都搞乱了.

2、按照改后的函数,求出来的结果也并非椭圆.求得x'和y'经过一段时间后会变为常值,而x和y则会维持固定的速度增大.你确定微分方程没错吗?怎样见得理论上是一个椭圆呢?

我知道下面的微分方程
x"=-x
y"=-y
其运动轨迹会对应椭圆,而
x"=(-5*x/sqrt(x^2+y^2))
y"=(-5*y/sqrt(x^2+y^2))
或者
x"=-5*x/(x^2+y^2)
y"=-5*y/(x^2+y^2)
的轨迹也都对应椭圆(椭圆的中心在不停变化,可使用comet函数代替plot以看到变化的过程),但你写的这个方程我确实不知道.

3、函数计算结果会显示是因为你的分号位置不对,最后一个分号应该在方括号的外面,如上面我改后的所示.