【MATLAB】常用命令快速入门,国赛加油 (8)

方程2:\( \mathrm{y}''=\mathrm{\mu y}'+\text{y,初值y}\left( 0 \right) =1,\mathrm{y}'\left( 0 \right) =0 \)

syms y(x) mu; eqn = diff(y,2) == mu*diff(y)+y; cond1 = y(0) == 1; Dy = diff(y); cond2 = Dy(0) == 0; dsolve(eqn,cond1, cond2)

ans =
ex μ2-μ2+42 μ+μ2+42 μ2+4-ex μ2+μ2+42 μ-μ2+42 μ2+4

方程组1:

y1=y2y2=-y1,初值y10=1y20=1 syms y1(x) y2(x) eqn1 = diff(y1) == y2; eqn2 = diff(y2) == -y1; cond1 = y1(0) == 1; cond2 = y2(0) == 1; res = dsolve(eqn1,eqn2,cond1,cond2); res.y1

2 cos(x-π4)
2 cos(x+π4)

方程组2:\( \begin{cases} \mathrm{y}_1=\mathrm{a}-\left( \mathrm{b}+1 \right) \mathrm{y}_1+{\mathrm{y}_1}^2\mathrm{y}_2\\ \mathrm{y}_2'=\mathrm{by}_1-{\mathrm{y}_1}^2\mathrm{y}_2\\ \end{cases}\text{,初值}\begin{cases} \mathrm{y}_1\left( 0 \right) =3\\ \mathrm{y}_2\left( 0 \right) =4\\ \end{cases} \)

syms y1(x) y2(x) a b eqn1 = diff(y1) == a-(b+1)*y1+y1^2*y2; eqn2 = diff(y2) == b*y1 - y1^2*y2; dsolve(eqn1,eqn2) % 警告: Unable to find symbolic solution.

比较复杂的方程无法求出解析解,此时需要寻求数值解

常微分方程与常微分方程组的数值解 ode45(函数句柄,积分区间,初值)

基本思想:
例如y' =2x,可以转化为(y[n]一y[n-1])/△x=2x→ y[n]= y[n-1]+2x△x,然后通过迭代的方式来求解y。
也因此,数值解法必须提供初值。

常微分方程(组)求解solver = ode45, ode23, ode113, ode15s, ode23s

ode45: 4-5阶Runge-Kutta法

ode23: 2-3阶Runge-Kutta法

ode113: Adams-Bashforth-Moutlon PECE算法

ode15s: 后向差分

ode23s: 修正的二阶Rosenbrock公式

方程1: \( y'=2x,初值y(0)=10,积分区间[0,10] \)

% 匿名函数必须同时接受两个输入(x,y),计数其中一个输入未使用也是如此 f = @(x,y)2*x; tspan = [0,10]; % 积分区间 y0 = 10; [x,y] = ode45(f,tspan,y0); plot(x,y)

image

方程2:\( y''=u(1-y^2)y'+y,初值y(0)=1,y'(0)=0,积分区间[0,20] \)
\( 首先转化为MATLAB标准求解格式:令y_1=y,y_2=y'\text{,则转化为} \\ \begin{cases} \mathrm{y}_1'=\mathrm{y}_2\\ \mathrm{y}_2'=\mathrm{\mu}\left( 1-{\mathrm{y}_1}^2 \right) \mathrm{y}_2+\mathrm{y}_1\\ \end{cases} \)

mu = 1; f = @(x,y)fun(y,mu); tspan = [0 20]; y0 = [1 0]; [x,y] = ode45(f,tspan,y0); plot(x,y(:,1),"r",x,y(:,2),"g") function ydot = fun(y,mu) ydot = [y(2);mu*(1-y(1)^2*y(2)+y(1))]; end

image

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwydsz.html