數學上求解數值解
利用數學理論推導的方法求得微分方程解稱為解析解或者精确解,其特點是得到一個狀态變量關于自變量的函數關系表達式。
利用數值計算方法求連續問題的近似解稱為數值解。數值解的基本特點是利用數值計算方法和計算機程式設計得到一系列離散點上的近似解。
通常采用 歐拉方法、龍格-庫塔方法進行數值計算
首先 把區間離散化: [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
方程如下、使用方法一樣,方程類型不一樣: