matlab中常微分方程数值计算的方法

数学上求解数值解

利用数学理论推导的方法求得微分方程解称为解析解或者精确解,其特点是得到一个状态变量关于自变量的函数关系表达式。

利用数值计算方法求连续问题的近似解称为数值解数值解的基本特点是利用数值计算方法和计算机编程得到一系列离散点上的近似解。

通常采用 欧拉方法、龙格-库塔方法进行数值计算

首先 把区间离散化: [a,b] 变成离散的点:   \large a=t_0<t_1<t_2<\cdot \cdot \cdot <t_N=b;

同时 记:       \large h_k=t_{k+1}-t_{k},k=0,1,2,\cdot \cdot\codt,N-1     即网格步长

 

欧拉格式:

当                                                    \frac{dy}{dx}=f(x,y), x\in(a,b]

使用泰勒展开式:                     y(x_{k+1})=y(x_k)+y'(x_k)h_k+\frac{y''(x_k)}{2}h_k^2 =y(x_k)+f(x_k,y(x_k)))h_k+O(h_k^2) 

将高阶无穷小舍去,我们就可以得到了 欧拉显示格式,也叫作向前欧拉格式:

                                                             \left\{ \begin{aligned} y_0=\alpha \\ & y_{k+1}=y_k+h_k*f(x_k,y_k) \end{aligned} \right.

其中 \frac{dy}{dx}=f(x,y), x\in(a,b]

                                  向后欧拉格式,也叫作向前欧拉格式

 

                                                 \left\{ \begin{aligned} y_0=\alpha \\ & y_{k+1}=y_k+h_k*f(x_{k+1},y_{k+1}) \end{aligned} \right.

当然,也可以用差分法、积分法、梯形公式等等方法来求数值解,还有龙格-库塔方法,就不仔细阐述了

 

matlab函数

用 dsolve 函数来 求解析解:

                                                            dsolve('方程式',‘条件’,'变量')

比如方程:                                  y'''-y''=x,y(1)=8,y'(1)=7,y''(2)=4

y=dsolve('D3y-D2y=x','y(1)=8','Dy(1)=7','Dy(2)=4','x')

 

 求数值解,用龙格-库塔方法            [t,y]=ode45(odefun,tspan,y0)

odefun 为 以表示微分方程的右端项 f(x,y) 的函数句柄或者 内联函数

tspan 表示自变量的范围

y0 是微分方程的初始值向量

比如:                       y'=-2y+2x^2+2x,0 \leq x \leq 0.5,y(0)=1

f=@(x,y)-2*y+2*x^2+2*x;
[x,y]=ode45(f,[0,0.5],1)

会出现,x沿着步长增加、y也会随之变化一系列数值解

把  y_1=y,y_2=y',y_3=y''

有方程:

                                                \left \{ \begin{aligned} y'_1=y_2\\ y'_2=(1-y_1^2)y_2-y_1,\\ y_1(0)=1,y_2(0)=0 \end{aligned}\right.

[t,Y]=ode45(@vdp,[0 20],[1 0]);
plot(t,Y(:,1),'k-o');


function dy= vdp(t,y)
dy=[y(2);(1-y(1)^2)*y(2)-y(1)];
end

方程如下、使用方法一样,方程类型不一样:

 

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值