matlab ode45解微分方程组这个是函数文件function [ dy ] = current( u1,u2,iL )dy=zeros(1,3);dy(1)=u1;dy(2)=u1/(1.96*10^-4)+u2/(1.96*10^-4)+iL/(10^-7);dy(3)=-u2/(17.2*10^-3)-0.5*iL/(17.2*10^-3);end这个是仿真计算文件y0=[0.1,0.1,-0.00

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 06:27:54

matlab ode45解微分方程组这个是函数文件function [ dy ] = current( u1,u2,iL )dy=zeros(1,3);dy(1)=u1;dy(2)=u1/(1.96*10^-4)+u2/(1.96*10^-4)+iL/(10^-7);dy(3)=-u2/(17.2*10^-3)-0.5*iL/(17.2*10^-3);end这个是仿真计算文件y0=[0.1,0.1,-0.00
matlab ode45解微分方程组
这个是函数文件
function [ dy ] = current( u1,u2,iL )
dy=zeros(1,3);
dy(1)=u1;
dy(2)=u1/(1.96*10^-4)+u2/(1.96*10^-4)+iL/(10^-7);
dy(3)=-u2/(17.2*10^-3)-0.5*iL/(17.2*10^-3);
end
这个是仿真计算文件

y0=[0.1,0.1,-0.001];
[t,x]=ode45('current',[0,3000],y0);


运行总是出错,看不懂报错

matlab ode45解微分方程组这个是函数文件function [ dy ] = current( u1,u2,iL )dy=zeros(1,3);dy(1)=u1;dy(2)=u1/(1.96*10^-4)+u2/(1.96*10^-4)+iL/(10^-7);dy(3)=-u2/(17.2*10^-3)-0.5*iL/(17.2*10^-3);end这个是仿真计算文件y0=[0.1,0.1,-0.00
1、你贴出来的报错信息和代码对不上号:前面显示错误的那行代码和你贴出来的完全不一样;而后面的错误(Input argument 'u1' is undefined)也不可能是目前的代码所导致的——的确是有错,但错误应该是iL未定义才对.
 
2、使用ode*系列函数解常微分方程,用于描述微分方程的函数(例如你这里的current)输入输出参数是有固定格式要求的,应该是
    dy = current( t,y )
其中t是时间,y是t时刻的状态变量.这两二个参数即使你在函数中用不上,也必须列在参数表中.当然,变量的具体名字可以自定,但含义就是上面说的.
 
例如,按照你现在的写法,传递到current函数的u1就是时间,而u2则是微分方程的状态变量,相当于y,是一个向量,有3个元素.如果按照上面的固定格式,current函数不允许有三个输入参数,那么,既然你写了三个输入参数,第三个参数iL自然就没有定义,所以会出错.
 
我猜测,你的方程中u1、u2和iL其实就是状态变量y——如果是这样,那么在current函数中将其分别以y(1)、y(2)、y(3)代替就可以了,后面的大部分内容也就没必要看了.
 
之所以对描述微分方程的函数(例如current)有这种固定的格式要求,是因为 ode*系列函数属于所谓“函数的函数”(Function Functions),也就是说,它的输入参数当中有其它函数(可以是函数文件名,或者函数句柄,也可以是inline函数、匿名函数).ode* 会反复调用作为参数传递给它的函数,而调用的过程并非由我们决定的,而是固定地写在ode*函数代码中的,所以,对描述微分方程的函数有固定格式要求也就不足为奇了.
 
3、假如描述微分方程的函数除了t和y之外,的确还需要其它数据,应该怎么办?
 
首先,请认真考虑一下问题本身,这些数据到底是什么性质?
如果是常数,可以考虑直接写在current函数里面;
如果变化的,但仅与时间t和状态变量y及其导数有关,也可以直接在current函数里面计算出来,而无需由外部传递.
 
如果上面两种情况都不适合,那么就需要用到传递附加参数了.传递附加参数的常用手段包括使用匿名函数、嵌套函数以及通过函数参数传递三种方式,下面介绍一下第三种方式.
 
ode系列函数较为一般的调用格式为
    [T,Y] =solver(odefun,tspan,y0,options,p1,p2...)
这些参数中,p1、p2等就是要额外传递的参数,而相应的微分方程函数应该定义成
    dy = current( t,y,p1,p2... )
options为求解器选项,如果不知道(同时也不想知道)它有什么用,可以不用管它,调用的时候用空数组([])代替即可.
 
4、还有一点小问题:
    dy=zeros(1,3);
应改成
    dy=zeros(3,1);
描述微分方程的函数要求返回列向量.
 
参考改动
function dy = current( t,y )
u1 = y(1);
u2 = y(2);
iL = y(3);
dy=zeros(3,1);
dy(1)=u1;
dy(2)=u1/(1.96*10^-4)+u2/(1.96*10^-4)+iL/(10^-7);
dy(3)=-u2/(17.2*10^-3)-0.5*iL/(17.2*10^-3);

 
这样修改后,程序可以运行,但求出来的结果是发散的,请你再仔细检查一下方程是否正确.
 
由于不确定你的方程中u1、u2和iL到底是什么,所以只能帮你说到这里了.

dy=zeros(1,3); 这说明返回值是个行向量,但是ode要求返回值是列向量
改成 dy=zeros(3, 1);就对了

matlab解微分方程组求微分方程组的数值解并作图.要求是用ode45的方法来解 Matlab使用ode45解微分方程组的基本问题,下面有一个简单的微分方程组求代码d(X1)/dt=4X1+X2 ^2d(X2)/dt=2*d(X1)/dt+5*X2初始条件是X1=X2=0要用ode45解这个微分方程组该怎么写代码呢? 我在编matlab程序的过程中,需要用ode45解一个一阶微分方程组,我在编matlab程序的过程中,需要用ode45解一个一阶微分方程组,关键问题是这个方程组的系数需要前面的程序传进去,所以我不会用, matlab ode45 求解常微分方程组dx/dt = c-b*x-w*x*y;dy/dt = w*x*y-(b+m)*y;其中c,b,w,m为已知参数,x,y为未知的,分别对t求导,请问这个常微分方程组要怎么用ode45解呢? 这个微分方程组杂用matlab编程求解 matlab解微分方程组ode45用ode45 解微分方程组 以前基本都没碰过matlab,自己试着编了一点儿,搞不定啊, 只剩这么多分了,好人一生平安,雅安加油!@liuliangsxd 您好,下面的是我根据您给的程序,完 为什么用matlab解这个微分方程组解不了?function matlab secondprogramoptions = odeset('RelTol',1e-4,'AbsTol',[1e-5 1e-5]);[Z,Y] = ode45(@factor2,[0 2],[1 0],options);plot(Z,real(Y(:,1)),'-r',Z,real(Y(:,2)),'-.g');h = legend('y1','y2',3);f 用matlab解微分方程组并作图 matlab 微分方程组求解 matlab微分方程组其中 matlab ode45解微分方程组这个是函数文件function [ dy ] = current( u1,u2,iL )dy=zeros(1,3);dy(1)=u1;dy(2)=u1/(1.96*10^-4)+u2/(1.96*10^-4)+iL/(10^-7);dy(3)=-u2/(17.2*10^-3)-0.5*iL/(17.2*10^-3);end这个是仿真计算文件y0=[0.1,0.1,-0.00 Matlab能解含19个方程那么大的常微分方程组吗?Matlab提供的解常微分方程组的函数,例如ode23,ode45等有何区别?哪一个比较适合解含有19个方程,且方程比较复杂的大方程组?谢谢! matlab解微分方程组,这个程序报错,求指导如何改~function x_dot=cha721lotka_volterra(t,x)x_dot=zeros(2,1);x=zeros(2,1);x_dot=[4*x(1)-2*x(1)*x(2);x(1)*x(2)-3*x(2)];t_final=100;x0=[2,3];[t,x]=ode45('cha721lotka_volterra',[0,t_final],x0);p matlab ode45 求解二阶常微分方程新手想用ode45求解上述二阶三元常微分方程组,几次尝试均未成功,请大神帮忙编写matlab代码,最好有图, 求这个二元微分方程组的MATLAB程序 matlab微分方程组ode45以下为M文件内容.M文件运行出错在If那一行.最后如果能得出一个图就对了. matlab ode45求解微分方程组后 怎样输出dy/dt,即如何plot(t,y')? y和y'都是矩阵形式 Matlab 函数M文件 转化 匿名函数以及函数句柄例 ode45解常微分方程组一般解法:[t,x]=ode45(fun,[t0 td],x0);function dx=fun(t,x)dx(1)=2x(1)+x(2);dx(2)=-3x(1)-2x(2);end若写到一个M文件里,怎么表达?