-
2022-03-21 10:08:38
简 介:本文将研究微分方程的解析解算法,介绍在MATLAB 环境中如何用微分方程求解函数直接得出线性微分方程组的解析解,并对一阶简单的非线性微分方程的解析解求解进行探讨,从而得出结论,一般非线性微分方程是没有解析解的。
关键词
: 微分方程, 解析解, MATLAB§01 总述
假设已知常系数线性微分方程的一般描述方法为
d n y ( t ) d t n + a 1 d n − 1 y ( t ) d t n − 1 + a 2 d n − 2 y ( t ) d t n − 2 + ⋯ + a n − 1 d y ( t ) d t + a n y ( t ) = b 1 d m u ( t ) d t m + b 2 d m − 1 u ( t ) d t m − 1 + ⋯ + b m d u ( t ) d t + b m + 1 u ( t ) \frac{\mathrm{d}^{n} y(t)}{\mathrm{d} t^{n}}+a_{1} \frac{\mathrm{d}^{n-1} y(t)}{\mathrm{d} t^{n-1}}+a_{2} \frac{\mathrm{d}^{n-2} y(t)}{\mathrm{d} t^{n-2}}+\cdots+a_{n-1} \frac{\mathrm{d} y(t)}{\mathrm{d} t}+a_{n} y(t) \\ \ \\ =b_{1} \frac{\mathrm{d}^{m} u(t)}{\mathrm{d} t^{m}}+b_{2} \frac{\mathrm{d}^{m-1} u(t)}{\mathrm{d} t^{m-1}}+\cdots+b_{m} \frac{\mathrm{d} u(t)}{\mathrm{d} t}+b_{m+1} u(t) dtndny(t)+a1dtn−1dn−1y(t)+a2dtn−2dn−2y(t)+⋯+an−1dtdy(t)+any(t) =b1dtmdmu(t)+b2dtm−1dm−1u(t)+⋯+bmdtdu(t)+bm+1u(t)其中, a i a_i ai, b i b_i bi均为常数,对零初值问题有 L [ d m y ( t ) / d t m ] = s m L [ y ( t ) ] \mathscr{L}\left[\mathrm{d}^{m} y(t) / \mathrm{d} t^{m}\right]=s^{m} \mathscr{L}[y(t)] L[dmy(t)/dtm]=smL[y(t)],可以对应得出下面的多项式代数方程
s n + a 1 s n − 1 + a 2 s n − 2 + ⋯ + a n − 1 s + a n = 0 s^{n}+a_{1} s^{n-1}+a_{2} s^{n-2}+\cdots+a_{n-1} s+a_{n}=0 sn+a1sn−1+a2sn−2+⋯+an−1s+an=0
假设代数方程的特征根 s i s_i si均可以求出,且假设它们均相异,则可以得出原微分方程的解析解一般形式为
y ( t ) = C 1 e r 1 t + C 2 e r 2 t + ⋯ + C n e r n t + γ ( t ) y(t)=C_{1} \mathrm{e}^{r_{1} t}+C_{2} \mathrm{e}^{r_{2} t}+\cdots+C_{n} \mathrm{e}^{r_{n} t}+\gamma(t) y(t)=C1er1t+C2er2t+⋯+Cnernt+γ(t)
其中, C i C_i Ci为待定系数,而 γ ( t ) \gamma(t) γ(t)是满足 u ( t ) u(t) u(t)输入的一个特解。 s i s_i si有重根的情况也有相应的解析解形式。
从得出的代数方程看,由著名的Abel-Ruffini定理可知,4次及以下的多项式代数方程是能求出根的解析解的,故可以得出结论,低阶线性微分方程有一般意义下的解析解,结合多项式方程的数值解法可以得出一般高次多项式代数方程的数值解法,即高阶线性微分方程的准解析解方法。本文将介绍用 MATLAB 语言及其符号运算工具箱求解线性常系数微分方程解析解的方法。
§02 函数调用格式
y = dsolve(fun1, fun2, ... , funm) % 默认自变量t y = dsolve(fun1, fun2, ... , funm, 'x') % 指明自变量x
- 可以同时求解多个方程、已知条件
- 注意自变量设置,否则可能得出无用的结果
§03 应用举例
例1:微分方程解析解
题目: 假设输入信号为 u ( t ) = e − 5 t cos ( 2 t + 1 ) + 5 u(t)=\mathrm{e}^{-5 t} \cos (2 t+1)+5 u(t)=e−5tcos(2t+1)+5,试求下面微分方程的通解:
y ( 4 ) ( t ) + 10 y ( 3 ) ( t ) + 35 y ¨ ( t ) + 50 y ˙ ( t ) + 24 y ( t ) = 5 u ¨ ( t ) + 4 u ˙ ( t ) + 2 u ( t ) y^{(4)}(t)+10 y^{(3)}(t)+35 \ddot{y}(t)+50 \dot{y}(t)+24 y(t)=5 \ddot{u}(t)+4 \dot{u}(t)+2 u(t) y(4)(t)+10y(3)(t)+35y¨(t)+50y˙(t)+24y(t)=5u¨(t)+4u˙(t)+2u(t)
求解:
syms y(t); u = exp(-5*t)*cos(2*t+1)+5; uu = 5*diff(u,t,2) + 4*diff(u,t) + 2*u; f(t) = diff(y,t,4) + 10*diff(y,t,3) + 35*diff(y,t,2) + 50*diff(y,t) + 24*y; ySol = dsolve(f(t)==uu); ySol = simplify(ySol)
运行程序可得:
sy = C1*exp(-4*t) - (547*exp(-5*t)*sin(2*t + 1))/520 - (343*exp(-5*t)*cos(2*t + 1))/520 + C2*exp(-3*t) + C3*exp(-2*t) + C4*exp(-t) + 5/12
化简可得 解的数学形式:
y ( t ) = 5 12 − 343 520 e − 5 t cos ( 2 t + 1 ) − 547 520 e − 5 t sin ( 2 t + 1 ) + C 1 e − 4 t + C 2 e − 3 t + C 3 e − 2 t + C 4 e − t y(t)=\frac{5}{12}-\frac{343}{520} \mathrm{e}^{-5 t} \cos (2 t+1)-\frac{547}{520} \mathrm{e}^{-5 t} \sin (2 t+1)+C_{1} \mathrm{e}^{-4 t}+C_{2} \mathrm{e}^{-3 t}+C_{3} \mathrm{e}^{-2 t}+C_{4} \mathrm{e}^{-t} y(t)=125−520343e−5tcos(2t+1)−520547e−5tsin(2t+1)+C1e−4t+C2e−3t+C3e−2t+C4e−t
解析解的检验:
diff(ySol,4) + 10*diff(ySol,3) + 35*diff(ySol,2) + 50*diff(ySol) + 24*ySol - uu; simplify(ans)
运行程序可得:
ans = 0
已知初值条件:
y ( 0 ) = 3 , y ˙ ( 0 ) = 2 , y ¨ ( 0 ) = y ( 3 ) ( 0 ) = 0 y(0)=3, ~~\dot{y}(0)=2, ~~\ddot{y}(0)=y^{(3)}(0)=0 y(0)=3, y˙(0)=2, y¨(0)=y(3)(0)=0syms y(t); u = exp(-5*t)*cos(2*t+1)+5; uu = 5*diff(u,t,2) + 4*diff(u,t) + 2*u; f(t) = diff(y,t,4) + 10*diff(y,t,3) + 35*diff(y,t,2) + 50*diff(y,t) + 24*y; Dy = diff(y,t); D2y = diff(y,t,2); D3y = diff(y,t,3); cond = [y(0)==3, Dy(0)==2, D2y(0)==0, D3y(0)==0]; ySol= dsolve(f(t)==uu, cond); ySol = simplify(ySol) ezplot(ySol,[0,5])
▲ 图1 已知初值条件微分方程解的图像
复杂边界条件:
y ( 0 ) = 1 / 2 , y ˙ ( π ) = 1 , y ¨ ( 2 π ) = 0 , y ˙ ( 2 π ) = 1 / 5 y(0)=1 / 2, ~~\dot{y}(\pi)=1, ~~\ddot{y}(2 \pi)=0, ~~\dot{y}(2 \pi)=1 / 5 y(0)=1/2, y˙(π)=1, y¨(2π)=0, y˙(2π)=1/5
syms y(t); u = exp(-5*t)*cos(2*t+1)+5; uu = 5*diff(u,t,2) + 4*diff(u,t) + 2*u; f(t) = diff(y,t,4) + 10*diff(y,t,3) + 35*diff(y,t,2) + 50*diff(y,t) + 24*y; Dy = diff(y,t); D2y = diff(y,t,2); cond = [y(0)==1/2, Dy(pi)==1, D2y(2*pi)==0, Dy(2*pi)==1/5]; ySol= dsolve(f(t)==uu, cond); ySol = vpa(ySol); ySol = simplify(ySol) ezplot(ySol,[0,5])
▲ 图2 复杂边界条件微分方程解的图像
例2:求解微分方程组
题目: 试求解线性微分方程组的解析解
{ x ′ ′ ( t ) + 2 x ′ ( t ) = x ( t ) + 2 y ( t ) − e − t y ′ ( t ) = 4 x ( t ) + 3 y ( t ) + 4 e − t \left\{\begin{array}{l}x^{\prime \prime}(t)+2 x^{\prime}(t)=x(t)+2 y(t)-\mathrm{e}^{-t}\\ \\ y^{\prime}(t)=4 x(t)+3 y(t)+4 \mathrm{e}^{-t}\end{array}\right. ⎩⎨⎧x′′(t)+2x′(t)=x(t)+2y(t)−e−ty′(t)=4x(t)+3y(t)+4e−t
syms x(t) y(t) eqn1 = diff(x,t,2) + 2*diff(x,t) == x + 2*y(t) - exp(-t); eqn2 = diff(y,t) == 4*x + 3*y(t) + 4*exp(-t); [xSol, ySol] = dsolve([eqn1, eqn2])
例3:变系数微分方程
题目: 变系数微分方程
( 2 x + 3 ) 3 y ′ ′ ′ + 3 ( 2 x + 3 ) y ′ − 6 y = 0 (2 x+3)^{3} y^{\prime \prime \prime}+3(2 x+3) y^{\prime}-6 y=0 (2x+3)3y′′′+3(2x+3)y′−6y=0
syms y(x) eqn = (2*x+3)^3*diff(y,x,3) + 3*(2*x+3)*diff(y,x) - 6*y == 0; ySol = dsolve(eqn)
例4:多维微分方程组
题目:
{ x ′ ′ − x + y + z = 0 x + y ′ ′ − y + z = 0 x + y + z ′ ′ − z = 0 \left\{\begin{array}{l}x^{\prime \prime}-x+y+z=0 \\ \\x+y^{\prime \prime}-y+z=0 \\ \\ x+y+z^{\prime \prime}-z=0\end{array}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x′′−x+y+z=0x+y′′−y+z=0x+y+z′′−z=0
初值: x ( 0 ) = 1 , y ( 0 ) = z ( 0 ) = x ′ ( 0 ) = y ′ ( 0 ) = z ′ ( 0 ) = 0 x(0)=1,~~ y(0)=z(0)=x^{\prime}(0)=y^{\prime}(0)=z^{\prime}(0)=0 x(0)=1, y(0)=z(0)=x′(0)=y′(0)=z′(0)=0
syms x(t) y(t) z(t) eqn1 = diff(x,t,2) - x + y + z == 0; eqn2 = x + diff(y,t,2) - y + z == 0; eqn3 = x + y + diff(z,t,2) - z == 0; Dx = diff(x, t); Dy = diff(y, t); Dz = diff(z, t); cond = [x(0)==1, y(0)==0, z(0)==0, Dx(0)==0, Dy(0)==0, Dz(0)==0]; [xSol, ySol, zSol] = dsolve([eqn1, eqn2, eqn3], cond)
更多相关内容 -
matlab求解微分方程组代码-matlab_calculation_method:此项目是“计算方法”书中提到的经典方法和算法的...
2021-05-23 12:03:39matlab求解微分方程组代码 计算方法(calculation methodb) 该项目是《计算方法》一书中提到的经典方法和算法的matlab程序实现,包含代码详解和运行过程。 :grinning_face_with_big_eyes: 1.简介 2.线性方程组的... -
Matlab 求解微分方程(ODE)
2022-03-28 14:12:31Matlab 求解微分方程(ODE) -
用MATLAB求解微分方程及微分方程组
2015-04-03 20:25:35用MATLAB求解微分方程及微分方程组方法介绍和例子。Matlab -
matlab求解微分方程
2022-05-09 16:54:12Matlab求常微分方程组的解析解_y=520(2sinM-sin2M)的博客-CSDN博客_matlab求解常微分方程的解析解 Matlab求常微分方程组的解析解_y=520(2sinM-sin2M)的博客-CSDN博客_matlab求解常微分方程的解析解 Matlab...1、参考资料:
Solve system of differential equations - MATLAB dsolve- MathWorks 中国
Matlab求常微分方程组的解析解_y=520(2sinM-sin2M)的博客-CSDN博客_matlab求解常微分方程的解析解Matlab求常微分方程组的解析解_y=520(2sinM-sin2M)的博客-CSDN博客_matlab求解常微分方程的解析解
Matlab求常微分方程组的数值解_y=520(2sinM-sin2M)的博客-CSDN博客_matlab求微分方程组的数值解
2、官方文档,YYDS
一阶:
二阶:
加上边界
求解微分方程组:
-
MATLAB算法-求解微分方程数值解和解析解
2020-03-26 08:00:20MATLAB算法-求解微分方程数值解和解析解.ppt -
如何使用MATLAB求解微分方程组_非线性微分方程组求解
2020-07-09 08:31:36TMU_BME_2013 Topic: 如何使用 MATLAB 求 解常微分方程组 a.What ? 微分方程 指描述未知函数的导数与自变 量之间的关系的方程未知函数是一元函 数的微分方程称作 常微分方程 未知函数 是多元函数的微分方程称作 偏... -
matlab求解微分方程的数值解
2022-03-21 13:25:31本文着重讨论基于 MATLAB/Simulink语言的各类微分方程的数值解方法。关键词:微分方程、数值解、MATLAB §01 总述 一般微分方程的数值解法很大一类是关于微分方程初值问题的数值解法,这类问题需要用一阶显式的微分...简 介:前面介绍了微分方程的解析解方法,同时也指出很多非线性微分方程是不存在解析解法的,需要使用数值解法对之进行研究。本文着重讨论基于 MATLAB/Simulink语言的各类微分方程的数值解方法。
关键词
: 微分方程、数值解、MATLAB§01 总述
一般微分方程的数值解法很大一类是关于微分方程初值问题的数值解法,这类问题需要用一阶显式的微分方程组来描述为
x ˙ ( t ) = f ( t , x ( t ) ) \dot{\boldsymbol{x}}(t)=\boldsymbol{f}(t, \boldsymbol{x}(t)) x˙(t)=f(t,x(t))
其中, x T ( t ) = [ x 1 ( t ) , x 2 ( t ) , ⋯ , x n ( t ) ] \boldsymbol{x}^{\mathrm{T}}(t)=\left[x_{1}(t), x_{2}(t), \cdots, x_{n}(t)\right] xT(t)=[x1(t),x2(t),⋯,xn(t)]称为状态向量, f T ( ⋅ ) = [ f 1 ( ⋅ ) , f 2 ( ⋅ ) , ⋯ , f n ( ⋅ ) ] \boldsymbol{f}^{\mathrm{T}}(\cdot)=\left[f_{1}(\cdot), f_{2}(\cdot), \cdots, f_{n}(\cdot)\right] fT(⋅)=[f1(⋅),f2(⋅),⋯,fn(⋅)]可以是任意非线性函数。所谓初值问题是指,若已知初始状态 x 0 = [ x 1 ( 0 ) , ⋯ , x n ( 0 ) ] T \boldsymbol{x}_{0}=\left[x_{1}(0), \cdots, x_{n}(0)\right]^{\mathrm{T}} x0=[x1(0),⋯,xn(0)]T,用数值求解方法求出在某个时间区间 t ∈ [ 0 , t f ] t \in\left[0, t_{\mathrm{f}}\right] t∈[0,tf]内各个时刻状态变量 x ( t ) \boldsymbol{x}(t) x(t) 的数值,这里 t f t_{\mathrm{f}} tf 又称为终止时间。
其他类型微分方程求解必须先转换:
1. 单个高阶常微分方程处理方法
一个高阶常微分方程的一般形式为:
y ( n ) = f ( t , y , y ′ , ⋯ , y ( n − 1 ) ) y^{(n)}=f\left(t, y, y^{\prime}, \cdots, y^{(n-1)}\right) y(n)=f(t,y,y′,⋯,y(n−1))
输出变量的各阶导数初始值为:
y ( 0 ) , y ′ ( 0 ) , ⋯ , y ( n − 1 ) ( 0 ) y(0), ~~y^{\prime}(0), ~~\cdots,~~ y^{(n-1)}(0) y(0), y′(0), ⋯, y(n−1)(0)
选择一组状态变量:
x 1 = y , x 2 = y ′ , ⋯ , x n = y ( n − 1 ) x_{1}=y, ~~x_{2}=y^{\prime}, ~~\cdots,~~ x_{n}=y^{(n-1)} x1=y, x2=y′, ⋯, xn=y(n−1)
原高阶常微分方程模型变换为一阶微分方程组:
{ x 1 ′ = x 2 x 2 ′ = x 3 ⋮ x n ′ = f ( t , x 1 , x 2 , ⋯ , x n ) \left\{\begin{aligned} x_{1}^{\prime} &=x_{2} \\ x_{2}^{\prime} &=x_{3} \\ & \vdots \\ x_{n}^{\prime} &=f\left(t, x_{1}, x_{2}, \cdots, x_{n}\right) \end{aligned}\right. ⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧x1′x2′xn′=x2=x3⋮=f(t,x1,x2,⋯,xn)
初值为:
x 1 ( 0 ) = y ( 0 ) , x 2 ( 0 ) = y ′ ( 0 ) , ⋯ , x n ( 0 ) = y ( n − 1 ) ( 0 ) x_{1}(0)=y(0), ~~x_{2}(0)=y^{\prime}(0), ~~\cdots, ~~x_{n}(0)=y^{(n-1)}(0) x1(0)=y(0), x2(0)=y′(0), ⋯, xn(0)=y(n−1)(0)
2. 高阶常微分方程组的变换方法
多元高阶常微分方程组的处理
{ x ( m ) = f ( t , x , x ′ , ⋯ , x ( m − 1 ) , y , ⋯ , y ( n − 1 ) ) y ( n ) = g ( t , x , x ′ , ⋯ , x ( m − 1 ) , y , ⋯ , y ( n − 1 ) ) \left\{\begin{array}{l}x^{(m)}=f\left(t, x, x^{\prime}, \cdots, x^{(m-1)}, y, \cdots, y^{(n-1)}\right) \\ \\ y^{(n)}=g\left(t, x, x^{\prime}, \cdots, x^{(m-1)}, y, \cdots, y^{(n-1)}\right)\end{array}\right. ⎩⎨⎧x(m)=f(t,x,x′,⋯,x(m−1),y,⋯,y(n−1))y(n)=g(t,x,x′,⋯,x(m−1),y,⋯,y(n−1))
状态变量的选择不唯一,建议:选择如下状态变量
x 1 = x , x 2 = x ′ , ⋯ , x m = x ( m − 1 ) , x m + 1 = y , x m + 2 = y ′ , ⋯ , x m + n = y ( n − 1 ) x_{1}=x, ~x_{2}=x^{\prime}, ~\cdots, ~x_{m}=x^{(m-1)}, \\ \ \\ x_{m+1}=y, ~x_{m+2}=y^{\prime},~ \cdots, ~x_{m+n}=y^{(n-1)} x1=x, x2=x′, ⋯, xm=x(m−1), xm+1=y, xm+2=y′, ⋯, xm+n=y(n−1)
新的状态方程
{ x 1 ′ = x 2 ⋮ x m ′ = f ( t , x 1 , x 2 , ⋯ , x m + n ) x m + 1 ′ = x m + 2 ⋮ x m + n ′ = g ( t , x 1 , x 2 , ⋯ , x m + n ) \left\{\begin{aligned} x_{1}^{\prime}=& x_{2} \\ & \vdots \\ x_{m}^{\prime}=& f\left(t, x_{1}, x_{2}, \cdots, x_{m+n}\right) \\ x_{m+1}^{\prime} &=x_{m+2} \\ & \vdots \\ x_{m+n}^{\prime} &=g\left(t, x_{1}, x_{2}, \cdots, x_{m+n}\right) \end{aligned}\right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧x1′=xm′=xm+1′xm+n′x2⋮f(t,x1,x2,⋯,xm+n)=xm+2⋮=g(t,x1,x2,⋯,xm+n)
可以描述该方程,然后用
ode45
等求解。§02 微分方程求解的误差与步长问题
1. 不能无限制地减小步长 h h h的值的两条原因
- 减慢计算速度
- 增加累积误差
2. 在对微分方程求解过程中应采取的三个措施
- 选择适当的步长
- 改进近似算法精度
- 采用变步长方法
§03 函数调用格式(ode45)
[t, x] = ode45(fun,[t0, tf], x0) % 直接求解 [t, x] = ode45(fun,[t0, tf], x0, options) % 带有控制选项 [t, x] = ode45(fun,[t0, tf], x0, options, p1, p2, ...) % 带有附加参数
当然,还存在其他求解函数,如
ode15s
、ode23
等,不同的算法(函数)适合于不同类型的微分方程。§04 微分方程的MATLAB描述
描述需要求解的微分方程组
f u n c t i o n x d = f u n ( t , x ) \rm{function}~~~ \boldsymbol{x}_{d}= fun (t, \boldsymbol{x}) function xd=fun(t,x)
f u n c t i o n x d = f u n ( t , x , p 1 , p 2 , ⋯ ) \rm{function} ~~~ \boldsymbol{x}_{d}= fun \left(t, \mathrm{x}, p_{1}, p_{2}, \cdots\right) function xd=fun(t,x,p1,p2,⋯)
修改控制变量
options = odeset('RelTol', 1e-7) ; options = odeset; options.RelTol = 1e-7;
§05 应用举例:Lorenz方程
例1:无参数
题目: 求解下列Lorenz模型
{ x ˙ 1 ( t ) = − β x 1 ( t ) + x 2 ( t ) x 3 ( t ) x ˙ 2 ( t ) = − ρ x 2 ( t ) + ρ x 3 ( t ) x ˙ 3 ( t ) = − x 1 ( t ) x 2 ( t ) + σ x 2 ( t ) − x 3 ( t ) \left\{\begin{array}{l}\dot{x}_{1}(t)=-\beta x_{1}(t)+x_{2}(t) x_{3}(t) \\ \\ \dot{x}_{2}(t)=-\rho x_{2}(t)+\rho x_{3}(t) \\ \\ \dot{x}_{3}(t)=-x_{1}(t) x_{2}(t)+\sigma x_{2}(t)-x_{3}(t)\end{array}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x˙1(t)=−βx1(t)+x2(t)x3(t)x˙2(t)=−ρx2(t)+ρx3(t)x˙3(t)=−x1(t)x2(t)+σx2(t)−x3(t)
式中参数为 β = 8 / 3 , ρ = 10 , σ = 28 \beta=8 / 3, ~\rho=10, ~\sigma=28 β=8/3, ρ=10, σ=28
初始条件为 x 1 ( 0 ) = x 2 ( 0 ) = 0 , x 3 ( 0 ) = ϵ , i . e . , ϵ = 1 0 − 10 x_{1}(0)=x_{2}(0)=0, ~~x_{3}(0)=\epsilon,~~ \rm{i.e.}, ~\epsilon=10^{-10} x1(0)=x2(0)=0, x3(0)=ϵ, i.e., ϵ=10−10
求解:
1. 写出标准型
x ′ ( t ) = [ − β x 1 ( t ) + x 2 ( t ) x 3 ( t ) − ρ x 2 ( t ) + ρ x 3 ( t ) − x 1 ( t ) x 2 ( t ) + σ x 2 ( t ) − x 3 ( t ) ] , x ( 0 ) = [ 0 0 ϵ ] \boldsymbol{x}^{\prime}(t)=\left[\begin{array}{c}-\beta x_{1}(t)+x_{2}(t) x_{3}(t) \\ \\ -\rho x_{2}(t)+\rho x_{3}(t) \\ \\ -x_{1}(t) x_{2}(t)+\sigma x_{2}(t)-x_{3}(t)\end{array}\right], \quad \boldsymbol{x}(0)=\left[\begin{array}{l}0 \\ \\ 0 \\ \\ \epsilon\end{array}\right] x′(t)=⎣⎢⎢⎢⎢⎡−βx1(t)+x2(t)x3(t)−ρx2(t)+ρx3(t)−x1(t)x2(t)+σx2(t)−x3(t)⎦⎥⎥⎥⎥⎤,x(0)=⎣⎢⎢⎢⎢⎡00ϵ⎦⎥⎥⎥⎥⎤
2. 微分方程的MATLAB描述
- M-文件描述
function y = lorenzeq(t, x) y = [-8/3*x(1)+x(2)*x(3); -10*x(2)+10*x(3); -x(1)*x(2)+28*x(2)-x(3)];
- 匿名函数
f = @(t,x)[-8/3*x(1)+x(2)*x(3); -10*x(2)+10*x(3); -x(1)*x(2)+28*x(2)-x(3)];
3. 微分方程求解
- 匿名函数
t_final = 100; x0 = [0; 0; 1e-10]; f = @(t,x)[-8/3*x(1)+x(2)*x(3); -10*x(2)+10*x(3); -x(1)*x(2)+28*x(2)-x(3)]; [t,x] = ode45(f, [0,t_final], x0); plot(t,x), figure; plot3(x(:,1),x(:,2),x(:,3));
- M-文件描述
t_final = 100; x0 = [0; 0; 1e-10]; f = @(t,x)[-8/3*x(1)+x(2)*x(3); -10*x(2)+10*x(3); -x(1)*x(2)+28*x(2)-x(3)]; [t,x] = ode45(@lorenzeq, [0,t_final], x0); plot(t,x), figure; plot3(x(:,1),x(:,2),x(:,3)); function y = lorenzeq(t, x) y = [-8/3*x(1)+x(2)*x(3); -10*x(2)+10*x(3); -x(1)*x(2)+28*x(2)-x(3)]; end
▲ 图 1
▲ 图 2
例2:带有附加参数
引入附加参数的目的: 如果参数 β \beta β, ρ \rho ρ, σ \sigma σ 改变,不需要修改原函数。
重新求解Lorenz方程
方式一
f = @(t,x,beta,rho,sigma)[-beta*x(1) + x(2)*x(3); -rho*x(2) + rho*x(3); -x(1)*x(2) + sigma*x(2) - x(3)]; t_final=100; x0 = [0; 0; 1e-10]; b1 = 8/3; r1 = 10; s1 = 28; [t,x]=ode45(f, [0,t_final], x0, [], b1, r1, s1);
方式二
beta = 2; rho = 5; sigma = 20; f = @(t,x)[-beta*x(1) + x(2)*x(3); -rho*x(2) + rho*x(3); -x(1)*x(2) + sigma*x(2) - x(3)]; t_final = 100; x0 = [0; 0; 1e-10]; [t2,x2] = ode45(f, [0,t_final], x0);
-
用matlab求解微分方程
2022-04-07 22:30:25实例 微分方程: 初始条件: %构建 syms y(t) s= dsolve('-Dy=y +1','y(0) =1'); %作图 t = 0:0.1:5 y = eval(subs(s)) plot(t,y) 在命令窗口行键入结果 's',显示解析式:1、dsolve 函数
dsolve函数用于求常微分方程组的精确解,也称为常微分方程的符号解。如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。
1)函数格式
Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)
其中,‘eq1,eq2,…’:表示微分方程或微分方程组;
’cond1,cond2,…’:表示初始条件或边界条件;
‘Name’:表示变量。没有指定变量时,matlab默认的变量为t;
利用dsolve函数进行求解。
实例
下面呢,我要求解一个微分方程,现在求解一个物体的速度随时间变化的解析解。给一个初始速度为1的物体减速,减速的力与速度有关,还有一个恒力帮助减速。
微分方程:
初始条件:
%构建 syms y(t) s= dsolve('-Dy=y +1','y(0) =1'); %作图 t = 0:0.1:5 y = eval(subs(s)) plot(t,y)
在命令窗口行键入结果 's',显示解析式:
别林斯基曾经提到过,好的书籍是最贵重的珍宝。这句话看似简单,但其中的阴郁不禁让人深思. 要想清楚,微分方程,到底是一种怎么样的存在。 对我个人而言,微分方程不仅仅是一个重大的事件,还可能会改变我的人生。 现在,解决微分方程的问题,是非常非常重要的。 所以, 所谓微分方程,关键是微分方程需要如何写。 经过上述讨论, 微分方程的发生,到底需要如何做到,不微分方程的发生,又会如何产生。 微分方程,发生了会如何,不发生又会如何。 微分方程的发生,到底需要如何做到,不微分方程的发生,又会如何产生。 微分方程,发生了会如何,不发生又会如何。 而这些并不是完全重要,更加重要的问题是, 了解清楚微分方程到底是一种怎么样的存在,是解决一切问题的关键。 马尔顿曾经说过,坚强的信心,能使平凡的人做出惊人的事业。这启发了我. 我们不得不面对一个非常尴尬的事实,那就是, 问题的关键究竟为何? 了解清楚微分方程到底是一种怎么样的存在,是解决一切问题的关键。 而这些并不是完全重要,更加重要的问题是, 问题的关键究竟为何? 我认为, 卡耐基说过一句著名的话,我们若已接受最坏的,就再没有什么损失。带着这句话, 我们还要更加慎重的审视这个问题: 既然如此, 既然如此。
那么, 莎士比亚曾经提到过,本来无望的事,大胆尝试,往往能成功。这启发了我. 克劳斯·莫瑟爵士在不经意间这样说过,教育需要花费钱,而无知也是一样。这句话把我们带到了一个新的维度去思考这个问题: 我们不得不面对一个非常尴尬的事实,那就是, 从这个角度来看, 本人也是经过了深思熟虑,在每个日日夜夜思考这个问题。 经过上述讨论, 那么, 非洲曾经说过,最灵繁的人也看不见自己的背脊。这启发了我. 吉格·金克拉说过一句著名的话,如果你能做梦,你就能实现它。这句话语虽然很短, 但令我浮想联翩. 微分方程的发生,到底需要如何做到,不微分方程的发生,又会如何产生。
孔子在不经意间这样说过,知之者不如好之者,好之者不如乐之者。这句话看似简单,但其中的阴郁不禁让人深思. 所谓微分方程,关键是微分方程需要如何写。 现在,解决微分方程的问题,是非常非常重要的。 所以, 经过上述讨论, 所谓微分方程,关键是微分方程需要如何写。 从这个角度来看, 在这种困难的抉择下,本人思来想去,寝食难安。
-
MATLAB求解微分方程
2020-04-21 02:52:30一、微分方程的符号解 dsolve(‘方程1’,‘方程2’,…,‘方程n’,‘初始条件’,‘自变量’) ...例1:求解微分方程: 解: y=dsolve('D2y-2*Dy+y-x^2=0','x') 例2: 解: y=dsolve('D2y+4*Dy+29*y','y(... -
Matlab求解微分方程(组)及偏微分方程(组)
2014-04-21 21:31:13Matlab求解微分方程(组)及偏微分方程(组) -
三课时精通matlab求解微分方程组和相平面图
2021-06-18 23:19:55精通matlab求解微分方程组和相平面图 -
微分方程MATLAB求解
2018-09-07 14:24:12微分方程 -
matlab求解微分方程组代码-Gauss-Elimination:qlz的线性代数的Java项目
2021-05-23 12:05:17matlab求解微分方程组代码 Gauss-Elimination A java project for qlz's Linear Algebra Collaborators: @NJUBrocoli @RosalieMiao 一个极其虐待用户的项目 一份极其丢人的文档 妈妈再也不用担心我的线代作业算不对... -
Matlab求解微分方程(2)——偏微分方程的求解
2021-04-18 12:38:58对于偏微分方程的求解,Matlab提供了两种工具。第一种是pdepe()函数,它的特点是通用性好,不受求解阶次的限制,不足之处是只支持命令行的格式;第二种是PDE工具箱,它的特点是提供了一个GUI界面,简洁易懂可视,... -
怎么用MATLAB求解微分方程组并画出解函数图?
2021-04-18 08:51:19//函数定义,用于计算微分方程组中各方程右端函数值,连分式法对微分方程组积分一步函数pbs1将调用该函数f。 //t为自变量,x,y为函数值,dx,dy为右端函数值(即微分方程的值)。 f(t,x,y,dx,dy)= { dx=-(x^3)-y, dy... -
用matlab解微分方程组并作图
2021-04-20 05:06:51共回答了19个问题采纳率:89.5%function dx=appollo(t,x)mu=1/82.45;mustar=1-mu;r1=sqrt((x(1)+mu)^2+x(3)^2);r2=sqrt((x(1)-mustar)^2+x(3)^2);dx=[x(2)2*x(4)+x(1)-mustar*(x(1)+mu)/r1^3-mu*(x(1)-mustar)/r2^3x... -
matlab解微分方程组代码下载-simplePde1d:适用于Octave和MATLAB的基本1DPDE解算器
2021-05-28 13:45:39matlab解微分方程组代码下载pde1d 用于Octave和MATLAB的一维偏微分方程求解器 pde1d在单个空间变量和时间中求解偏微分方程组。 输入大部分与MATLAB函数pdepe兼容。 许多pdepe示例仅需很小的改动就可以与pde1d一起... -
用MATLAB求解微分方程
2020-02-09 15:48:28微分方程的解析解 求微分方程(组)的解析解命令: dsolve('方程1','方程2',...'方程n','初始条件','自变量') 注:字母D表示求微分,D2、D3等表示求高阶微分,D后所跟的字母为因变量,自变量可以指定或由系统规则... -
用MATLAB求解微分方程及微分方程组_图文.ppt
2021-10-29 13:55:46用MATLAB求解微分方程及微分方程组_图文 -
用matlab解微分方程
2021-05-24 20:08:37研究了使用matlab如何解微分方程。 -
用MATLAB求解微分方程.ppt
2021-04-21 05:39:14微分方程的解析解,求微分方程(组)的解析解命令:,dsolve(方程1, 方程2,方程n, 初始条件, 自变量),结 果:u = tan(t-c),用MATLAB求解微分方程,解 输入命令:dsolve(Du=1+u2,t),解 输入命令: y... -
数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解精选.pdf
2021-04-19 00:51:23数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解精选注:上机作业文件夹以自己的班级姓名学号命名,文件夹包括如下上机报告和 Matlab 程序。上机报告模板如下:佛山科学技术学院上 机 报 告课程名称 ... -
如何用matlab求解非线性微分方程组(基于龙格库塔的数值微分算法)?.docx
2021-10-31 00:14:10如何用matlab求解非线性微分方程组(基于龙格库塔的数值微分算法)?.docx -
Matlab求解微分方程
2015-01-10 16:37:28Matlab求解各种微分方程代码,包括时延微分方程等。 -
Matlab求解微分方程并画图
2021-01-14 06:00:23展开全部^看标题以为你要求微分方程呐,结果是32313133353236313431303231363533e58685e5aeb931333363396464画dR/dr vs. r%画出图中的公式%定义微分方程函数dRdr=@(r)0.89./r.*exp(-(log(r)+0.84).^2/0.086);%在(0,... -
用Matlab解微分方程培训教材_微分方程的特解怎么求
2020-04-22 09:08:55用 Matlab 解微分方程;一微分方程的解析解;输入命令: y=dsolve'D2y+4*Dy+29*y=0'y(0)=0,Dy(0)=15'x;二微分方程的数值解;二建立数值解法的一些途径;2使用数值积分;3使用泰勒公式; 1在解n个未知函数的方程组时x0和x均...