数学模型之微分方程及其MATLAB求解
MATLAB微分方程几种求解方法及程序

第五章 控制系统仿真§5.2 微分方程求解方法以一个自由振动系统实例为例进行讨论。
如下图1所示弹簧-阻尼系统,参数如下: M=5 kg, b=1 N.s/m, k=2 N/m, F=1NF图1 弹簧-阻尼系统假设初始条件为:00=t 时,将m 拉向右方,忽略小车的摩擦阻力,m x 0)0(= s m x /0)0(=•求系统的响应。
)用常微分方程的数值求解函数求解包括ode45、ode23、ode113、ode15s 、ode23s 等。
wffc1.m myfun1.m一、常微分方程的数值求解函数ode45求解 解:系统方程为 F kx x b x m =++•••这是一个单变量二阶常微分方程。
将上式写成一个一阶方程组的形式,这是函数ode45调用规定的格式。
令: x x =)1( (位移))1()2(••==x x x (速度) 上式可表示成:⎥⎦⎤⎢⎣⎡--=⎥⎦⎤⎢⎣⎡=⎥⎥⎦⎤⎢⎢⎣⎡••)1(*20)2(*101)2()2()2()1(x x x x x x x 下面就可以进行程序的编制。
%写出函数文件myfun1.mfunction xdot=myfun1(t,x)xdot=[x(2);1-10*x(2)-20*x(1)];% 主程序wffc1.mt=[0 30];x0=[0;0];[tt,xx]=ode45(@myfun1,t,x0);plot(tt,yy(:,1),':b',tt,yy(:,2),'-r') legend('位移','速度')title('微分方程的解 x(t)')二、方法2:F kx x b x m =++•••251)()()(2++==s s s F s X s G%用传递函数编程求解ksys1.mnum=1;den=[5 1 2];%printsys(num,den)%t=0:0.1:10;sys=tf(num,den);figure(1)step(sys)figure(2)impulse(sys)figure(3)t=[0:0.1:10]';ramp=t;lsim(sys,ramp,t);figure(4)tt=size(t);noise=rand(tt,1);lsim(sys,noise,t)figure(5)yy=0.1*t.^2;lsim(num,den,yy,t)w=logspace(-1,1,100)';[m p]=bode(num,den,w);figure(6)subplot(211);semilogx(w,20*log10(m)); grid onsubplot(212);semilogx(w,p)grid on[gm,pm,wpc,wgc]=margin(sys)figure(7)margin(sys)figure(8)nyquist(sys)figure(9)nichols(sys)方法3:F kx x b x m =++•••125=++•••x x xx x x 4.02.02.0--=•••% 主程序wffc1.mt=[0 30];x0=[0;0];[tt,yy]=ode45(@myfun1,t,x0);figure(1)plot(tt,yy(:,1),':b',tt,yy(:,2),'-r') hold onplot(tt,0.2-0.2*yy(:,2)-0.4*yy(:,1),'-.k ')legend('位移','速度','加速度') title('微分方程的解')figure(2)plot(yy(:,1),yy(:,2))title('平面相轨迹')%写出函数文件myfun1.mfunction xdot=myfun1(t,x)xdot=[x(2);0.2-0.2*x(2)-0.4*x(1)];。
matlab差分法求解微分方程

一、概述微分方程是自然科学和工程技术中常见的数学模型,它描述了连续系统的变化规律。
在实际应用中,求解微分方程是一项重要且复杂的工作。
而matlab是一种常用的科学计算软件,它提供了丰富的数学函数和工具,能够辅助工程师和科学家在求解微分方程方面取得良好的效果。
二、matlab差分法求解微分方程的基本原理差分法是一种常见的数值求解微分方程的方法。
它基于微分的定义,将微分方程中的微分运算用差分逼近来进行计算。
在matlab中,可以利用内置的数学函数和工具,通过差分法求解微分方程,得到数值解或者近似解。
三、matlab中使用差分法求解常微分方程的步骤1. 确定微分方程的类型和边界条件需要明确所要求解的微分方程是什么类型的,以及其所对应的边界条件是什么。
这对于后续的数值求解过程非常重要。
在matlab中,可以利用符号变量和函数来表示微分方程和边界条件。
2. 将微分方程离散化接下来,需要将微分方程进行离散化处理,将微分方程中的微分运算用差分逼近来进行计算。
这一步需要根据微分方程的具体形式和求解精度选择合适的差分方法,常见的有前向差分、后向差分和中心差分等方法。
3. 构建代数方程组将离散化后的微分方程转化为代数方程组。
这一步需要根据微分方程的离散化表达式和边界条件,利用matlab的矩阵和向量运算功能,构建代数方程组。
4. 求解代数方程组利用matlab的求解函数,求解构建得到的代数方程组,得到微分方程的数值解或者近似解。
在求解过程中,需要注意数值稳定性和收敛性,以及选择合适的数值积分方法和迭代算法。
四、实例:使用matlab差分法求解一阶常微分方程为了更好地理解matlab中使用差分法求解微分方程的过程,以下将通过一个具体的实例来演示。
假设要求解如下的一阶常微分方程:dy/dx = -2x + 1, y(0) = 11. 确定微分方程的类型和边界条件根据给定的方程,可以确定它是一阶常微分方程,且给定了初始条件y(0) = 1。
数学建模实验二:微分方程模型Matlab求解与分析

实验二: 微分方程模型Matlab 求解与分析一、实验目的[1] 掌握解析、数值解法,并学会用图形观察解的形态和进行解的定性分析; [2] 熟悉MATLAB 软件关于微分方程求解的各种命令;[3] 通过范例学习建立微分方程方面的数学模型以及求解全过程; [4] 熟悉离散 Logistic 模型的求解与混沌的产生过程。
二、实验原理1. 微分方程模型与MATLAB 求解解析解用MATLAB 命令dsolve(‘eqn1’,’eqn2’, ...) 求常微分方程(组)的解析解。
其中‘eqni'表示第i 个微分方程,Dny 表示y 的n 阶导数,默认的自变量为t 。
(1) 微分方程 例1 求解一阶微分方程 21y dxdy+= (1) 求通解 输入:dsolve('Dy=1+y^2')输出:ans =tan(t+C1)(2)求特解 输入:dsolve('Dy=1+y^2','y(0)=1','x')指定初值为1,自变量为x 输出:ans =tan(x+1/4*pi)例2 求解二阶微分方程 221()04(/2)2(/2)2/x y xy x y y y πππ'''++-=='=-原方程两边都除以2x ,得211(1)04y y y x x'''++-= 输入:dsolve('D2y+(1/x)*Dy+(1-1/4/x^2)*y=0','y(pi/2)=2,Dy(pi/2)=-2/pi','x')ans =- (exp(x*i)*(pi/2)^(1/2)*i)/x^(1/2) +(exp(x*i)*exp(-x*2*i)*(pi/2)^(3/2)*2*i)/(pi*x^(1/2))试试能不用用simplify 函数化简 输入: simplify(ans)ans =2^(1/2)*pi^(1/2)/x^(1/2)*sin(x) (2)微分方程组例3 求解 d f /d x =3f +4g ; d g /d x =-4f +3g 。
MATLAB实验四_求微分方程的解

参数说明
[T,Y] = solver(odefun,tspan,y0)
odefun 为显式常微分方程,可以用命令 inline 定义,或 在函数文件中定义,然后通过函数句柄调用。
dy 2 2 y 2 x 2x 求初值问题 的数值解,求解范 例: dx 围为 [0,0.5] y( 0 ) 1
dsolve的输出个数只能为一个 或 与方程个数相等。
只有很少一部分微分方程(组)能求出解析解。 大部分微分方程(组)只能利用数值方法求数值解。
Matlab函数数值求解
[T,Y] = solver(odefun,tspan,y0)
其中 y0 为初值条件,tspan为求解区间;Matlab在数值求解 时自动对求解区间进行分割,T (列向量) 中返回的是分割点 的值(自变量),Y (数组) 中返回的是这些分割点上的近似解, 其列数等于因变量的个数。
数学实验
实验四
求微分方程的解
问题背景和实验目的
自牛顿发明微积分以来,微分方程在描述事物运 动规律上已发挥了重要的作用。实际应用问题通过 数学建模所得到的方程,绝大多数是微分方程。 由于实际应用的需要,人们必须求解微分方程。 然而能够求得解析解的微分方程十分有限,绝大多 数微分方程需要利用数值方法来近似求解。 本实验主要研究如何用 Matlab 来计算微分方程 (组)的数值解,并重点介绍一个求解微分方程的 基本数值解法--Euler折线法。
Runge-Kutta 方法
Euler 法与 R-K法误差比较
Matlab 解初值问题
用 Maltab自带函数 解初值问题 求解析解:dsolve 求数值解:
ode45、ode23、 ode113、ode23t、ode15s、 ode23s、ode23tb
微分方程的数值解法matlab(四阶龙格—库塔法)

解析解: x x x1 3 2(((ttt))) 0 .0 8 1 1 2 P k 8 0siw n t) (2 .6 3 0 3 3 P k 0siw n t) (0 .2 12 2 2 P k 0siw n t)(
第一个质量的位移响应时程
Y (t)A(Y t)P(t)
(2)
Y (t)A(Y t)P(t)
3. Matlab 程序(主程序:ZCX)
t0;Y0;h;N;P0,w; %输入初始值、步长、迭代次数、初始激励力;
for i = 1 : N
t1 = t0 + h
P=[P0*sin(w*t0);0.0;0.0]
%输入t0时刻的外部激励力
Van der Pol方程
% 子程序 (程序名: dYdt.m ) function Ydot = dYdt (t, Y) Ydot=[Y(2);-Y(2)*(Y(1)^2-1)-Y(1)];
或写为
function Ydot = dYdt (t, Y) Ydot=zeros(size(Y)); Ydot(1)=Y(2); Ydot(2)=-Y(2)*(Y(1).^2-1)-Y(1)];
Solver解算指令的使用格式
说明:
t0:初始时刻;tN:终点时刻 Y0:初值; tol:计算精度
[t, Y]=solver (‘ODE函数文件名’, t0, tN, Y0, tol);
ode45
输出宗量形式
y1 (t0 )
Y
y1
(t1
)
y
1
(t
2
)
y2 (t0 )
y
2
(
t1
)
y
2
(
t
matlab求解微分代数方程

文章主题:探索数学求解软件Matlab在微分代数方程求解中的应用1. 引言微分代数方程(DAE)是描述物理系统中的相互依赖性和复杂性的数学模型。
解决这类方程对于现代科学和工程领域至关重要。
Matlab作为一种强大的数学计算软件,在微分代数方程求解中具有独特的优势。
本文将从简单到复杂的方式,探讨Matlab在DAE求解中的应用,并共享个人见解。
2. DAE的基本概念微分代数方程是描述包含未知函数及其导数或导数与未知函数的组合的方程。
通常的形式为F(x, x', t) = 0,其中x为未知函数,x'为其导数,t为自变量。
在实际应用中,这些方程往往伴随着初始条件和边界条件。
3. Matlab在解常微分方程(ODE)中的应用Matlab拥有丰富的ODE求解函数,如ode45、ode23等,可用于求解各种常微分方程。
这些函数可以自动选择适当的数值积分方法,并提供了方便的接口和参数设置,极大地简化了求解过程。
4. DAE求解方法的挑战与ODE相比,DAE的求解更具挑战性。
由于包含了代数变量和微分变量,常规的数值积分方法难以直接应用。
而且,方程的初始条件和边界条件也增加了求解的复杂性。
5. Matlab在DAE求解中的工具Matlab提供了一系列专门用于DAE求解的函数和工具包,如dare和ddesd等。
这些工具在模型建立、数值解法选择、收敛性分析等方面都具有独特的优势。
6. 案例分析:用Matlab求解电路模型的DAE以电路模型的DAE为例,通过Matlab可以快速建立系统的数学模型,并进行数值求解。
通过对参数的调节和模型的分析,可以更好地理解电路的动态特性,帮助优化设计和故障诊断。
7. 总结与展望通过本文的探讨,我们更深入地了解了Matlab在微分代数方程求解中的重要性和应用。
在未来,随着科学技术的发展,Matlab在此领域的功能和性能将得到进一步的提升,为工程科学领域提供更强大的支持。
个人观点:Matlab作为一种综合性的科学计算软件,对微分代数方程的求解起着至关重要的作用。
matlab微分方程模型

matlab微分方程模型Matlab微分方程模型是一种基于Matlab软件的数学建模方法,用于解决微分方程相关的问题。
微分方程是描述物理、工程和数学问题的重要工具,通过建立微分方程模型,可以对各种现象进行定量分析和预测。
在Matlab中,可以使用ode45函数求解常微分方程(ODE)或者ode15s函数求解刚性ODE。
这些函数可以通过数值方法近似求解微分方程的解析解,从而得到问题的数值解。
具体来说,可以通过在Matlab中定义微分方程的右侧函数,然后使用相应的ode函数进行求解。
例如,考虑一个简单的一阶线性微分方程模型:dy/dx = -ky,其中k为常数。
我们可以通过在Matlab中定义这个微分方程的右侧函数,并使用ode45函数求解。
具体步骤如下:1. 在Matlab中定义微分方程的右侧函数:function dydx = myODE(x,y)k = 0.1; % 设定常数k的值dydx = -k*y;end2. 使用ode45函数求解微分方程:xspan = [0 10]; % 设定求解区间y0 = 1; % 设定初始条件[x,y] = ode45(@myODE, xspan, y0);3. 绘制得到的数值解:plot(x,y);xlabel('x');ylabel('y');title('Solution of dy/dx = -ky');通过以上步骤,我们可以得到微分方程dy/dx = -ky的数值解,并绘制出解的图像。
这个简单的例子展示了如何使用Matlab微分方程模型求解微分方程。
除了一阶线性微分方程,Matlab微分方程模型还可以用于解决更复杂的微分方程问题,包括高阶线性微分方程、非线性微分方程、偏微分方程等。
通过定义相应的微分方程函数和合适的求解方法,可以在Matlab中进行数值求解。
此外,Matlab还提供了丰富的绘图和分析工具,可以对微分方程的解进行可视化和进一步分析。
用Matlab求解微分方程

解微分⽅程有两种解,⼀种是解析解,⼀种是数值解,这两种分别对应不同的解法利⽤dsolve 函数进⾏求解syms x;s = dsolve('eq1,eq2,...', ’cond1,cond2,...', 'v');%eq :微分⽅程%cond :条件%v :独⽴变量%形如:⽅程:y'= f(t,y),初值:y(t0) = y0dsolve('Du = 1+ u^2','t')ans =tan(C2 + t)1i-1i求的解析解s = dsolve('D2y=3*y+2*x','x');% D2y ⽤以表⽰y 的⼆阶导数,默认是以t 为⾃变量的,所以最好指明⾃变量为x.syms y(x);s = dsolve([diff(y,x,2) == 3*y+2*x], [y(0) == 5])% diff 内依次是函数、⾃变量、微分阶数,⽅程⽤==表⽰相等⽽不是赋值求初值问题s = dsolve('Dy = y - 2*t / y','y(0) =1');求边界问题s = dsolve('x*D2y - 3*Dy =x^2','y(1)=0','y(5) = 0','x');求解⽅程s=dsolve('D2y =cos(2*x) - y','y(0) =1','Dy(0) = 0','x');simplify(s);(eqn,cond,‘IgnoreAnalyticConstraints’,false) %设置不化简结果求解⽅程组[f,g]= dsolve('Df = f + g','Dg = -f + g','f(0)=1','g(0) = 2','x');⽤Matlab 求解微分⽅程⽤Matlab 求解微分⽅程解析解1.求解析解2.初值问题3.边界问题4.⾼阶⽅程5.⽅程组问题⼀些例⼦dsolve('D2y+4*Dy+29*y = 0','y(0) = 0','Dy(0)= 15 ','x')ans =3*sin(5*x)*exp(-2*x)[x y z] = dsolve('Dx = 2*x-3*y+3*z','Dy = 4*x-5*y+3*z','Dz = 4*x-4*y+2*z')x =C7*exp(2*t) + C8*exp(-t)y =C7*exp(2*t) + C8*exp(-t) + C9*exp(-2*t)z =C7*exp(2*t) + C9*exp(-2*t)%可以对其进⾏简化操作x = simplify(x)x = C7*exp(2*t) + C8*exp(-t)y = simplify(y)y =exp(-2*t)*(C9 + C8*exp(t) + C7*exp(4*t))%龙格库塔法(Runge-Kutta 法)xfun=@(t,x)0.3.*x.*(1-x/8); %定义赋值函数r=0.3,k=8[tout,xout]=ode45(fun,[0,40],0.1) %⽅程数值解,四五阶RK 法[tout,xout]=ode23(xfun,[t0,tfinal],x0) %⼆三阶RK 法%%ode 系列数值求解形如 / = ( , )的微分⽅程组, 并绘图。