matlab常微分方程和常微分方程组求解方法

合集下载

重要:MATLAB常微分方程(组)数值解法

重要:MATLAB常微分方程(组)数值解法

Matlab常微分方程求解问题分类
边值问题:
初值问题:
• 定解附加条件在自变量 的一端
• 一般形式为: y' f (x, y)
y(a)
y0
• 初值问题的数值解法一 般采用步进法,如 Runge-Kutta法
➢ 在自变量两端均给定附加 条件
y' f (x, y)
➢ 一般形式:y(a)y1, y(b)y2
1.根据常微分方程要求的求解精度与速度要求
求解初值问题:
y
'
y
2x y
y ( 0 ) 1
(0x1)
比较ode45和ode23的求解精度和速度
ode45和ode23的比较-1
function xODE clear all clc
format long
y0 = 1; [x1,y1] = ode45(@f,[0,1],y0); [x2,y2] = ode23(@f,[0,1],y0); plot(x1,y1,'k-',x2,y2,'b--') xlabel('x') ylabel('y')
rD = k(3)*C(2)-k(5)*C(4);
rE = k(4)*C(3)+k(5)*C(4);
% Mass balances dCdt = [rA; rB; rC; rD; rE];
三个串联的CSTR等温反应器(例4-3)
function IsothermCSTRs clear all clc CA0 = 1.8; % kmol/m^3 CA10 = 0.4; % kmol/m^3 CA20 = 0.2; % kmol/m^3 CA30 = 0.1; % kmol/m^3 k = 0.5; % 1/min tau = 2; stoptime = 2.9; % min [t,y] = ode45(@Equations,[0 stoptime],[CA10 CA20 CA30],[],k,CA0,tau); disp(' Results:') disp(' t CA1 CA2 CA3') disp([t,y]) plot(t,y(:,1),'k--',t,y(:,2),'b:',t,y(:,3),'r-') legend('CA_1','CA_2','CA_3') xlabel('Time (min)') ylabel('Concentration') % -----------------------------------------------------------------function dydt = Equations(t,y,k,CA0,tau) CA1 = y(1); CA2 = y(2); CA3 = y(3); dCA1dt = (CA0-CA1)/tau - k*CA1; dCA2dt = (CA1-CA2)/tau - k*CA2; dCA3dt = (CA2-CA3)/tau - k*CA3; dydt = [dCA1dt; dCA2dt; dCA3dt];

matlab 常系数微分方程组

matlab 常系数微分方程组

Matlab常系数微分方程组在数学和工程领域,常系数微分方程组是一种重要的数学工具,用于描述许多自然现象和工程问题。

Matlab是一种功能强大的数值计算软件,它提供了许多工具和函数来求解常系数微分方程组。

本文将介绍如何使用Matlab解决常系数微分方程组的问题。

1. 常系数微分方程组的定义常系数微分方程组是指方程组中的系数是常数,不随自变量的变化而变化。

一般形式的常系数微分方程组可以表示为:a_1*y_1' + a_2*y_2' + ... + a_n*y_n' = g(t)其中,y_1, y_2, ..., y_n是未知函数,a_1, a_2, ..., a_n是常数,g(t)是已知函数。

2. Matlab求解常系数微分方程组的函数Matlab提供了多种函数和工具箱来求解常系数微分方程组。

其中,常用的函数有dsolve和ode45。

2.1 dsolve函数dsolve函数是Matlab中用于求解符号微分方程的函数。

对于常系数微分方程组,可以使用dsolve函数来求解。

例如,对于一个二阶常系数微分方程组:a*y'' + b*y' + c*y = g(t)可以使用以下代码来求解:syms y(t)eqn = a*diff(y, 2) + b*diff(y) + c*y == g(t);sol = dsolve(eqn);其中,y(t)是未知函数,a, b, c是常数,g(t)是已知函数。

eqn是微分方程的符号表达式,sol是方程的解。

2.2 ode45函数ode45函数是Matlab中用于求解常微分方程的函数。

对于常系数微分方程组,可以使用ode45函数来求解。

例如,对于一个二阶常系数微分方程组:a*y'' + b*y' + c*y = g(t)可以使用以下代码来求解:function dydt = odefun(t, y)dydt = zeros(2, 1);dydt(1) = y(2);dydt(2) = (g(t) - b*y(2) - c*y(1)) / a;end[t, y] = ode45(@odefun, [t0, tf], [y0, y0']);其中,odefun是一个自定义的函数,用于定义微分方程组的右侧。

matlab龙格库塔方法求解二元二阶常微分方程组

matlab龙格库塔方法求解二元二阶常微分方程组

matlab龙格库塔方法求解二元二阶常微分方程组文章标题:深入探讨matlab中的龙格库塔方法及其在求解二元二阶常微分方程组中的应用摘要:在科学与工程领域,常常需要求解复杂的微分方程组,而matlab作为一种强大的数学工具,提供了许多求解微分方程组的方法。

本文将深入探讨matlab中的龙格库塔方法及其在求解二元二阶常微分方程组中的应用,以便读者全面理解该方法并能灵活应用于实际问题中。

正文:一、介绍龙格库塔方法龙格-库塔法(Runge-Kutta methods)是一种数值求解常微分方程的方法,通过将微分方程的解进行离散化,将微分方程转化为差分方程,从而进行数值求解。

龙格库塔方法通过迭代计算,能够得到微分方程的数值解,广泛应用于科学计算和工程技术领域。

二、matlab中的龙格库塔方法在matlab中,龙格库塔方法通过ode45函数实现,该函数能够对一阶或高阶常微分方程进行数值求解。

用户可以通过设定初始条件、微分方程表达式,以及积分区间等参数,快速得到微分方程的数值解。

ode45函数采用自适应步长的方式进行求解,能够有效解决微分方程解的数值稳定性和精确度问题。

三、龙格库塔方法在求解二元二阶常微分方程组中的应用考虑如下形式的二元二阶常微分方程组:$$\begin{cases}y_1' = f_1(t, y_1, y_2) \\y_2' = f_2(t, y_1, y_2)\end{cases}$$其中,$y_1(t)$和$y_2(t)$是未知函数,$f_1(t, y_1, y_2)$和$f_2(t,y_1, y_2)$分别表示其对应的函数表达式。

通过matlab中的ode45函数,可以将该二元二阶常微分方程组转化为一阶常微分方程组的形式,然后利用龙格库塔方法进行数值求解。

设定初始条件$y_1(0) = y1_0, y_2(0) = y2_0$,对应的一阶方程组为:$$\begin{cases}u_1' = u_3 \\u_2' = u_4 \\u_3' = f_1(t, u_1, u_2) \\u_4' = f_2(t, u_1, u_2)\end{cases}$$其中,$u_1(t) = y_1(t), u_2(t) = y_2(t), u_3(t) = y_1'(t), u_4(t) =y_2'(t)$,通过ode45函数求解该一阶常微分方程组即可得到原二元二阶常微分方程组的数值解。

matlab-常微分方程

matlab-常微分方程

Events
含义 为‘on’时,控制解向量 有效值: 范数的相对误差,使每 on、off 步计算中,满足: 缺省值: norm(e)<=max(RelTol*n off orm(y),AbsTol) 有效值: 为‘on’时,返回相应的 on、off 事件记录
取值
参数设置
属性名 含义 若无输出参量,则solver 将执行下面操作之一: 有效值: 画出解向量中各元素随 odeplot、 时间的变化; odephas2、画出解向量中前两个分 odephas3、量构成的相平面图; odeprint 画出解向量中前三个分 缺省值: 量构成的三维相空间图 odeplot ; 随计算过程,显示解向 量 取值
使用于精度较低 的情形
OD 求解器 E类 Solver 型 非 ode113 刚 性 适 度 ode23t 刚 性 刚 ode15s 性
特点
说明
多步法;Adams算 计算时间比ode45 法;高低精度均可 短 -3~10-6 到10 采用梯形算法 适度刚性情形
多步法;Gear’s反 若ode45失效时, 向数值微分;精度 可尝试使用 中等
• (6)若没有给定输出参量,则在命令窗口显 示解列表。若该命令找不到解析解,则返 回一警告信息,同时返回一空的sym对象。 这时,用户可以用命令ode23或ode45求解 方程组的数值解。
y ′′ = −a y ′ y ( 0) = 1 y ′(π / a ) = 0
2
例1
例2
• >> [u,v] = dsolve('Du=v,Dv=u') u= C1*exp(-t)+C2*exp(t) V= -C1*exp(-t)+C2*exp(t)

如何使用MATLAB求解微分方程(组)ppt课件

如何使用MATLAB求解微分方程(组)ppt课件

差,输出参数,事件等,可缺省。 9
使用ODE?时如何编 写微分方程 ?
方式一:带额外参数,使用时需对参数进行赋值
function odefun(t,x,flag,R,L,C) %用flag说明R、L、C为变 量
xdot=zeros(2,1);
%表明其为列向量
xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);
2
Where ?
工程控制
ODE
医学生理
航空航天
金融分析
3
Where ?
算法开发 数据分析
数值计算 MAT LAB
数据可视化
4
When ?
当对问题进行建模后,有常微分方程 需要求解时。
在生物建模中,经常需要求解常微分 方程。如药物动力学的房室模型的建模 仿真。
5
方法 ode23
ode45
数 ode113
当无法藉由微积分技巧求 得解析解时,这时便只能利 用数值分析的方式来求得其 数值解了。实际情况下,常 微分方程往往只能求解出其
数值解。
在数学中,刚性方程是指一 个微分方程,其数值分析的解 只有在时间间隔很小时才会稳 定,只要时间间隔略大,其解 就会不稳定。
目前很难去精确地去定义哪 些微分方程是刚性方程,但是 大体的想法是:这个方程的解
y(1)=x(2);
y1
y2
y(2)= -t*x(1)+exp(t)*x(2)+3*sin(2*t);
end
1000
求解程序ห้องสมุดไป่ตู้键步骤
[t,y]=ode45('odefun',[3.9 4.0],[2 8])
y

matlab_常微分方程数值解法

matlab_常微分方程数值解法
d2x 2x2 0
dt 2
简朴问题可以求得解析解,多数实际问题靠数值求解 。
第4页
一阶常微分方程(ODE )初值问题 : ODE :Ordinary Differential Equation
dy
f
(x,
y)
dx
x0 x xn
y(x0 ) y0
数值解法就是求y(x)在某些分立旳节点 xn 上旳近似值 yn,用以近似y(xn)
x0
y0
x1 f y(x), x dx
x0
x2 f y(x), x dx
x1
y(x1) f y(x1), x1 h
第17页
同样,在[x0,xn+1] ,积分采用矩形近似,得:
y(xn1) y0
f xn1
x0
y(x), x dx
y(xn ) f y(xn ), xn h
yn y(xn )
第5页
2、欧拉近似办法
2.1 简朴欧拉(L.Euler, 1707-1783)办法。
dy
dx
f
(y, x)
y(x0 ) y0
欧拉数值算法就是由初值通过递推求解,递推求解
就是从初值开始,后一种函数值由前一种函数值得到。核 心是构造递推公式。
y0 y1 y2 yn
第6页
i 1,2,...
第36页
没有一种算法可以有效地解决所有旳 ODE 问题,因此 MATLAB 提供了多种ODE函数。
函数 ODE类
特点
阐明

ode45
非刚性 单步法;4,5 阶 R-K 措施;合计 大部分场合旳首选措施
截断误差为 (△x)3
ode23
非刚性 单步法;2,3 阶 R-K 措施;合计 使用于精度较低旳情形

matlab梯形法求常微分方程

matlab梯形法求常微分方程

近年来,随着科技的迅猛发展,人们对数学问题的求解需求也越来越迫切。

在数值分析中,常微分方程的求解一直是一个备受关注的领域。

而在这个领域中,matlab梯形法求解常微分方程成为了一种被广泛应用的方法。

那么,什么是matlab梯形法?它又是如何应用于求解常微分方程的呢?让我们来深入了解matlab梯形法。

在matlab中,梯形法是一种常用的数值求解方法,它可以用于求解常微分方程。

该方法的基本思想是将微分方程中的导数用差分代替,从而将微分方程转化为代数方程组,再利用matlab进行求解。

通过该方法,我们可以得到微分方程的数值解,从而更好地理解和分析问题。

现在,让我们来探讨matlab梯形法在求解常微分方程中的应用。

假设我们需要求解如下的一阶常微分方程:\[ \frac{dy}{dt} = f(t,y) \]其中,\( f(t,y) \) 是关于\( t \)和\( y \)的函数。

我们需要将微分方程离散化,即用差分代替导数。

通过将时间区间\( [a, b] \)进行均匀划分,我们可以得到:\[ t_0 = a, t_1, t_2, ..., t_n = b \]\[ y_0 = \alpha, y_1, y_2, ..., y_n \]\[ h = \frac{b-a}{n} \]其中,\( t_i \) 是时间节点,\( y_i \) 是对应的近似解,\( h \) 是时间步长。

接下来,我们可以利用梯形法进行求解。

梯形法的迭代公式为:\[ y_{i+1} = y_i + \frac{h}{2}[f(t_i, y_i) + f(t_{i+1}, y_{i+1})] \]通过不断迭代,我们可以得到微分方程的数值解。

在实际应用中,matlab梯形法可以很好地处理各种类型的常微分方程。

无论是线性方程还是非线性方程,matlab梯形法都能提供较为准确的数值解。

该方法还可以用于求解初值问题和边值问题,具有较好的通用性和适用性。

matlab求解常微分方程

matlab求解常微分方程

matlab求解常微分⽅程本⽂主要介绍matlab中求解常微分⽅程(组)的dsolve和ode系列函数,并通过例⼦加深读者的理解。

⼀、符号介绍D: 微分符号;D2表⽰⼆阶微分,D3表⽰三阶微分,以此类推。

⼆、函数功能介绍及例程1、dsolve 函数dsolve函数⽤于求常微分⽅程组的精确解,也称为常微分⽅程的符号解。

如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。

1)函数格式Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)其中,‘eq1,eq2,…’:表⽰微分⽅程或微分⽅程组;’cond1,cond2,…’:表⽰初始条件或边界条件;‘Name’:表⽰变量。

没有指定变量时,matlab默认的变量为t;2)例程例1.1(dsolve 求解微分⽅程)求解微分⽅程:dsolve('Dy=3*x^2','x')例1.2(加上初始条件)求解微分⽅程:例2(dsolve 求解微分⽅程组)求解微分⽅程组:由于x,y均为t的导数,所以不需要在末尾添加’t’。

2、ode函数在上⽂中我们介绍了dsolve函数。

但有⼤量的常微分⽅程,虽然从理论上讲,其解是存在的,但我们却⽆法求出其解析解,此时,我们需要寻求⽅程的数值解。

ode是Matlab专门⽤于解微分⽅程的功能函数。

该求解器有变步长(variable-step)和定步长(fixed-step)两种类型。

不同类型有着不同的求解器,具体说明如下图。

其中,ode45求解器属于变步长的⼀种,采⽤Runge-Kutta算法;其他采⽤相同算法的变步长求解器还有ode23。

ode45表⽰采⽤四阶-五阶Runge-Kutta算法,它⽤4阶⽅法提供候选解,5阶⽅法控制误差,是⼀种⾃适应步长(变步长)的常微分⽅程数值解法,其整体截断误差为(Δx)^5。

解决的是Nonstiff(⾮刚性)常微分⽅程。

matlab中的向后euler方法

matlab中的向后euler方法

matlab中的向后euler方法在MATLAB中使用向后Euler方法来求解常微分方程组或者偏微分方程时,可以采取以下步骤:1. 定义常微分方程或者偏微分方程:- 对于常微分方程,定义一个函数,该函数输入当前时间t和当前状态向量y,输出导数向量dy/dt。

例如,定义函数`dy= myODE(t, y)`表示dy/dt的计算。

- 对于偏微分方程,定义一个偏微分方程函数,该函数输入当前时间t和当前状态向量y,输出偏微分方程的明确形式。

例如,定义函数`F = myPDE(t, y)`表示偏微分方程的明确形式。

2. 设置时间步长和求解区间。

- 使用`tspan = [t0, tf]`定义求解区间,其中t0是初始时间,tf是最终时间。

- 使用一个合适的步长h,用于定义离散的时间网格。

3. 初始化状态向量。

- 对于常微分方程,定义一个初始状态向量y0,表示在t0时间点的状态。

- 对于偏微分方程,初始化状态向量。

4. 使用向后Euler方法迭代求解。

- 使用一个循环来迭代求解每个时间点的状态向量。

- 对于常微分方程,使用`y(n+1) = y(n) + h * myODE(t(n+1),y(n+1))`更新状态向量,其中myODE是定义的常微分方程函数。

- 对于偏微分方程,可以使用`y(n+1) = y(n) + h *myPDE(t(n+1), y(n+1))`来更新状态向量,其中myPDE是定义的偏微分方程函数。

5. 结果可视化。

- 使用`plot`函数将结果可视化,例如`plot(t, y)`。

注意:对于偏微分方程的求解,通常还需要使用合适的边界条件和初始条件,并对空间离散化进行处理。

这超出了本文的范围,需要根据具体问题进行适当的处理。

matlab解常微分方程

matlab解常微分方程

matlab解常微分⽅程1. ODE常微分⽅程ordinary differential equation的缩写,此种表述⽅式常见于编程,如MATLAB中Simulink求解器solver已能提供了7种微分⽅程求解⽅法:ode45(Dormand-Prince),ode23(Bogacki-Shampine),ode113(Adams),ode15s(stiff/NDF),ode23s(stiff/Mod. Rosenbrock),ode23t(mod.stiff/Trapezoidal),ode23tb(stiff/TR-BDF2)。

微分⽅程、微分⽅程组⾃标量 因变量 ⼀元 多元 函数 映射⼀元:只有⼀个因变量多元:有多个因变量导数 偏导:谁对谁的导数,因变量对⾃变量的导数,默认或缺省⾃变量为t 、x ?⼀元⽅程 多元⽅程 多元⽅程组 n个⽅程解n个未知量微分⽅程 ⼀阶 ⾼阶微分⽅程 ⼀阶微分⽅程组⼀阶常微分⽅程:Dx/dt + x = e^t⾼阶常微分⽅程:d^2x/dt^2+dx/dt+x=e^2t⼀阶微分⽅程组(多元):dy/dt+x=e^2tdx/dt+2y-x=e^t初始条件:dy/dt0=... dx/dt0=... y0=... x0=...可以解出:y=f(t)=.... x=f(t)=.... 两个⽅程解两个未知数(因变量)⼀个N阶(多元)微分⽅程可以写成(分解成)N个⼀阶微分⽅程(即微分⽅程组)如:x.. + 2x. -x = u令x.=x2; x=x1 则...微分⽅程的精确解: r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var').数值解: [t,y]=solver('odefun',tspan,y0,options)1. 求精确解1.微分⽅程r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var').该命令中可以⽤D表⽰微分符号,其中D2表⽰⼆阶微分,D3表⽰三阶微分,以此类推。

用MATLAB求解微分方程

用MATLAB求解微分方程
用MATLAB求解微分方程
1. 微分方程的解析解
求微分方程(组)的解析解命令:
dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)
结 果:u = tan(t-c)
解 输入命令:dsolve('Du=1+u^2','t')
STEP2
STEP1
解 输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')
导弹追踪问题
设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度v0(是常数)沿平行于y轴的直线行驶,导弹的速度是5v0,求导弹运行的曲线方程.又乙舰行驶多远时,导弹将它击中? 解法一(解析法)
由(1),(2)消去t整理得模型:
解法二(数值解)
结 果 为:x = (c1-c2+c3+c2e -3t-c3e-3t)e2t y = -c1e-4t+c2e-4t+c2e-3t-c3e-3t+c1-c2+c3)e2t z = (-c1e-4t+c2e-4t+c1-c2+c3)e2t
2、取t0=0,tf=12,输入命令: [T,Y]=ode45('rigid',[0 12],[0 1 1]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+')
3、结果如图
图中,y1的图形为实线,y2的图形为“*”线,y3的图形为“+”线.

matlab求解常微分方程

matlab求解常微分方程

用matlab 求解常微分方程在MATLAB 中,由函数dsolve ()解决常微分方程(组)的求解问题,其具体格式如下:r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...',是初始条件或边界条件,'v'是独立变量,默认的独立变量是't'。

函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。

例1:求解常微分方程1dy dx x y =+的MATLAB 程序为:dsolve('Dy=1/(x+y)','x'),注意,系统缺省的自变量为t ,因此这里要把自变量写明。

其中:Y=lambertw(X)表示函数关系Y*exp(Y)=X 。

例2:求解常微分方程的MATLAB 程序为:2'''0yy y −=Y2=dsolve('y*D2y-Dy^2=0','x')Y2=dsolve('D2y*y-Dy^2=0','x')我们看到有两个解,其中一个是常数0。

例3:求常微分方程组253ttdxx y edtdyx y edt⎧++=⎪⎪⎨⎪−−=⎪⎩通解的MATLAB程序为:[X,Y]=dsolve('Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t)','t')例4:求常微分方程组2210cos,24,tttdx dyx t xdt dtdx dyy e ydt dt=−=⎧+−==⎪⎪⎨⎪++==⎪⎩2通解的MATLAB程序为:[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-2*t)','x(0)=2,y(0)=0','t')以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。

matlab中解方程组

matlab中解方程组

MATLAB中解方程组1. 引言在科学计算和工程领域,解方程组是一个常见的任务。

MATLAB作为一种强大的数值计算软件,提供了多种方法来解决方程组问题。

本文将介绍MATLAB中解方程组的基本方法和技巧。

2. 方程组的表示在MATLAB中,我们可以使用矩阵和向量的形式表示线性方程组。

例如,考虑以下线性方程组:2x + 3y = 74x - y = -1可以将其表示为矩阵和向量的形式:A = [2, 3; 4, -1]B = [7; -1]其中A是系数矩阵,B是常数向量。

3. 使用反斜杠运算符求解方程组MATLAB提供了一个简单而强大的运算符\来求解线性方程组。

例如,我们可以使用以下代码求解上述方程组:A = [2, 3; 4, -1];B = [7; -1];X = A \ B;运行以上代码后,变量X将包含方程组的解。

通过命令disp(X)可以打印出结果。

4. 解非线性方程组除了线性方程组外,MATLAB还可以用于求解非线性方程组。

非线性方程组的求解更加复杂,通常需要使用数值方法来逼近解。

MATLAB提供了多种函数和工具箱来求解非线性方程组。

其中最常用的是fsolve函数,它可以通过迭代方法求解非线性方程组。

例如,考虑以下非线性方程组:x^2 + y^2 = 1x + y = 1我们可以使用fsolve函数求解该方程组:fun = @(x) [x(1)^2 + x(2)^2 - 1; x(1) + x(2) - 1];x0 = [0; 0];options = optimoptions('fsolve', 'Display', 'iter');[x, fval] = fsolve(fun, x0, options);在以上代码中,fun是一个匿名函数,表示要求解的非线性方程组。

x0是初始猜测值,options是优化选项。

运行以上代码后,变量x将包含方程组的解,fval将包含目标函数的值。

matlab求解常微分方程的准确解

matlab求解常微分方程的准确解

matlab求解常微分方程的准确解使用Matlab求解常微分方程的准确解一、引言常微分方程是研究自然界现象和工程实际问题中常见的数学工具之一。

求解常微分方程的准确解对于理解问题的本质和性质具有重要意义。

本文将介绍如何使用Matlab来求解常微分方程的准确解,并通过具体的例子进行演示。

二、常微分方程的基本概念常微分方程是指包含未知函数及其导数的方程。

一般形式为:dy/dx = f(x,y)其中,y是未知函数,x是自变量,f(x,y)是已知函数。

常微分方程的解是指能够满足方程的函数y(x)。

三、Matlab的符号计算工具箱Matlab提供了符号计算工具箱,可以对方程进行符号计算。

通过符号计算工具箱,我们可以求解常微分方程的准确解。

四、使用Matlab求解常微分方程的步骤1. 定义未知函数和自变量。

在Matlab中,可以使用符号变量来定义未知函数和自变量。

2. 定义常微分方程。

使用符号变量来定义常微分方程。

3. 求解常微分方程。

使用dsolve函数来求解常微分方程的准确解。

4. 绘制准确解的图像。

使用ezplot函数来绘制准确解的图像。

五、具体例子假设我们要求解一阶线性常微分方程:dy/dx + y = x其中,y是未知函数,x是自变量。

1. 定义未知函数和自变量。

在Matlab中,可以使用符号变量来定义未知函数和自变量。

syms y(x)2. 定义常微分方程。

使用符号变量来定义常微分方程。

eqn = diff(y,x) + y == x3. 求解常微分方程。

使用dsolve函数来求解常微分方程的准确解。

sol = dsolve(eqn)4. 绘制准确解的图像。

使用ezplot函数来绘制准确解的图像。

ezplot(sol)六、总结本文介绍了如何使用Matlab求解常微分方程的准确解。

通过符号计算工具箱,我们可以方便地求解常微分方程,并得到准确解的图像。

使用Matlab求解常微分方程的准确解可以帮助我们更好地理解问题的本质和性质,并为进一步的分析和应用提供基础。

Matlab 求解化工常微分方程和偏微分方程

Matlab 求解化工常微分方程和偏微分方程
y
x
7
8
9
10
x
y(1) Columns 1 through 13
计算值
0 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 1.0000 1.0526 1.1109 1.1757 1.2479 1.3287 1.4195 1.5218 1.6378 1.7698 1.9210 2.0951 2.2970 Columns 14 through 26 0.6500 0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 1.0500 1.1000 1.1500 1.2000 1.2500 2.5329 2.8107 3.1411 3.5381 4.0206 4.6152 5.3598 6.3078 7.5435 9.1928 11.4614 14.7283 19.5991
Results by using ode45(): x y(1) 1.0e+003 * Columns 1 through 13 0 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700 0.0800 0.0900 0.1000 0.1100 0.1200 2.0000 0.8788 0.6133 0.4880 0.4181 0.3762 0.3498 0.3328 0.3218 0.3145 0.3097 0.3065 0.3043 Columns 14 through 18 0.1300 0.3029 0.1400 0.3019 0.1500 0.3013 0.1600 0.3009 0.1700 0.3006

实验七用matlab求解常微分方程(最新整理)

实验七用matlab求解常微分方程(最新整理)

实验七 用matlab 求解常微分方程一、实验目的:1、熟悉常微分方程的求解方法,了解状态方程的概念;2、能熟练使用dsolve 函数求常微分方程(组)的解析解;3、能熟练应用ode45\ode15s 函数分别求常微分方程的非刚性、刚性的数值解;4、掌握绘制相图的方法二、预备知识:1.微分方程的概念未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。

如果未知函数是一元函数,称为常微分方程。

常微分方程的一般形式为),,",',,()(=n y y y y t F 如果未知函数是多元函数,成为偏微分方程。

联系一些未知函数的一组微分方程组称为微分方程组。

微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。

若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为)()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++-- 若上式中的系数ni t a i ,,2,1),( =均与t 无关,称之为常系数。

2.常微分方程的解析解有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy可化为dt y dy=+1,两边积分可得通解为1-=tce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解.线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。

高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。

一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程),,",',()1()(-=n n y y y t f y 设)1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组⎪⎪⎪⎩⎪⎪⎪⎨⎧====-),,,,(''''2113221n n nn y y y t f y yy y y y y反过来,在许多情况下,一阶微分方程组也可化为高阶方程。

matlab 求解常微分方程组

matlab 求解常微分方程组

一、概述随着科技的发展,数学在各个领域中都扮演着非常重要的角色。

微分方程作为数学中的一个重要分支,在物理、工程、生物等领域都有着广泛的应用。

而 MATLAB 作为一个强大的数学软件工具,可以帮助我们快速高效地求解各种类型的微分方程组,从而为各领域的研究和应用提供有力的支持。

本文将详细介绍如何使用 MATLAB 求解常微分方程组的方法及步骤。

二、常微分方程组的定义常微分方程组是指这样一类微分方程组:一个或多个未知函数及其导数的方程组。

一般形式为:dx1/dt=f1(t,x1,x2,...,xn),dx2/dt=f2(t,x1,x2,...,xn),..., dxn/dt=fn(t,x1,x2,...,xn)。

其中x1,x2,...,xn 是未知函数,t是自变量,f1,f2,...,fn 是关于 t 和x1,x2,...,xn 的已知函数。

三、求解常微分方程组的方法MATLAB 提供了多种方法来求解常微分方程组,常用的方法有:欧拉法、四阶龙格库塔法、常微分方程组函数 ode45、ode23、ode113 等。

下面将分别介绍各种方法的具体步骤。

四、使用欧拉法求解常微分方程组欧拉法是一种简单粗糙的数值解法,通过分割等间距的步长满足微分方程初值问题。

其具体步骤如下:1. 定义微分方程组的初始条件和步长:x0=[x1(0),x2(0),...,xn(0)],h=步长。

2. 使用欧拉法逐步逼近微分方程组的解:for i=1:Nt(i)=t(i-1)+h;x(:,i+1)=x(:,i)+h*f(t(i),x(:,i));end其中 x(:,i)=[x1(i),x2(i),...,xn(i)] 为微分方程组在第 i 个时间节点的解。

五、使用四阶龙格库塔法求解常微分方程组四阶龙格库塔法是一种常用的数值解法,通过多次近似来计算微分方程组的数值解。

其具体步骤如下:1. 定义微分方程组的初始条件和步长:x0=[x1(0),x2(0),...,xn(0)],h=步长。

第12章 MATLAB常微分方程(组)数值求解方程与方程组的数值解

第12章 MATLAB常微分方程(组)数值求解方程与方程组的数值解
基于修正的二阶Rosenbrock公式。由于是 单步解算器,当精度要求不高时,它效率 可能会高于ode15s。它可以解决一些
ode15s求解起来效率不太高的刚性问题。
ode23t可以用来求解微分代数方程。
ode23tb 刚性

当方程是刚性的,并且求解要求精度不高
时可以使用。
2020/6/19
© 吴鹏, MATLAB从零到进阶.
常微分方程数值解
【例12.4-1】的结果图:
方 法 1计 算 结 果 图 1
方 法 2计 算 结 果 图 1
方 法 3计 算 结 果 图 1
0.8
0.8
0.8
0.6
0.6
0.6
0.4
0.4
0.4
0.2
0.2
0.2
0
0
0
-0.2
-0.4 0
2020/6/19
y1(t)
-0.2
y2(t)
y3(t)
-0.4
在某段时间区间内的变化来看。非刚性问题变化相对缓 慢,而刚性问题在某段时间内会发生剧烈变化,即很短 的时间内,解的变化巨大。对于刚性问题不适合用 ode45来求解,如果硬要用ode45来求解的话,达到指定 精度所耗费的时间往往会非常长 。
2020/6/19
© 吴鹏, MATLAB从零到进阶.
二、 非刚性问题举例
这些函数可以求解非刚性问题,刚性问题,隐式
微分方程,微分代数方程等初值问题,也可以求解 延迟微分方程,以及边值问题等。
2020/6/19
© 吴鹏, MATLAB从零到进阶.
二、初值问题求解函数
常微分方程数值解
1. 提供的函数
ode23, ode45, ode113, ode15s, ode23s, ode23t, ode23tb,这些函数统一 的调用格式如下:

matlab解微分方程组

matlab解微分方程组

matlab解微分方程组
MATLAB是一种强大的计算工具,能够以高效的方式处理复杂的数学问题。

由于其灵活的编程接口和拥有大量可用的函数,MATLAB可以被用于解决各种不同类型的微分方程组。

本文将介绍如何使用MATLAB 解微分方程组。

MATLAB可以利用拟牛顿发展算法,利用函数ode45来解决常微分方程组(Ordinary Differential Equations,简称ODEs)。

生成积分函数,与函数ode45耦合在一起,可以用ode45函数解ODE。

第一步,将微分方程组写成一阶形式,即:dy/dx=f(x,y),其中y为未知变量,x为变量,f(x,y) 为表达式。

第二步,使用MATLAB编程生成函数解微分方程组。

函数ode45是MATLAB中用于解ODE的函数,它使用拟牛顿发展算法,可以得到非线性ODE的数值解。

首先写出解ODE的函数,接受自变量x和因变量y 做参数,并返回相应的函数值;然后,可以调用函数ode45来解这些ODE,函数将接受积分端点、积分步长和积分函数作为参数,并返回结果。

最后,将结果可视化展示出来。

使用数据可视化函数,如plot,可以将结果以曲线的形式展示出来,方便对结果进行后续处理。

总结起来,通过使用MATLAB的ode45函数,配合编写的解ODE 函数,可以快捷高效地解决一般微分方程组问题。

通过可视化函数,还可以将解决出的结果展示出来,为数据分析提供便利。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常微分方程和常微分方程组的求解
一、实验目的: 熟悉 Matlab 软件中关于求解常微分方程和常微分方程组的各种命令,掌握 利用 Matlab 软件进行常微分方程和常微分方程组的求解。 二、相关知识 在 MATLAB 中,由函数 dsolve()解决常微分方程(组)的求解问题,其具体 格式如下: X=dsolve(‘eqn1’,’eqn2’,…) 函数 dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通 解,如果有初始条件,则求出特解。
3 6 度均可达到 10 ~ 10
采用梯形算法 多步法,Gear’s 反向 数值积分,精度中等 一步法, 2 阶 Rosebrock 算法, 低精度。
odefun 为显式常微分方程 y ' f (t , y) 中的 f (t , y) tspan 为求解区间,要获得问题在其他指定点 t0 , t1 , t2 ,
为:
[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-2*t)','x(0)=2','y(0)=0' ) 以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。但是, 我们知道,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法 求出其解析解, 此时, 我们需要寻求方程的数值解, 在求常微分方程数值解方面, MATLAB 具有丰富的函数,我们将其统称为 solver,其一般格式为: [T,Y]=solver(odefun,tspan,y0) 该函数表示在区间 tspan=[t0,tf]上,用初始条件 y0 求解显式常微分方程
y ' fБайду номын сангаас(t , y) 。
solver 为命令 ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb 之 一,这些命令各有特点。我们列表说明如下: 求解 器 ode45 ODE 类型 特点 一步算法, 4,5 阶 Runge-Kutta 非刚性 方法累积截断误差 (x)
dx1 x2 , x1 (0) 1 dt dx2 7(1 x 2 ) x x , x (0) 0 1 2 1 2 dt
接着,编写 vdp.m 如下: function fy=vdp(t,x) fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)]; 再编写 m 文件 sy12_6.m 如下: y0=[1;0] [t,x]=ode45(@vdp,[0,40],y0); y=x(:,1);dy=x(:,2); plot(t,y,t,dy)
[X,Y]=dsolve('Dx+5*x+y=exp(t),Dy- x-3*y=exp(2*t)','t')
dy dx 2x 10 cos t , x t 0 2 dt dt dx dy 2 y 4e2t , y 0 t 0 dt dt 例 4: 求常微分方程组 通解的 MATLAB 程序
d2y dy (1 y 2 ) y 0, y(0) 1, y '(0) 0 2 dt 例 6:求解常微分方程 dt 的解,并画
出解的图形。 分析:这是一个二阶非线性方程,用现成的方法均不能求解,但我们可以通 过下面的变换,将二阶方程化为一阶方程组,即可求解。
dy x2 x y dt , 7 ,则得到: 令: 1 ,
结果为: x= 0,0.0400,0.0900,0.1400,0.1900,0.2400,0.2900,0.3400,0.3900,0.4400,0.4900,0.5000 y= 1.0000,0.9247,0.8434,0.7754,0.7199,0.6764,0.6440,0.6222,0.6105,0.6084,0.6154,0.6 179
dy dx 2 4 x y et , dt dt dx 3x y 0, dt 4.利用 MATLAB 求常微分方程组
x t 0
3 2
y t 0 0
的特解。
2 5. 求解常微分方程 y '' 2(1 y ) y ' y 0 ,0 x 30 , y(0) 1 ,y '(0) 0 的特解,
并做出解函数的曲线图。 6.完成实验报告。
tspan [t0 , t1 , t2 , , t f ] (要求 ti 单调),
上的解,则令
y0 初始条件。
2 例 5:求解常微分方程 y ' 2 y 2 x 2 x ,0 x 0.5 , y(0) 1 的 MATLAB
程序如下:fun=inline('-2*y+2*x*x+2*x');[x,y]=ode23(fun,[0,0.5],1)
dy 1 例 1: 求解常微分方程 dx x y 的 MATLAB 程序为: dsolve('Dy=1/(x+y)','x'),
注意,系统缺省的自变量为 t,因此这里要把自变量写明。 结果为:-lambertw(-C1*exp(-x-1))-x-1 其中:Y=lambertw(X)表示函数关系 Y*exp(Y)=X。
三、实验内容
dy 3y 8 y 1.利用 MATLAB 求常微分方程的初值问题 dx , x 0 2 的解。
2 2. 利用 MATLAB 求常微分方程的初值问题 (1 x ) y '' 2 xy ' ,y x 0 1 ,y ' x 0 3
的解。
(4) 3.利用 MATLAB 求常微分方程 y 2 y ''' y '' 0 的解。
2 例 2:求解常微分方程 yy '' y ' 0 的 MATLAB 程序为:
Y2=dsolve('y*D2y- Dy^2=0’,’x’) 结果为: Y2 =[ exp((x+C2)/C1)] [ C2] 我们看到有两个解,其中一个是常数。
dx 5 x y et dt dy x 3 y e 2t dt 例 3:求常微分方程组 通解的 MATLAB 程序为:
3
说明 大部分场合的首选算 法 使用于精度较低的情 形 计算时间比 ode45 短 适度刚性情形 若 ode45 失效时, 可尝试使用 当精度较低时, 计算时间比 ode15s 短
一步算法, 2,3 阶 Runge-Kutta ode23 非刚性 方法累积截断误差 (x)
3
多步法, Adams 算法, 高低精 ode113 ode23t ode15s ode23s 非刚性 适度刚性 刚性 刚性
相关文档
最新文档