Simulink Solver
Simulink求解器
Simulink仿真過程
Simulink 模型的執(zhí)行分幾個階段進(jìn)行。首先進(jìn)行的是初始化階段,在此階段,Simulink 將庫塊合并到模型中來,確定傳送寬度、數(shù)據(jù)類型和采樣時間,計算塊參數(shù),確定塊的執(zhí)行順序,以及分配內(nèi)存。然后,Simulink 進(jìn)入到“仿真循環(huán)”,每次循環(huán)可認(rèn)為是一個“仿真步”。在每個仿真步期間,Simulink 按照初始化階段確定的塊執(zhí)行順序依次執(zhí)行模型中的每個塊。對于每個塊而言,Simulink 調(diào)用函數(shù)來計算塊在當(dāng)前采樣時間下的狀態(tài),導(dǎo)數(shù)和輸出。如此反復(fù),一直持續(xù)到仿真結(jié)束。下圖所示為一個仿真的步驟:
Simulink求解器分類
Simulink求解器可分為兩大類:變步長求解器和定步長求解器。也可細(xì)分為:連續(xù)求解與離散求解、隱式求解與顯式求解、單步求解與多步求解以及單階式與變階式求解。
(1)定步長與變步長求解器
定步長求解器的仿真步長為定制,沒有誤差控制機(jī)制;變步長求解器在仿真過程中需要計算仿真步長,通過增加/減小步長來滿足所設(shè)定的誤差寬容限。在生成實時運(yùn)算代碼時,必須使用定步長求解器,若不打算配置模型代碼生成,求解器的選擇根據(jù)建立模型而定。通常,變步長求解器可以減少仿真時間,定步長求解步長越小,仿真精度越高,故在同樣仿真精度要求下,在采用定步長求解器進(jìn)行仿真時,整個仿真過程必須采用變步長求解器中的最小步長。
(2)連續(xù)與離散求解器
在定步長與變步長求解器中均有連續(xù)與離散求解器。連續(xù)與離散求解器都是依靠模塊來計算所有離散狀態(tài)值。定義離散狀態(tài)的模塊負(fù)責(zé)在每個步長的時間點計算離散狀態(tài)值,連續(xù)求解器是通過數(shù)值積分來計算定義連續(xù)狀態(tài)的模塊的狀態(tài)值。在選擇求解器時,必須先確定模型中是否需要離散求解器。在模型中若沒有連續(xù)狀態(tài)模塊,求解器采用連續(xù)、離散均可,若有連續(xù)狀態(tài)模型必須采用連續(xù)求解器。
(3)顯式與隱式求解器
隱式求解器的應(yīng)用主要解決模型中的剛性問題,顯式求解器應(yīng)用解決非剛性問題。譬如,在控制系統(tǒng)中,控制部件反應(yīng)靈敏是快變的,具有小的時間常數(shù),而受控對象一般慣性大事慢變的,具有大的時間常數(shù)。通常將具有非常不同時間尺度的系統(tǒng)稱之為剛性系統(tǒng),通俗講,就是系統(tǒng)中含有時間快變和慢變解分量(同時含有小時間常數(shù)和大時間常數(shù)的系統(tǒng))。剛性系統(tǒng)有非常大的恢復(fù)能力使得快變化分量的擾動很快就衰減,當(dāng)數(shù)值積分這樣一個系統(tǒng)時,一旦快變分量消失時期望選取合適的時間步長用于計算慢變分量。故剛性系統(tǒng)的實質(zhì)是要計算的解是慢變化,但存在迅速衰減的擾動,這樣的擾動出現(xiàn)使得慢變解的數(shù)值計算復(fù)雜化。故,對系統(tǒng)中的震蕩現(xiàn)象,隱式求解遠(yuǎn)比顯式求解穩(wěn)定,但計算的消耗比顯式求解大,它需要在仿真的每個步長利用Newton-like方法計算所產(chǎn)生的雅克比矩陣和代數(shù)方程組。為了減少計算消耗,Simulink提供了計算雅克比方法的參數(shù),提高仿真性能。
(4)單步與多步求解器
在Simulink求解庫中提供了單步與多步求解器。單步求解就是在計算系統(tǒng)當(dāng)前時刻y(tn),需要利用前一時刻y(tn-1)以及在tn-1與tn之間多個時間點的微分量(這些時間點稱為微步長);多步求解器就是利用系統(tǒng)前多個時刻的值計算當(dāng)前時刻的值。Simulink提供了一個顯式多步求解器ode113和一個隱式多步求解器ode15s,這兩個都是變步長求解器。
(5)變階式求解器
Simulink提供兩種變階式求解器,ode15s求解器利用1階到5階仿真;ode113應(yīng)用1階到13階。對于ode15s可以設(shè)置最高階次。
定步長求解器的選擇
(1)定步長離散求解器
定步長離散求解器通過在當(dāng)前時間點的基礎(chǔ)上加上仿真步長來計算下一時間點。故,仿真的精度和時間長度取決于仿真步長的大小。步長越小精度越高。仿真步長可以任意設(shè)置,當(dāng)步長設(shè)置為缺省時,若模型中含有離散采樣模塊,Simulink將最小采樣步長作為求解器的基步長(通常指最小仿真步長),若沒有則默認(rèn)整個仿真只有50步,仿真步長為仿真時間歷程的1/50。
(2)定步長連續(xù)求解器
定步長連續(xù)求解器通過在當(dāng)前時間點的基礎(chǔ)上加上仿真步長來計算下一時間點,但通過數(shù)值積分計算連續(xù)狀態(tài)。利用上一時間點的值和積分微步計算當(dāng)前時間點的值。定步長連續(xù)求解器可以用于計算沒有連續(xù)狀態(tài)的模型,但增加計算負(fù)擔(dān)。通常,模型中沒有連續(xù)狀態(tài)模塊采用離散求解器仿真。
Simulink提供了兩種定步長連續(xù)求解器:隱式求解和顯式求解。主要區(qū)別在于計算速度和穩(wěn)定性方面,隱式比顯式的每步計算量大,但穩(wěn)定性好。
(a)顯式定步長連續(xù)求解器
Simulink根據(jù)數(shù)值積分方法的不同分為多種不同顯式定步長連續(xù)求解器,其系統(tǒng)顯函數(shù)的數(shù)學(xué)表達(dá)為:
式中,x為狀態(tài),h為時間步長,Dx為狀態(tài)微分,顯式求解器利用當(dāng)前時間點的狀態(tài)值和狀態(tài)微分計算下一時間點的狀態(tài)值。Simulink提供的求解器具體如下表:
這些求解器都沒有誤差控制機(jī)制,仿真精度和持續(xù)時間直接由仿真步長控制。表中的求解器根據(jù)數(shù)值積分方法的復(fù)雜度(精度等級)將求解器由簡單到復(fù)雜排序。在相同的仿真步長設(shè)置下,求解器計算越復(fù)雜,計算結(jié)果精度越高。
在設(shè)置求解器時,若選擇定步長求解,Simulink默認(rèn)為ode3,其支持離散和連續(xù)狀態(tài)求解,且仿真性能適中(計算精度和計算消耗),其仿真步長的設(shè)置和離散求解器一樣,在缺省步長設(shè)置時,若模型中有離散狀態(tài)模塊,則將模型中最小采樣時間作為求解器的基步長,若沒有則默認(rèn)整個仿真只有50步,仿真步長為仿真時間歷程的1/50。
(b)隱式定步長連續(xù)求解器
Simulink提供了一種隱式定步長求解器,ode14x。其系統(tǒng)隱函數(shù)的數(shù)學(xué)表達(dá)為:
式中,x為狀態(tài),h為時間步長,Dx為狀態(tài)微分,此求解器綜合利用牛頓迭代法和外推法,根據(jù)當(dāng)前狀態(tài)值計算下一時間點的狀態(tài)。用戶可以設(shè)置牛頓法迭代次數(shù)和外推階次。迭代次數(shù)越大、外推階次越高,仿真精度越高,同時每一仿真步長的計算負(fù)擔(dān)也越大。
(3)定步長連續(xù)求解選擇過程
Simulink中的每個定步長連續(xù)求解器,只要設(shè)置足夠小的仿真步長,都能達(dá)到期望的計算精度,但通常不實際,故需要選擇最佳的求解器,其選擇過程如下圖所示。
變步長求解器的選擇
變步長求解器與定步長求解器一樣,包含多個連續(xù)求解器和一個離散求解器,兩種求解器的選擇關(guān)鍵在于模型中是否有狀態(tài)模塊或是否有離散狀態(tài)模塊。
(1)變步長連續(xù)求解器
Simulink中的變步長求解器通過增大/減小仿真步長,通過控制局部誤差實現(xiàn)仿真精度控制。仿真過程中,在每一時間點都要計算步長,增加了計算開銷,但在仿真精度要求下可以減少仿真的步數(shù)和仿真時間。
(a)顯式變步長連續(xù)求解器
顯式變步長求解器主要計算無剛度系統(tǒng),有一下三種。
ode45基于顯式Runge—Kutta(4,5)公式,Dormand—Prince對.它是—個單步求解器(solver)。也就是說它在計算y(tn)時,僅僅利用前一步的計算結(jié)果y(tn-1).對于大多數(shù)問題.在第一次仿真時、可用ode45試一下。
ode23是基于顯式Runge—Kutta(2,3).Bogackt和Shampine對.對于寬誤差容限和存在輕微剛性的系統(tǒng)、它比ode45更有效一些.ode23也是單步求解器。
ode113是變階Adams-Bashforth—Moulton PECE求解器.在誤差容限比較嚴(yán)時,它比ode45更有效.odell3是一個多步求解器,即為了計算當(dāng)前的結(jié)果y(tn),不僅要知道前一步結(jié)果y(tn-1),還要知道前幾步的結(jié)果y(tn-2),y(tn-3),…。
(b)隱式變步長連續(xù)求解器
隱式變步長連續(xù)求解器用于解決剛性問題,主要有一下四種:
odel5s是基于數(shù)值微分公式(NDFs)的變階求解器.它與后向微分公式BDFs(也叫Gear方法)有聯(lián)系,但比它更有效。ode15s是一個多步求解器,如果認(rèn)為一個問題是剛性的,或者在用ode45s時仿真失敗或不夠有效時,可以試試odel5s。 odel5s是基于一到五階的NDF公式的求解器.盡管公式的階數(shù)越高結(jié)果越精確,但穩(wěn)定性會差一些.如果模型是剛性的,并且要求有比較好的穩(wěn)定性,應(yīng)將最大的階數(shù)減小到2。選擇odel5s求解器時,對話框中會顯示這一參數(shù). 可以用ode23求解器代替。del5s,ode23是定步長、低階求解器。
ode23s是基于一個2階改進(jìn)的Rosenbrock公式.因為它是一個單步求解器,所以對于寬誤差容限,它比odel5s更有效.對于一些用odel5s不是很有效的剛性問題,可以用它解決。
ode23t是使用“自由”內(nèi)插式梯形規(guī)則來實現(xiàn)的。如果問題是適度剛性,而且需要沒有數(shù)字阻尼的結(jié)果,可采用該求解器。
ode23tb是使用TR—BDF2來實現(xiàn)的,即基于隱式Runge—Kutta公式,其第一級是梯形規(guī)則步長和第二級是二階反向微分公式。兩級計算使用相同的迭代矩陣.與ode23s相似,對于寬誤差容限,它比odtl5s更有效。
(2)過零檢測
變步長求解器利用過零檢測處理連續(xù)信號。
(3)變步長求解器誤差容限
變步長求解器利用標(biāo)準(zhǔn)控制技術(shù)監(jiān)視每一步長的局部誤差。在每個仿真步長內(nèi),求解器計算步長時間點的狀態(tài)和局部誤差(即狀態(tài)的局部誤差,包括絕度誤差和相對誤差),并與設(shè)置的可接受誤差(絕度和相對誤差)進(jìn)行比較,若超出設(shè)定值,則減小步長重新計算。
相對誤差就是每一仿真步長計算的狀態(tài)誤差,默認(rèn)為1e-3,即相對誤差控制在0.1%。
絕對誤差是一個誤差界限值。Simulink默認(rèn)設(shè)置為Auto,即所有狀態(tài)的絕對誤差容限初始設(shè)置為1e-6。
Simulink仿真參數(shù)設(shè)置界面
Solver 面板:
(1)仿真時間設(shè)置:
Start timeà開始時間:仿真和生成代碼為雙精度值,單位秒;參數(shù)名稱為StartTime,參數(shù)類型為string。
Stop timeà結(jié)束時間:仿真和生成代碼為雙精度值,單位秒;參數(shù)名稱為StopTime,參數(shù)類型為string;此值應(yīng)不小于Start time(若相等,則只運(yùn)行一步),可以設(shè)置為無窮大inf。
(2)求解器設(shè)置:不同的求解器,具體設(shè)置參數(shù)也不盡相同,這里指說明共同部分。
變步長求解器由下列構(gòu)成
Solver
Max step sizeà設(shè)置最大步長,缺省為auto,即為仿真時間歷程的1/50;參數(shù)名稱為MaxStep。
Min step sizeà設(shè)置最小步長,缺省為auto,即為不限制警告數(shù)量,最小步長近似機(jī)器精度;可以設(shè)置為一個大于零的實數(shù),或者兩個元素的數(shù)組(在產(chǎn)生錯誤警告前,第一個元素最小步長,第二個元素為最大步長),參數(shù)名稱為MinStep
Initial step sizeà求解器第一步執(zhí)行的時間步長。
Relative tolerance
Absolute tolerance
Shape preservation
Initial step size
Number of consecutive min steps
Zero-crossing control
Time tolerance
Number of consecutive zero crossings
Algorithm
定步長求解器由
Solver
Periodic sample time constraint
Fixed-step size (fundamental sample time)
Tasking mode for periodic sample times
Higher priority value indicates higher task priority
Automatically handle rate transitions for data transfers
總結(jié)
以上是生活随笔為你收集整理的Simulink Solver的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程的几种实现方式
- 下一篇: 使用ffmpeg生成各种背景色的视频