cailiang 发表于 2012-7-8 13:24

matlab解微分方程组求助

动力学方程如下:
function dx=tanhuang1(t,x,k0)
dx=zeros(4,1);
dx(1)=x(2);
dx(2)=-k0*x(1)*(1-1/(sqrt(x(1)^2+x(3)^2)));
dx(3)=x(4);
dx(4)=9.8-k0*x(3)*(1-1/(sqrt(x(1)^2+x(3)^2)));
%%%%%%%%%%%%%%%%%%%%%%%%%%%
主程序如下:
clear all
k0=input('请输入参数k0:');
=ode45('tanhuang1',,,k0)
plot(x(:,1),x(:,2))
%%%%%%%%%%%%%%%%%%%%
无法运行
可是将参数k0取消后,直接令为常数,就可以进行运算,我想知道这个错在哪里?请高手指出,删除K0后的
function dx=tanhuang1(t,x)
dx=zeros(4,1);
dx(1)=x(2);
dx(2)=-1*x(1)*(1-1/(sqrt(x(1)^2+x(3)^2)));
dx(3)=x(4);
dx(4)=9.8-1*x(3)*(1-1/(sqrt(x(1)^2+x(3)^2)));
%%%%%%%%%%%%%%%%%%%%%%%%%%%
主程序如下:
clear all
k0=input('请输入参数k0:');
=ode45('tanhuang1',,)
plot(x(:,1),x(:,2))
%%%%%%%%%%%%%%%%%%%%
直接将K0=1,等于任何常数即可运行啊。

guojq 发表于 2012-7-9 16:45

发表点个人浮浅的看法,可能并不是问题的根本原因。
ode45(),或者说非线性微分方程组的数值解命令,共有四个参数:函数名、自变量范围、初值、允许误差属性。也就是说第四个参数应该为“允许误差属性”,而并不是微分方程的一个变量。
楼主的目的是要解一个带参数的非线性微分方程,一般的线性方程都可以自由地传递变量,非线性微分方程的函数定义也只有两个变量,一个是自变量,一个是函数,并没有另外的变量。而到目前为止,还没有发现带三个变量的定义式。
怎么解决这个问题?考虑在函数中把k0定义成全局变量,在主程序中赋值,但是不成功。看看大家还有别的办法吗。

gghhjj 发表于 2012-7-19 16:21

调用ode45存在问题,简单调整一下就可以了

clear all
k0=input('请输入参数k0:');
options=odeset('RelTol',1e-7);
=ode45(@tanhuang1,,,options,k0)
plot(x(:,1),x(:,2))

gghhjj 发表于 2012-7-19 16:22

guojq 发表于 2012-7-9 16:45 static/image/common/back.gif
发表点个人浮浅的看法,可能并不是问题的根本原因。
ode45(),或者说非线性微分方程组的数值解命令,共有四 ...

ode45可以用于分析变参数的微分方程,你的回复有点误导哦{:{46}:}
页: [1]
查看完整版本: matlab解微分方程组求助