在慣性導航以及vio等實際問題中利用imu求解位姿需要對imu測量值進行積分得到需要的位置和姿態,其中主要就是求解微分方程。但之前求解微分方程的解析方法主要是應用於一些簡單和特殊的微分方程求解中,對於一般形式的微分方程,一般很難用解析方法求出精確解,只能用數值方法求解。該系列主要介紹一些常用的常微分方程的數值解法,主要包括:
這個系列後面文章會用到前面文章的理論和技術,所以建議按照順序檢視。
而在具體求解微分方程中,一般來說給定的條件是
\mathbf^(t)=f(t, \mathbf(t)), \quad a \leq t \leq b \\ \mathbf() = x_0 \end
< t_n \leq b
a≤t0
<
⋯<
⋯−1≤
b常微分方程的數值解法的目的就是在給定合適初始值前提下,建立求解x(t
)x(t)
x(t)
的近似值x
tx_t
xt的遞推方式,這樣求得x(t
)x(t)
x(t)
在各個離散點的近似值。
給定乙個具體的時間間隔δ
t\delta_t
δt,可以把該方程轉換成差分方程
x (t
+δt)
=x(t
)+∫τ
∈[t,
t+δt
]f(τ
,x(τ
))dτ
,a≤t
≤b
,(1)
\mathbf(t+\delta t)=\mathbf(t)+\int_ f(\tau, \mathbf(\tau)) d \tau, \quad a \leq t \leq b, \tag
x(t+δt
)=x(
t)+∫
τ∈[t
,t+δ
t]f
(τ,x
(τ))
dτ,a
≤t≤b
,(1)
這樣利用之前說的離散點可以把t
tt離散化,那麼ti=
a+iδ
tt_=a+i \delta t
ti=a+
iδt以及 xi≈
x(ti
)xi
≈x(
ti)
,所以上面公式(2)
(2)(2
)也可以寫成
x (t
i+1)
≈xi+
1=xi
+∫τ∈
[a+i
δt,a
+(i+
1)δt
]f(τ
,x(τ
))dτ
,(2)
x(ti+1
)≈x
i+1
=xi
+∫τ∈
[a+i
δt,a
+(i+
1)δt
]f(
τ,x(
τ))d
τ,(2
) 上節介紹常微分方程的數值解法就是利用初值和離散點獲得近似值x
tx_t
xt,但是和真實值x(t
)x(t)
x(t)
之前還是存在誤差,即
e i=
xi−x
(ti)
,(3)
\boldsymbol_i = x_i - \mathbf(t_i), \tag
ei=xi
−x(
ti)
,(3)
e
i\boldsymbol_i
ei則表示該數值解法在離散點t
it_i
ti處的區域性截斷誤差。區域性截斷誤差在一定程度上反應了該數值解法的精度。
一般來說常用泰勒展開式來計算討論區域性截斷誤差,後面具體方法會給出具體的對應的截斷誤差的討論。這裡簡單給出定義:
如果數值解法的區域性截斷誤差為ei=
o(δt
p+1)
\boldsymbol_i = \boldsymbol(\delta t^)
ei=o(
δtp+
1),則稱該解法具有p階精度或p階解法。
這裡o(δtp+1
)\boldsymbol(\delta t^)
o(δtp+
1)為泰勒展開式的餘項
常微分方程數值解法 python實現
研究生課程 應用數值分析 結課了,使用python簡單記錄了下常微分方程數值解法。y y i h i f x i,y i y 0 y a end right y x y 1 0 leq x leq 1 y 0 1 end right yi format xi,yi xi,yi xi h,y retu...
數值演算法 常微分方程的尤拉方法
數值演算法 常微分方程的尤拉方法 尤拉方法是求解常微分方程的入門級的方法,精度並不算高,但它具有較大的理論價值。一些較好的演算法,如龍格 庫塔方法等都是在這個方法的基礎上實現的。相關的理論請參考相關的數值演算法的書籍,我這裡只給出關鍵的函式及主程式段,其餘相關的細節就不再一一羅列了 void yul...
MATLAB學習筆記 常微分方程的數值解
常微分方程數值求解的命令 求常微分方程的數值解,matlab的命令格式為 t,y solver odefun tspan,y0,options 其中solver選擇ode45等函式名,odefun為根據待解方程或方程組編寫的m檔名,tspan為自變數的區間 t0,tf 即準備在那個區間上求解,y0表...