yhkn.net
当前位置:首页 >> MATLAB如何解非线性常微分方程组,一共二十个方程。 >>

MATLAB如何解非线性常微分方程组,一共二十个方程。

这个方程要解出来还要初始条件吧不妨设(x(0),y(0))=(A,B);还有用ode45只能得到数值解,不能给出解析式表达那么先建立一个函数文件test_fun.mfunction dx=tsst_fun(x,t)dx(1)= c-b*x(1)-w*x(1)*x(2);dx(2)=w*x(1)*x(2)-(b+m)*x(2);那么调用ode45x0=(0,0);t0=0:0.01:10;;%根据你所想要的求得值设定t0,间隔是任意的,与求解所用的步长无关,[x,t]=ode45(@test_fun,t0,x0);得到了

再多都可以解,只要你的方法正确并且机器的配置跟的上

function [t,x]=solv(tspan)% argument% tspan stands for time spanx0 =[0,0];[t,x]=ode45(@odefun,tspan,x0);subplot(2,1,1),plot(t,x(:,1),'-'),title('P');subpl

用ode函数,见帮助

dsolve('D3y+D2y/x-Dy/(x^2)=x','y(500)=0,Dy(500)=0','x'),用这个能够得到y的一个含参数的解,然后根据x=0时,y为有限值来确定参数的值,之后就能解出相应的y'' 和y' ,后面那个貌似用MATLAB不太好实现,最好是自己来分析.

方程组的求解一般是用solve函数,20个方程可以把方程组系数做成矩阵,用poly2str还原成多项式,一个系数矩阵只能针对一个未知数,不要弄错了.至于你说的那个分段函数,我觉得是不是能直接加一个分段函数进去,比如:eq1=a*x1; eq2=b*t; t=myfun(x); function t=myfun1(x) y=1*(x>0)+0*x*(x==0); end

请把微分方程问题贴出来,因为不同的问题使用的函数也就不一样.如简单的问题,可以用dsolve()函数命令,得到其解析解;复杂的问题,则可以用ode45(),ode15s()等函数命令,得到其数值解.

不能用dsolve这个命令的,应该用ode45,或ode32,具体怎么做你可以help,或者百度

回答的一样的问题,还有下面的程序function dy=odefun(t,y) %y(1) x %y(2) x' %y(3) y %y(4) y' %y(5) z %y(6) z' u=9.8*1; dy=zeros(6,1); dy(1)=y(2); dy(2)=-u*y(1)/sqrt(y(1)^2+y(3)^2+y(5)^2)^3; dy(3)=y(4); dy(4)=-u*y(3)/sqrt(y(1)^2+y(3)^2+y(5)^2)^3; dy(5

你的常微分方程组的自定义函数表述有问题.问题一:像下列三个中,不能在等式的右边出现di(1),di(2),di(3)变量.di(1)=(u1-r1*i(1)-m12*di(2)-m13*di(3))/l1;di(2)=(0-r2*i(2)-m12*di(1)-m23*di(3))/l2;di(3)=(0-r3*i(3)-m13*di(1)-m23*di(2))/l3;问题二:如用ode()求方程的数值解,u1、r1、m12、m13、l1、r2、m23、l2、r3、m13、l3必须是具体的数值,还需要有微分方程组的初始条件.问题三:如用dsolve()求方程的解析解,也存在变量过多的问题.

网站首页 | 网站地图
All rights reserved Powered by www.yhkn.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com