微分方程的数值解法——常微分方程——差分法
差分法思想: 差分就是讲解析解中的差分方程中的微分项用差分来代替,当取得变量步长足够小时可以无限逼近。
两大步骤: 1.建立差分格式 1.对解得存在区域划分 2.采用不同的算法可以得到不同的精度,即截断误差 3.数值解对解析解的精度 4.数值解收敛于真解的速度 5.处分算法的稳定性 2.差分格式求解 将微分方程转化为代数方程求解,一般常用地推算法 差分方法的原理: 由下士泰勒展开可以看到: 当步长h足够小时,后面的高阶项都可以省略,因此有: 上式中主要是是如何表达微分项,根据差分过程,微分项的表达如下: 具体实例: MATLAB中实现:
%微分方程数值解法----欧拉法测试
%-------------------------------------
clc;
clear all;
close all;
%-------------------------------------
%du/dt + u^2 = 0
%u(0)=1
%-------------------------------------
N = 100;
t_s = 0;
t_e = 1;
dt = (t_e-t_s)/N;
t = t_s:dt:t_e-dt;
%-------------------------------------
%解析解
u_j=1./(1+t);
u_s(1) = 1;
for i=2:N
u_s(i)=-u_s(i-1)^2*dt+u_s(i-1);
end
subplot(2,1,1);
plot(t,u_j,'-o',t,u_s,'-*');
xlabel('t');
ylabel('y');
legend('解析解','数值解');
subplot(2,1,2);
plot(t,u_j-u_s,'-r');
xlabel('t');
ylabel('err');
legend('误差');
运行结果: 可以看出解析解和数值解之间很接近,误差不大; 当增加步长时如下图所示: 可见步长对精度的重要性;
|