数学上求解数值解
利用数学理论推导的方法求得微分方程解称为解析解或者精确解,其特点是得到一个状态变量关于自变量的函数关系表达式。
利用数值计算方法求连续问题的近似解称为数值解。数值解的基本特点是利用数值计算方法和计算机编程得到一系列离散点上的近似解。
通常采用 欧拉方法、龙格-库塔方法进行数值计算
首先 把区间离散化: [a,b] 变成离散的点:
同时 记:
即网格步长
欧拉格式:
当
使用泰勒展开式:
将高阶无穷小舍去,我们就可以得到了 欧拉显示格式,也叫作向前欧拉格式:
其中
向后欧拉格式,也叫作向前欧拉格式
当然,也可以用差分法、积分法、梯形公式等等方法来求数值解,还有龙格-库塔方法,就不仔细阐述了
matlab函数
用 dsolve 函数来 求解析解:
dsolve('方程式',‘条件’,'变量')
比如方程:
y=dsolve('D3y-D2y=x','y(1)=8','Dy(1)=7','Dy(2)=4','x')
求数值解,用龙格-库塔方法 [t,y]=ode45(odefun,tspan,y0)
odefun 为 以表示微分方程的右端项
的函数句柄或者 内联函数
tspan 表示自变量的范围
y0 是微分方程的初始值向量
比如:
[email protected](x,y)-2*y+2*x^2+2*x;
[x,y]=ode45(f,[0,0.5],1)
会出现,x沿着步长增加、y也会随之变化一系列数值解
把
有方程:
[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
方程如下、使用方法一样,方程类型不一样: