用matlab求解常系数微分方程组并画出图像
1定义函数:
function y=fun(t,x)
y=zeros(3,1);
x1=x(1);x2=x(2);x3=x(3);
y(1)=x1*(1-x1/150000-0.5*x2/30000);
y(2)=x2*(-1-x2/30000+0.5*x1/150000-2*x3/2200);
y(3)=x3*(-1-x3/2200+2*x2/30000);
2解方程并画图
[t,x]=ode23(@fun,[0,1],[121000,27000,2000]);
hold on
plot(t,x(:,1))
plot(t,x(:,2))
plot(t,x(:,3))
3结果
以上回答你满意么?
说明
求解常微分方程一般使用ode系列函数(其中最常用的是ode45),基本做法就是把微分方程用函数表示出来,然后调用ode函数求解即可。对于本题而言,使用匿名函数描述微分方程更为方便一些。
参考代码
k0=8; k1=1; K=1; k2=5; n=2; % 常数定义ds = @(t,s)[k0-k1*(1+(s(2)/K)^n)*s(1); k1*(1+(s(2)/K)^n)*s(1)-k2*s(2)];s0 = [0; 0]; % 初始条件,注意自行设置tf = 10; % 仿真时间,可根据需要自行修改[t,s] = ode45(ds,[0 tf],s0); % 使用ode求解器求解微分方程% 绘图plot(t,s)xlabel \itt; ylabel '{\its}_1, {\its}_2'legend('{\its}_1(\itt)', '{\its}_2(\itt)')
1定义函数:
function y=fun(t,x)
y=zeros(3,1);
x1=x(1);x2=x(2);x3=x(3);
y(1)=x1*(1-x1/150000-0.5*x2/30000);
y(2)=x2*(-1-x2/30000+0.5*x1/150000-2*x3/2200);
y(3)=x3*(-1-x3/2200+2*x2/30000);
2解方程并画图
[t,x]=ode23(@fun,[0,1],[121000,27000,2000]);
hold on
plot(t,x(:,1))
plot(t,x(:,2))
plot(t,x(:,3))
3结果
>> f=@(t,x)[x(1)*(1-x(1)/150000-0.5*x(2)/30000); ...
x(2)*(-1-x(2)/30000+0.5*x(1)/150000-2*x(3)/2200); ...
x(3)*(-1-x(3)/2200+2*x(2)/30000)];
t_final=100;
x0=[121000;27000;2000];
[t,x]=ode45(f,[0 t_final],x0);
plot(t,x),figure;
plot3(x(:,1),x(:,2),x(:,3));
t_final是设定的仿真终止时间,可以自己修改其值,即题中t的变化
,第一个绘图绘制出系统各个状态和时间关系的二维曲线,第二个绘图
绘制出三个状态的相空间曲线。如果要显示出对应的t值与对应的x值,用
disp([t,x])
利用ode45函数,基本上所有的MATLAB参考书上都有
http://zhidao.baidu.com/question/111304564.html
Matlab快速入门(九)求解常微分方程
Matlab快速入门(九):常微分方程求解方法详解Matlab提供了符号解法和数值解法来处理常微分方程。首先,符号解法通过dsolve命令求解,如输入'equation'和'condition',但可能会出现警告,需要理解其原因。例如:dsolve('equation','condition')数值解法则包括龙格-库塔法和欧拉法。龙格-库塔法通过ode23或ode45...
MATLAB编写程序用四阶龙格库塔法求解常微分方程组,自己写了算的出错...
[t,x]=rk4(@(t,x)[-x(1),-x(3),x(2)],0,2,[1,-1 0], 0.01)函数文件 function [t,x]=rk4(funname,t0,t1,x0,dt)t=[];x=[];while t0<t1 t=[t;t0];x=[x;x0];k1=funname(t0,x0);t0=t0+dt\/2;k2=funname(t0,x0+dt*k1\/2);k3=funname(t0,x0+dt*k2\/2...
解法matlab怎么求一阶常微分方程组(so
上面两题用dsolve都解不出,用ode45数值解法如下:1题中x1=i,x2=s,则:syms x1(t) x2(t)lamda=0.5;u=0.1;V = odeToVectorField(diff(x1) ==lamda*x1*x2-u*x2,diff(x2) ==-lamda*x1*x2+0.1)M = matlabFunction(V,'vars', {'t','Y'})计算区间[0 1],初值[0 0]o...
matlab ode45 求解常微分方程组
这个方程要解出来还要初始条件吧 不妨设(x(0),y(0))=(A,B);还有用ode45只能得到数值解,不能给出解析式表达 那么先建立一个函数文件 test_fun.m function 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);那么调用ode45 x0=(0,0);...
求解常微分方程?作图。matlab
用matlab求解常微分方程的解,及其图形解。可以用下列方法来实现:1、首先,建立自定义常微分方程函数, ode_fun(t,y)2、其二,用ode45函数求解其常微分方程的数值解[t,y]=ode45(@ode_fun,tspan,X0);其中:tspan为时间范围,X0为初始条件3、最后,用plot函数绘制t—y(t),t—y'(t)关系图,...
怎么用matlab解这个微分方程
求解常微分方程(组),一般可以用dsolve函数求其解析值,但有的微分方程只能通过ode函数求出其数值解。题主给出的微分方程,如用dsolve函数求解,则会出现错误,所以该方程可以用ode45函数得到其数值解。求解过程如下:a0=0;tspan=[0,5];fun=@(t,a)2\/(-3+2*(1-a)^(-1\/3)+4*(1-a)^(-...
如何用matlab求解微分方程组
来优化求解过程。此外,还可以通过改变初始条件和求解区间,进一步探索方程组的动态行为。通过这种方式,可以深入理解方程组的复杂性质和潜在的稳定状态。总之,利用Matlab求解微分方程组不仅提供了强大的数值方法,还为研究者和工程师提供了一套完整的工具集,使得复杂问题的求解变得更加便捷和直观。
matlab中求解常微分方程的问题
1、【求解常微分方程的表达式里并没有a、b的值代入】常微分方程里面的a、b只是个符号量,与你输入的数据没有关联起来。可以把输入的a、b转换为字符串,在dsolve的时候拼接成待求解的微分方程,但那样比较麻烦。更可去的做法是直接求解,然后用subs函数代入数据。2、微分方程没有初值的话,得到的表达式...
几道Matlab用于解常微分方程的题目
第一题 y=dsolve('Dy=y-2*y^3*sin(t)','y(0)=1')[T,Y]=ode45(@(t,y)y-2*y^3*sin(t),[0,3],1);plot(T,Y)第二题(1)[T,Y]=ode45(@(t,y)[y(2);(1-y(1)^2)\/2*y(2)-y(1)],[0,3],[1 0]);plot(T,Y(:,1))第二题(2)[T,Y]=ode45(@(t,y)...
用matlab求微分方程组的通解:方程组如下图
值得注意的是,使用dsolve函数时,需要确保方程组是线性的且可解的。对于非线性方程组,可能需要采用其他方法或数值解法。此外,求解过程中的初始条件也会对结果产生影响,因此在实际应用中应根据具体情况设定。这种方法不仅适用于上述特定方程组,还可以推广到更多类型的微分方程组求解问题。通过MATLAB,我们...