Simulink動態(tài)系統(tǒng)建模與仿真第5章_第1頁
Simulink動態(tài)系統(tǒng)建模與仿真第5章_第2頁
Simulink動態(tài)系統(tǒng)建模與仿真第5章_第3頁
Simulink動態(tài)系統(tǒng)建模與仿真第5章_第4頁
Simulink動態(tài)系統(tǒng)建模與仿真第5章_第5頁
已閱讀5頁,還剩139頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第5章Simulink仿真設(shè)置5.1仿真基礎(chǔ)5.2設(shè)置仿真算法5.3工作區(qū)輸入/輸出設(shè)置5.4輸出信號的顯示 5.1仿真基礎(chǔ)

5.1.1設(shè)定仿真參數(shù)

Simulink中模型的仿真參數(shù)通常在仿真參數(shù)對話框內(nèi)設(shè)置。這個對話框包含了仿真運(yùn)行過程中的所有設(shè)置參數(shù),在這個對話框內(nèi),用戶可以設(shè)置仿真算法、仿真的起止時間和誤差容限等,還可以定義仿真結(jié)果數(shù)據(jù)的輸出和存儲方式,并可以設(shè)定對仿真過程中錯誤的處理方式。

首先選擇需要設(shè)置仿真參數(shù)的模型,然后在模型窗口的Simulation菜單下選擇ConfigurationParameters命令,打開ConfigurationParameters對話框,如圖5-1所示。在ConfigurationParameters對話框內(nèi)用戶可以根據(jù)自己的需要進(jìn)行參數(shù)設(shè)置。當(dāng)然,除了設(shè)置參數(shù)值外,也可以把參數(shù)指定為有效的MATLAB表達(dá)式,這個表達(dá)式可以由常值、工作區(qū)變量名、MATLAB函數(shù)以及各種數(shù)學(xué)運(yùn)算符號組成。參數(shù)設(shè)置完畢后,可以單擊Apply按鈕應(yīng)用設(shè)置,或者單擊OK按鈕關(guān)閉對話框。如果需要的話,也可以保存模型,以保存所設(shè)置的模型仿真參數(shù)。

關(guān)于仿真參數(shù)對話框內(nèi)各選項參數(shù)的基本設(shè)置方式,將在下一節(jié)中詳細(xì)介紹。圖5-15.1.2控制仿真執(zhí)行

Simulink的圖形用戶接口包括菜單命令和工具條按鈕,如圖5-2所示,用戶可以用這些命令或按鈕啟動、終止或暫停仿真。

若要模型執(zhí)行仿真,可在模型編輯器的Simulation菜單上選擇Start命令,或單擊模型工具條上的“啟動仿真”按鈕。Simulink會從ConfigurationParameters對話框內(nèi)指定的起始時間開始執(zhí)行仿真,仿真過程會一直持續(xù)到所定義的仿真終止時間。在這個過程中,如果有錯誤發(fā)生,系統(tǒng)會中止仿真,用戶也可以手動干預(yù)仿真,如暫?;蚪K止仿真。

在仿真運(yùn)行過程中,模型窗口底部的狀態(tài)條會顯示仿真的進(jìn)度情況,同時,Simulation菜單上的Start命令會替換為Stop命令,模型工具條上的“啟動仿真”按鈕也會替換為“暫停仿真”按鈕,如圖5-3所示。當(dāng)仿真結(jié)束時,計算機(jī)會發(fā)出蜂鳴聲,通知用戶仿真過程已結(jié)束。圖5-2圖5-3仿真啟動后,Simulation菜單上的Start命令會更改為Pause命令,用戶可以用該命令或“暫停仿真”按鈕暫時停止仿真,這時,Simulink會完成當(dāng)前時間步的仿真,并把仿真懸掛起來。這時的Pause命令或暫停按鈕也會改變?yōu)镃ontinue命令或“運(yùn)行”按鈕。若要在下一個時間步上恢復(fù)懸掛起來的仿真,可以選擇Continue命令繼續(xù)仿真。

如果模型中包括了要把輸出數(shù)據(jù)寫入到文件或工作區(qū)中的模塊,或者用戶在SimulationParameters對話框內(nèi)選擇了輸出選項,那么,當(dāng)仿真結(jié)束或懸掛起來時,Simulink會把數(shù)據(jù)寫入到指定的文件或工作區(qū)變量中。5.1.3交互運(yùn)行仿真

在仿真運(yùn)行過程中,用戶可以交互式執(zhí)行某些操作,如:

修改某些仿真參數(shù),包括終止時間、仿真算法和最大步長。

改變仿真算法。

在浮動示波器或Display模塊上單擊信號線以查看信號。

更改模塊參數(shù),但不能改變下面的參數(shù):

狀態(tài)、輸入或輸出的數(shù)目;

采樣時間;

過零數(shù)目;

任一模塊參數(shù)的向量長度;

內(nèi)部模塊工作向量的長度。需要注意的是,在仿真過程中,用戶不能更改模型的結(jié)構(gòu),如增加或刪除線或模塊,如果必須執(zhí)行這樣的操作,則應(yīng)先停止仿真,在改變模型結(jié)構(gòu)后再執(zhí)行仿真,并查看更改后的仿真結(jié)果。 5.2設(shè)置仿真算法

本節(jié)介紹ConfigurationParameters對話框內(nèi)基本仿真參數(shù)的設(shè)置方式,用戶也可以在MATLAB命令行中用sim和simset命令設(shè)置這些參數(shù)。關(guān)于如何使用命令行進(jìn)行仿真,讀者可以參看第8章“使用命令行仿真”。從圖5-1中可以看到,仿真參數(shù)對話框的左側(cè)是Select樹狀列表選項區(qū),選擇不同的節(jié)點命令,將在對話框的右側(cè)出現(xiàn)該項的設(shè)置面板。其中,Solver面板用來設(shè)置仿真的起止時間和仿真算法等選項;DataImport/Export面板用來設(shè)置用戶把數(shù)據(jù)輸出到MATLAB工作區(qū)或者從MATLAB工作區(qū)中輸入數(shù)據(jù)時的相關(guān)選項;Optimization面板用來設(shè)置改善仿真性能和優(yōu)化模型代碼執(zhí)行效率的相關(guān)選項;Diagnostics面板用來設(shè)置Simulink在執(zhí)行仿真時對模型進(jìn)行的檢測選項;HardwareImplementation面板只適用于基于計算機(jī)的系統(tǒng)模型,如嵌入式控制器,利用這個面板可以指定用來執(zhí)行模型系統(tǒng)時的硬件特性;ModelReferencing面板用來設(shè)置在其他模型中包含當(dāng)前模型以及在當(dāng)前模型中包含其他模型時的選項,同時還可以設(shè)置編譯選項;Real-TimeWorkshop面板用于設(shè)置與實時工作區(qū)有關(guān)的選項,本書不對其進(jìn)行介紹。這些選項面板中的設(shè)置參數(shù)對于模型仿真的準(zhǔn)確性和仿真性能來說都起著非常重要的作用。5.2.1設(shè)置仿真時間

用戶可以在Starttime和Stoptime文本框內(nèi)輸入新的數(shù)值來改變仿真的起始時間和終止時間,如圖5-4所示。缺省時的起始時間為秒,終止時間為秒。圖5-4需要注意的是,仿真時間和實際的執(zhí)行時間并不相同,例如,運(yùn)行一個設(shè)置為10秒仿真時間的模型通常并不會花費10秒。計算機(jī)運(yùn)行仿真程序所需要的時間取決于很多因素,通常包括模型的復(fù)雜度、仿真算法的步長以及計算機(jī)的速度等。5.2.2設(shè)置仿真算法

Simulink模型的仿真需要計算仿真起始時間到終止時間之間每個時間步的輸入、輸出和狀態(tài)值,這需要利用仿真算法來執(zhí)行。

這里,我們按習(xí)慣將求解器稱做仿真算法。通常,用來求解模型的仿真算法有很多,當(dāng)然,沒有任何一種算法適用于所有模型,因此,Simulink對仿真算法進(jìn)行了分類,并使每類算法可以解算一種特定類型的模型。用戶可以在Solver選項頁內(nèi)選擇最適合自己模型的仿真算法,可以選擇的算法有:定步長連續(xù)算法;

變步長連續(xù)算法;

定步長離散算法;

變步長離散算法。1.定步長連續(xù)算法

這種算法在仿真時間段(由起始時間到終止時間)內(nèi)以等間隔時間步來計算模型的連續(xù)狀態(tài)。它使用數(shù)值積分算法計算系統(tǒng)的連續(xù)狀態(tài),每個算法使用不同的積分方法,用戶可以根據(jù)需要選擇最適合自己模型的算法,當(dāng)然,這需要了解不同積分算法之間的優(yōu)缺點。使用定步長連續(xù)算法進(jìn)行仿真的仿真結(jié)果的準(zhǔn)確度和仿真時間取決于仿真步長的大小,仿真步長越小,結(jié)果越準(zhǔn)確,仿真步長越大,仿真時間也就越長。定步長連續(xù)算法可以用來處理包含連續(xù)狀態(tài)和離散狀態(tài)的模型。從理論上來說,定步長連續(xù)算法也能夠處理包含非連續(xù)狀態(tài)的模型,但是,這會增加仿真計算時的不必要開銷。因此,若模型中沒有狀態(tài)或只有離散狀態(tài),則即使選擇了定步長連續(xù)算法,Simulink通常還會使用定步長離散算法進(jìn)行求解。

若想為模型指定定步長連續(xù)算法,可先在Solveroptions選項區(qū)中的Type算法列表中選擇Fixed-step選項,然后從相鄰的Solver積分方法列表中選擇一個選項,如圖5-5所示。圖5-5Simulink把定步長連續(xù)算法分為兩類:顯式算法和隱式算法。

1)顯式算法

顯式算法用顯式函數(shù)計算下一時刻的狀態(tài)值,即這里,h是仿真步長。Simulink提供的顯式定步長連續(xù)算法如下:

ode5:Dormand-Prince法;

ode4:RK4,四階Runge-Kutta(龍格-庫塔)法;

ode3:Bogacki-Shampine法;

ode2:Heum法,也稱為改進(jìn)的Euler(歐拉)法;

ode1:Euler法。每個算法使用不同的積分方法計算模型的狀態(tài)導(dǎo)數(shù)。這些算法是按照積分算法的復(fù)雜程度給出的,其中,ode5是最復(fù)雜的積分算法,而ode1是最簡單的積分算法。不管仿真步長是多少,積分算法越復(fù)雜,則仿真精度越高。默認(rèn)情況下,當(dāng)為模型選擇Fixed-step選項時,Simulink會把仿真算法缺省設(shè)置為ode3,也就是說,它會選擇一個既可以求解連續(xù)狀態(tài),又可以求解離散狀態(tài),而且計算量適中的算法。用戶可以選擇Simulink提供的缺省值作為仿真步長,或者自己設(shè)置仿真步長。如果模型有離散狀態(tài),則Simulink會把仿真步長設(shè)置為模型的基本采樣時間;如果模型沒有離散狀態(tài),則Simulink會把仿真步長設(shè)置為仿真終止時間與仿真起始時間差值的1/50,這種設(shè)置保證了在模型指定的采樣時刻更新模型離散狀態(tài)時,仿真過程能夠捕捉到模型的狀態(tài)更新。但是,ode3算法無法保證精確地計算到模型的連續(xù)狀態(tài),為了獲得希望的精度,用戶可以選擇其他的算法。2)隱式算法

隱式算法用隱式函數(shù)計算下一時刻的狀態(tài)值,即這里,h是仿真步長。Simulink只提供了一種隱式算法,即ode14x(extrapolation,外推)法。這個算法使用牛頓法和外推法計算下一時間步上的模型狀態(tài)值,因此還需要指定牛頓法的迭代次數(shù)和外推階數(shù)。如圖5-6所示,Extrapolationorder選項設(shè)置外推階數(shù);NumberNewton’siterations選項設(shè)置迭代次數(shù)。迭代次數(shù)越多,外推階數(shù)越高,仿真精度也就越高,但是每個步長內(nèi)的計算負(fù)荷也就越大。圖5-6對于任何一個模型,只要給定足夠的仿真時間和足夠小的仿真步長,Simulink利用任何一個定步長連續(xù)算法總能得到希望的仿真精度。但實際上這是不可能的,或者說是不現(xiàn)實的,因為很難確定哪一個仿真算法與仿真步長的組合能夠在最短的時間內(nèi)得到最佳的結(jié)果。對一個特定模型來說,確定一個最佳算法通常需要進(jìn)行多次實驗。這里給出一種最有效的利用實驗法確定模型最佳定步長仿真算法的方法。首先,為模型選擇一種變步長仿真算法,并使仿真精度達(dá)到希望的要求,這樣用戶也就知道了仿真結(jié)果應(yīng)該是什么樣子的。接下來,使用ode1算法和缺省步長仿真模型,并把仿真結(jié)果與變步長算法的仿真結(jié)果進(jìn)行比較,如果在希望的精度上結(jié)果是相同的,那么最佳的定步長仿真算法就是ode1,這是因為ode1是最簡單的定步長算法,在當(dāng)前選擇的步長下它的仿真時間是最短的。如果ode1無法給出準(zhǔn)確的結(jié)果,那么就選擇另一個定步長算法,直到找到滿足精度要求而且計算量又最小的算法。達(dá)到這種目的的最有效方式就是使用二進(jìn)制搜索技術(shù),首先試試ode3,如果它給出了準(zhǔn)確的結(jié)果,再試試ode2,如果ode2也給出了準(zhǔn)確的結(jié)果,那么ode2就是該模型的最佳算法,否則最佳算法就是ode3。如果ode3沒有給出準(zhǔn)確的結(jié)果,那么試試ode5,如果ode5給出了準(zhǔn)確的結(jié)果,再試試ode4,如果ode4給出了準(zhǔn)確的結(jié)果,那么ode4就是這個模型的最佳算法,否則就是ode5。

如果ode5也無法給出準(zhǔn)確的結(jié)果,那么減小仿真步長,并重復(fù)上述過程,直到找到一個能夠滿足求解精度,又有較小計算量的算法。2.定步長離散算法

定步長離散算法與定步長連續(xù)算法一樣,仿真結(jié)果的準(zhǔn)確度和仿真時間也取決于仿真步長的大?。悍抡娌介L越小,結(jié)果越準(zhǔn)確;仿真步長越大,仿真時間也就越長。同樣,如果模型有離散狀態(tài),則Simulink會把仿真步長設(shè)置為模型的基本采樣時間;如果模型沒有離散狀態(tài),則Simulink會把仿真步長設(shè)置為仿真終止時間與仿真起始時間差值的1/50,這種設(shè)置保證了在模型指定的采樣時刻更新模型離散狀態(tài)時,仿真過程能夠捕捉到模型的狀態(tài)更新。Simulink提供了一種不執(zhí)行積分的定步長算法,它適用于求解不包含連續(xù)狀態(tài)的模型,也可以求解無狀態(tài)模型或只有離散狀態(tài)的模型。但它也有個最基本的限制,就是不能用于仿真有連續(xù)狀態(tài)的模型。若要為模型指定定步長離散算法,可在Solveroptions選項頁中的Type算法類型列表中選擇Fixed-step選項,然后在相鄰的Solver積分算法列表中選擇discrete(nocontinuousstates)。

注意:如果試圖用定步長離散算法更新或仿真含有連續(xù)狀態(tài)的模型,則Simulink會顯示錯誤消息,因此,若要確定模型中是否有連續(xù)狀態(tài),則利用這個方法可以進(jìn)行快速檢測。3.變步長連續(xù)算法

變步長連續(xù)算法適用于求解仿真過程中系統(tǒng)狀態(tài)變化的模型。當(dāng)系統(tǒng)的狀態(tài)快速變化時,這些算法可以減小仿真步長以提高仿真精度,而當(dāng)系統(tǒng)的狀態(tài)變化緩慢時,這些算法又可以增大步長以節(jié)省仿真時間。

若要為模型指定變步長連續(xù)算法,可先在Solveroptions選項頁的Type算法類型列表中選擇Variable-step選項,然后在相鄰的Solver積分算法列表中選擇一種方法,如圖5-7所示。圖5-7ode45是基于精確龍格-庫塔(4,5)的Dormand-Prince算法,它是一步算法,也就是說,在計算時,它只需要知道前一時刻的值。通常,對于大多數(shù)問題都可以先用ode45算法試解一下,正因為如此,ode45就作為了Simulink求解連續(xù)狀態(tài)模型的缺省算法。

ode23也是基于精確龍格-庫塔(2,3)的Bogacki-Shampine算法,它在求解原始公差和有軟鋼體出現(xiàn)的模型上比ode45更有效。ode23也是一步算法。ode113是變階的Adams-Bashforth-MoultonPECE算法,它在求解精確公差上比ode45更有效。ode113是多步算法,也就是說,它通常需要知道前幾個時刻的數(shù)值才能求解當(dāng)前時刻的值。

ode15s是基于數(shù)值積分算法(NDFs)的變階算法,它與前面微分算法(BDFs,也稱為Gear算法)有關(guān),但比BDFs效率高。與ode113一樣,ode15s也是多步算法,如果覺得要解決的問題是鋼體模型,或者用ode45算法無效或效率低,可以試試ode15s算法。

ode23s是基于2階Rosenbrock算法的一個改進(jìn)算法,因為它是一步算法,所以在處理原始公差問題上比ode15s更有效,它也可以解決一些ode15s無法解決的鋼體問題。ode23t是使用“任意”插值的梯形積分法,如果模型中有適度的鋼體,而且又想用一種不產(chǎn)生數(shù)值衰減的方法求解問題,則可以使用這種算法。

ode23tb是TR-BDF2實現(xiàn),也就是第一階段用精確龍格-庫塔算法,第二階段用2階后向微分算法,從結(jié)構(gòu)上來說,兩個階段在求值上都使用了相同的迭代矩陣。與ode23s一樣,這個算法在處理原始公差問題上比ode15s更有效。注意:對于鋼體問題,解算的結(jié)果在一個小時間段內(nèi)可能會改變,當(dāng)然,這個小時間區(qū)域與積分間隔相比是非常短的,但是它所造成的影響可能會在相當(dāng)長的時間范圍內(nèi)影響整個解算結(jié)果。那些為非鋼體問題而設(shè)計的算法在解算結(jié)果緩慢變化的時間區(qū)域內(nèi)是無效的,因為這些算法使用的時間步是非常小的,足以用來解決最快速變化的模型。對于ode15s和ode23s算法,它會在數(shù)值上生成Jacobian(雅可比)矩陣。4.變步長離散算法

Simulink提供了一種不進(jìn)行積分,但執(zhí)行過零檢測的變步長離散算法,即列表中的discrete(nocontinuousstates)選項。對于沒有連續(xù)狀態(tài)的模型,以及含有要求過零檢測的連續(xù)信號和(或)含有以不同采樣時間操作的離散模塊的模型,都可以使用這種算法。如果用戶未明確指定定步長離散算法,而且模型中也沒有連續(xù)狀態(tài),那么Simulink會使用這種算法作為離散模型的缺省算法。Simulink的定步長離散算法用固定大小的時間步來改進(jìn)仿真,因此,即使模型中什么操作也不執(zhí)行,它也要占用一個時間步的時間。與其不同的是,對于Simulink的變步長離散算法,當(dāng)模型中什么操作也不執(zhí)行時,它并不會花費一個時間步的時間,相反,當(dāng)有動作發(fā)生時,它會調(diào)整時間步的大小來改善仿真。當(dāng)然,依據(jù)模型的不同,這會大大減少仿真的步數(shù),因此也就縮短了仿真時間。注意:對于連續(xù)系統(tǒng),求解器通過積分來計算狀態(tài),在任何模型的仿真過程中,只要步長是有限的,這個積分過程就是近似的。這就是為什么MATLAB中包含了不同的連續(xù)求解器,它們采用不同的方法來近似。對于離散系統(tǒng),應(yīng)該選擇一個離散求解器,離散求解器可以是定步長和變步長的,定步長對于一個單速率系統(tǒng)來說是足夠了,但用變步長求解多速率系統(tǒng)則更有優(yōu)勢。

定步長求解器在整個積分過程中采用相同的步長對積分進(jìn)行近似;變步長求解器能夠根據(jù)近似誤差在仿真過程中自動調(diào)整步長,近似的方法和調(diào)整步長的方法對每個求解器是不同的。5.ode15s的最高階

當(dāng)用戶選擇了ode15s算法時,在Solveroptions選項區(qū)內(nèi)會增加Maximumorder參數(shù)選項,如圖5-8所示。這是因為ode15s算法是基于一階到五階的NDF公式,雖然階數(shù)越高,算法的精確度越高,但模型的穩(wěn)定性也下降了。如果模型是鋼體問題,且對穩(wěn)定性要求較高,則可以把最高階數(shù)降為2。此外,也可以嘗試使用ode23s算法,它也是一種定步長低階算法。圖5-86.多任務(wù)選項

如果用戶選擇了定步長算法,則在ConfigurationParameters對話框的Solveroptions選項頁內(nèi)還會顯示一個Taskingmodeforperiodicsampletimes(模式)選項列表,如圖5-9所示,用戶可以在該選項的下拉列表中選擇如下一種仿真模式。圖5-9

MultiTasking:這是多任務(wù)仿真模式,如果在這個模式下檢測出在兩個模塊之間存在著不合法的采樣速率,也就是以不同采樣速率操作的模塊被直接連接起來,那么系統(tǒng)在這個模式下就會發(fā)出一個錯誤消息。這在實時多任務(wù)系統(tǒng)中是非常重要的,因為如果兩個任務(wù)之間存在著不合理的采樣速率傳輸,那么當(dāng)其中的一個任務(wù)需要另一任務(wù)的輸出時,可能會造成無法獲得該任務(wù)輸出的結(jié)果。因此,在這種仿真模式下,通過系統(tǒng)檢查這種傳輸,多任務(wù)模式可以幫助用戶創(chuàng)建一個有效的、執(zhí)行并行任務(wù)的實時多任務(wù)系統(tǒng)。

此外,用戶可以用RateTransition模塊消除模型中不合法的速率傳輸。

SingleTasking:這是單任務(wù)仿真模式,這個模式無法檢測模塊之間的采樣傳輸速率,如果用戶創(chuàng)建的是單任務(wù)系統(tǒng)模型,則可以選擇這種仿真模式,在這樣的系統(tǒng)中,任務(wù)同步已經(jīng)不再是一個問題。

Auto:這是缺省選項,它可以使Simulink自動選擇仿真模式,如果所有的模塊都使用相同的速率,則Simulink會使用單任務(wù)模式;如果模型中包含有以不同速率操作的模塊,則會使用多任務(wù)模式。5.2.3設(shè)置仿真步長

對于變步長算法,用戶可以根據(jù)模型的需要設(shè)置最大步長和建議的初始步長,缺省時,這些參數(shù)都是由auto值自動確定的;對于定步長算法,用戶可以設(shè)置固定大小的步長,缺省值也是auto。

1.變步長連續(xù)算法步長

當(dāng)選擇變步長連續(xù)算法時,Solveroptions選項區(qū)的步長設(shè)置選項如圖5-10所示。圖5-101)最大步長

Solveroptions選項區(qū)的Maxstepsize參數(shù)用來控制算法使用的最大步長,它的缺省值是由仿真的起始時間和終止時間確定的,如果終止時間等于起始時間,或者終止時間是inf,那么Simulink會把最大步長設(shè)置為秒,否則,Simulink按照下面的公式來設(shè)置最大步長:通常,缺省的最大步長對于大多數(shù)模型都足以保證其精度。如果用戶擔(dān)心步長太大,算法有可能會漏掉模型中某些模塊的重要動作,那么用戶可以手動設(shè)置參數(shù)值,以防止步長過大。當(dāng)然,如果用戶設(shè)定的仿真時間區(qū)域太長,對于算法來說,按上述公式計算的仿真步長就可能太大了,這時可以減小步長。此外,如果模型中包含了某些周期性動作或接近周期性動作,而用戶又知道這個周期,則可以把最大步長設(shè)置為該周期的一小部分(如周期的1/4)。

需要說明的是,對于要求更多輸出點的模型,從數(shù)據(jù)輸入/輸出面板中設(shè)置Output

options(輸出選項)比減小最大步長更好一些,這在本書的第節(jié)中會有詳細(xì)介紹。2)初始步長

Solveroptions選項區(qū)的Initialstepsize參數(shù)用來設(shè)置算法的初始步長。缺省時,算法會通過檢驗初始時刻的狀態(tài)微分值來選擇初始步長,如果第一個步長選得太大,則算法可能會越過模型初始時的某些重要動作。實際上,初始步長值是一個建議步長,它可以由算法試解來確定,如果計算結(jié)果不滿足誤差準(zhǔn)則,則算法會重新選擇并減小步長。3)最小步長

Solveroptions選項區(qū)的Minstepsize參數(shù)用來控制算法的最小步長。如果算法需要更小的步長來滿足誤差容限,則它會發(fā)出警告信息以指出當(dāng)前有效的相對誤差。這個參數(shù)可以是大于零的實數(shù),也可以是包含兩個元素的一維向量,其中的第一個元素是最小步長,第二個元素是模型出現(xiàn)錯誤前可以發(fā)出的最小步長警告的最大次數(shù)。如果把第二個元素設(shè)置為0,則會產(chǎn)生這樣的錯誤,也就是算法在第一個時間步上使用的步長必須小于指定的最小步長,這就相當(dāng)于在Diagnostics選項面板中將最小步長錯誤診斷(Minstepsizeviolation)項設(shè)置為error。若把第二個元素設(shè)置為-1,則表示可以有無限次警告,如果該參數(shù)輸入的是標(biāo)量值,那么-1值也就是向量值中第二個元素的缺省值。因此,對于Minstepsize參數(shù),其缺省值是:作為第一個元素的最小步長取決于計算機(jī)的精度,第二個元素為無限次的警告次數(shù)。2.變步長離散算法步長

在選擇變步長離散算法時,Solveroptions選項區(qū)的步長設(shè)置選項如圖5-11所示。圖5-113.定步長算法步長

在選擇定步長算法時,Solveroptions選項區(qū)的步長設(shè)置選項如圖5-12所示。定步長連續(xù)算法和定步長離散算法的設(shè)置選項相同。圖5-12(1)?Periodicsampletimeconstraint(周期采樣時間約束):這個選項允許用戶設(shè)置模型在定義采樣時間上的一些約束條件。在仿真過程中,Simulink會對模型進(jìn)行檢測,以確保模型能夠滿足這個約束,如果模型沒有滿足這個約束,則Simulink會顯示錯誤消息。該選項可以設(shè)置的參數(shù)如下:

Unconstrained:沒有約束。如果選擇這個選項,則Simulink會顯示Fixed-step

size(fundamentalsampletime)選項,如圖5-12所示,用戶可以在該選項的文本框內(nèi)輸入定步長的大小。

Ensuresampletimeindependent:如果選擇這個選項,則Simulink會對模型進(jìn)行檢查,以確保模型能夠繼承引用該模型的模型采樣時間,而且不改變該模型的狀態(tài)。如果為模型指定了仿真步長,那么模型就無法滿足這個約束,因此選擇這個選項時,Simulink會隱藏步長選項,如圖5-13所示。圖5-13

Specified:如果選擇這個選項,則Simulink會對模型進(jìn)行檢查,以確保模型在指定的一組有優(yōu)先級別的周期采樣時刻上正確執(zhí)行。選擇這個選項后,Simulink會顯示Sampletime

properties選項,如圖5-14所示。圖5-14(2)?Fixedstepsize(fundamentalsampletime)(定步長,即基本采樣時間):當(dāng)Type算法類型選擇Fixed-step選項,而且Periodicsampletimeconstraint參數(shù)選擇Unconstrained選項時,這個選項才會出現(xiàn)。缺省時,該選項為auto,即由Simulink選擇步長。如果模型指定了一個或多個周期采樣時間,那么Simulink會選擇指定采樣時間的最小公分母作為模型的仿真步長,而這個基本采樣時間可以確保仿真算法能夠在模型定義的每個采樣時刻上進(jìn)行解算。如果模型沒有定義任何周期采樣時間,那么Simulink會把仿真時間除以50作為模型的仿真步長。(3)?Sampletimeproperties(采樣時間屬性):這個選項用來指定并分配模型采樣時間的優(yōu)先級,可在這個文本框內(nèi)輸入N×3矩陣,行表示模型指定的采樣時間,并按照由快到慢的速率排列。如果模型的基本速率與模型指定的最快速率不同,那么應(yīng)該指定基本速率作為矩陣的第一個元素,然后按照由快到慢的順序指定速率。

每一行的采樣時間應(yīng)該具有如下形式:[period,offset,priority]。這里,period是采樣時間段,offset是采樣時間偏移量,priority是與這個采樣速率相關(guān)的實時任務(wù)的執(zhí)行優(yōu)先級,最快的采樣速率具有最高的優(yōu)先級。例如,,0,10];,0,11];,0,12]]表示這個模型指定了三個采樣時間,它的基本采樣時間是秒,分配的采樣時間優(yōu)先級是10,11,12,這個例子假設(shè)模型的較高優(yōu)先級值表示的是較低的優(yōu)先權(quán),也就是沒有選擇Higherpriorityvalueindicateshighertaskpriority選項。如果模型在執(zhí)行時只有一個速率,那么在這個文本框內(nèi)應(yīng)輸入速率作為三元素向量,例如,,0,10]。當(dāng)更新模型時,Simulink會對照這個文本框檢查模型定義的采樣時間,如果模型定義的采樣時間多于或少于文本框中指定的采樣時間,則Simulink會顯示一個錯誤消息。(4)Higherpriorityvalueindicateshighertaskpriority(優(yōu)先級值越高,任務(wù)優(yōu)先級越高):如果選擇這個選項,則模型會為較高優(yōu)先級值的任務(wù)分配較高的優(yōu)先權(quán),這樣,RateTransition模塊會按照由低到高的速率轉(zhuǎn)換原則依次處理較低優(yōu)先級值速率和較高優(yōu)先級值速率之間的異步轉(zhuǎn)換;如果不選擇這個選項(缺省值),則模型會為較高優(yōu)先級值的任務(wù)分配較低的優(yōu)先權(quán),這樣,RateTransition模塊會按照由高到低的速率轉(zhuǎn)換原則依次處理較低優(yōu)先級值速率和較高優(yōu)先級值速率之間的異步轉(zhuǎn)換。這是實時工作間中使用的一個選項。(5)?Automaticallyhandledatatransfersbetweentasks(自動在任務(wù)間執(zhí)行數(shù)據(jù)轉(zhuǎn)換):如果選擇這個選項,那么在模塊之間有速率轉(zhuǎn)換時,Simulink會在這些模塊之間插入隱藏的RateTransition模塊,以確保在數(shù)據(jù)轉(zhuǎn)換過程中的數(shù)據(jù)完整性。5.2.4計算仿真步長

由于Simulink中的變步長求解器是根據(jù)積分誤差來修改步長的,而模型中的狀態(tài)通常都不能夠被精確地計算出來,因此積分的誤差值也同樣是一個近似值。通常,求解器采用兩個不同的階次進(jìn)行積分,然后計算它們之間的差值,作為積分誤差。

對于模型中的連續(xù)狀態(tài),Simulink通過對連續(xù)狀態(tài)的微分值進(jìn)行積分來求取連續(xù)量的狀態(tài)值。圖5-15說明了Simulink通過比較兩種不同階次積分之間的差異來求得近似的積分誤差。圖5-15具體的計算方法根據(jù)求解器的不同而不同,如果積分誤差滿足絕對誤差或相對誤差,則仿真會繼續(xù)進(jìn)行;如果不滿足,求解器會嘗試使用一個更小的步長,并重復(fù)這個過程,直至積分誤差滿足誤差容限。對于同一個求解器,求解器在選擇更小步長時采用的方法也不盡相同,而且如果誤差容許值或選擇的求解器不適合所求解的系統(tǒng),則步長可能會變得非常小,使仿真速度變得非常慢。對于離散狀態(tài)中的仿真步長,變步長求解器也考慮了系統(tǒng)中的離散狀態(tài)。通常,求解器首先嘗試最大步長(開始時采用初始步長h0),如果在這個區(qū)間有離散更新ht(ht<h0),則求解器會減小步長,以與更新相吻合,之后再計算積分誤差;如果誤差準(zhǔn)則滿足要求,則進(jìn)行下一步計算;如果不滿足要求,則繼續(xù)縮小時間間隔(h=ht-hnew),減小步長重新計算積分誤差,整個過程繼續(xù)下去,直至滿足誤差要求為止。圖5-16說明了變步長算法中離散狀態(tài)的更新過程。圖5-165.2.5設(shè)置誤差容限

Simulink中的算法使用標(biāo)準(zhǔn)的局部誤差控制法來監(jiān)視每個時間步上的誤差,在每個時間步內(nèi),算法會在時間步的結(jié)尾處計算模型中各模塊的狀態(tài)值,同時確定局部誤差(localerror),即狀態(tài)值的估計誤差;然后比較局部誤差和容許誤差(acceptableerror),容許誤差是相對誤差(rtol)和絕對誤差(atol)的函數(shù),如果對于任何一個狀態(tài),狀態(tài)的局部誤差都大于容許誤差,那么算法會減小步長并重新計算誤差值。

Simulink中的變步長求解器是根據(jù)積分誤差來修改步長的,在步長計算過程中考慮了兩個誤差:相對誤差和絕對誤差。相對誤差(Relativetolerance)測量相對于每個狀態(tài)的誤差,它表示狀態(tài)值的百分比,即狀態(tài)的絕對誤差除以狀態(tài)值的百分比。相對誤差的缺省值為1e-3,也就是所計算的狀態(tài)要精確在0.1%內(nèi)。

絕對誤差(Absolutetolerance)是臨界誤差值,它是積分誤差的絕對值,這個誤差表示被測狀態(tài)值趨近于零的程度。

對于模型中模塊的第i個狀態(tài),它的誤差ei要求滿足:其中,rtol是相對誤差,adtol是絕對誤差,絕對誤差和相對誤差給出了誤差的上限值,求解器必須滿足其中的一個誤差方能進(jìn)行下一步計算。當(dāng)狀態(tài)值較大時,相對誤差小于絕對誤差,于是通常是相對誤差控制模型仿真的執(zhí)行進(jìn)程;當(dāng)狀態(tài)值接近于零時,絕對誤差小于相對誤差,于是由絕對誤差控制仿真的執(zhí)行進(jìn)程。

圖5-17是模型中的一條狀態(tài)曲線,圖中繪出了由相對誤差和絕對誤差確定的容許誤差區(qū)域。圖5-17如果用戶指定相對誤差和絕對誤差的參數(shù)值為auto(缺省值),那么Simulink會在初始時把每個狀態(tài)的絕對誤差設(shè)置為1e-6,隨著仿真過程的進(jìn)行,Simulink會把每個狀態(tài)的絕對誤差重新設(shè)置為狀態(tài)所假設(shè)的最大值,即此時刻的狀態(tài)與相對誤差的乘積。這樣,如果狀態(tài)由0變化到1,rtol是1e-3,那么到仿真結(jié)束時,atol也就設(shè)置為1e-3;如果狀態(tài)由0變化到1000,那么atol設(shè)置為1;如果計算的設(shè)置值不合理,那么用戶也可以自己確定合適的設(shè)置值。為了確定一個合理的絕對誤差值,可能需要多次運(yùn)行仿真。

用戶可以在參數(shù)對話框內(nèi)設(shè)置誤差容限,如圖5-18所示,其中Δx表示x的誤差。高的容限值可以使仿真速度加快,但是可能會給出不準(zhǔn)確的結(jié)果,甚至造成數(shù)值不穩(wěn)定。圖5-18Simulink中的某些模塊,如Integrator模塊、TransferFcn模塊、State-Space模塊和Zero-Pole模塊,允許用戶指定絕對誤差值以求解模型狀態(tài)和確定模型輸出,為這些模塊指定絕對誤差值也就取代了在ConfigurationParameters對話框內(nèi)的全局設(shè)置。當(dāng)然,如果全局設(shè)置無法為模型中的所有狀態(tài)提供足夠的誤差控制,如這些狀態(tài)的幅值變化范圍比較大。那么可以用這種方法取代全局設(shè)置。 5.3工作區(qū)輸入/輸出設(shè)置

選擇ConfigurationParameters對話框中Select選項區(qū)中的DataImport/Export選項,將顯示數(shù)據(jù)輸入/輸出面板,如圖5-19所示。這個選項面板是MATLAB工作區(qū)的輸入/輸出設(shè)置面板,用戶可以在這個選項頁內(nèi)將仿真結(jié)果輸出到工作區(qū)變量中,也可以從工作區(qū)中獲得輸入和變量的初始狀態(tài)。圖5-19也可以在模型窗口中選擇View菜單下的ModelExplorer命令,打開ModelExplorer對話框,并顯示DataImport/Export子項,如圖5-20所示。圖5-205.3.1從基本工作區(qū)中裝載輸入

Simulink在運(yùn)行仿真期間,可以從模型的基本工作區(qū)中將輸入應(yīng)用到模型的最頂層輸入端口,為了指定這個選項,應(yīng)在數(shù)據(jù)輸入/輸出選項面板的Loadfromworkspace區(qū)域內(nèi)選擇Input復(fù)選框,然后在相鄰的編輯框內(nèi)輸入外部輸入描述,并單擊Apply按鈕。

外部輸入(例如,來自于工作區(qū)的輸入)的格式可以從Saveoptions選項區(qū)中的Format選項旁的下拉列表框內(nèi)選擇,如圖5-21所示,可以選擇的選項有Array、Structure、Structurewithtime。圖5-21

Array:這是數(shù)組選項,它可以使Simulink求取Input復(fù)選框旁的表達(dá)式,并把表達(dá)式結(jié)果作為模型的輸入。

對于模型來說,缺省的輸入表達(dá)式為[t,u],缺省的輸入格式為Array。因此,如果用戶在基本工作區(qū)中定義了t和u,那么只能選擇Input選項從模型的基本工作區(qū)中輸入數(shù)據(jù)。

表達(dá)式求取的必須是數(shù)據(jù)類型為double的實數(shù)(非復(fù)數(shù))矩陣,矩陣的第一列必須是按升冪排列的時間向量,其他的列指定輸入值,而且,每一列都表示不同Inport模塊信號(按序列排列)的輸入,每一行是對應(yīng)時間點的輸入值。如果打開了Input模塊的模塊參數(shù)對話框,并選擇了該模塊的Interpolatedate復(fù)選項,如圖5-22所示,那么Simulink會根據(jù)需要線性內(nèi)插或外插輸入值。圖5-22需要指出的是,輸入矩陣的總列數(shù)必須等于n+1,n是模型中輸入端口的信號總數(shù)。如果矩陣的輸入信號數(shù)與模型端口的輸入信號數(shù)不相同,則模型仿真時會發(fā)出錯誤消息。

注意:數(shù)組輸入格式允許用戶只能裝載數(shù)據(jù)類型為double的實數(shù)(非復(fù)數(shù))標(biāo)量輸入或向量輸入,也可以使用非double類型的結(jié)構(gòu)格式輸入復(fù)數(shù)數(shù)據(jù)和矩陣(2-D)數(shù)據(jù)。舉例來說,假設(shè)要實現(xiàn)如下的代數(shù)方程模型:模型中有三個輸入端口,每個端口接收一個輸入信號,按方程的要求創(chuàng)建的Simulink模型如圖5-23所示。圖5-23假設(shè)DataImport/Export選項面板中的Input文本框內(nèi)定義了變量t和u,并選擇輸入的Format格式為Array,在工作區(qū)中裝載時間和信號輸入如下:

t=[0:0.1:10]';

u=[sin(t),t-1,cos(t)];

這里,n等于3,輸入矩陣[t,u]的總列數(shù)為4。給定了輸入信號后,在模型窗口中運(yùn)行仿真,打開示波器觀察輸出y1和y2信號曲線,仿真結(jié)果如圖5-24所示。(a)(b)圖5-24

Structurewithtime:這個選項表示Simulink以帶有時間定義的數(shù)據(jù)結(jié)構(gòu)形式讀取工作區(qū)中的數(shù)據(jù)。該結(jié)構(gòu)的名稱在Input文本框內(nèi)指定,這個輸入結(jié)構(gòu)必須有兩個頂層域:time和signals。time域包含一個仿真時間列向量,signals域包含一個子結(jié)構(gòu)數(shù)組,每個子結(jié)構(gòu)數(shù)組對應(yīng)一個模型輸入端口。每個signals子結(jié)構(gòu)還必須包含兩個名稱分別為values和dimensions的域。values域必須包含相應(yīng)輸入端口的輸入數(shù)組,每個輸入與time域指定的時間點相對應(yīng)。dimensions域指定輸入的維數(shù)。如果每個輸入是標(biāo)量值或向量值(1-D數(shù)組),那么dimensions域也必須是一個指定輸入向量長度的標(biāo)量值(對于輸入的標(biāo)量值,該長度值為1);如果每個輸入是一個矩陣(2-D數(shù)組),則dimensions域必須是一個兩元素向量,向量中的第一個元素指定矩陣的行數(shù),第二個元素指定矩陣的列數(shù)。如果一個端口的所有輸入都是標(biāo)量值或向量值,則values域必須是M×N數(shù)組,這里,M是由time域指定的時間點數(shù),N是每個向量值的長度。例如,下面的代碼創(chuàng)建了一個名稱為a的結(jié)構(gòu),該結(jié)構(gòu)向帶有單個輸入端口的模型裝載數(shù)據(jù)類型為int8的兩元素信號向量,信號向量中有11個時間采樣點。a.time=(0:0.1:1)';c1=int8([0:1:10]');

c2=int8([0:10:100]');

a.signals(1).values=[c1c2];

a.signals(1).dimensions=2;為了把這個數(shù)據(jù)裝載到模型的輸入端口,應(yīng)該先選擇WorkspaceI/O選項頁中的Input復(fù)選框,并在輸入表達(dá)式區(qū)域內(nèi)輸入a。

如果一個端口的所有輸入都是矩陣(2-D數(shù)組),那么values域必須是一個M?×?N?×?T數(shù)組,這里M和N是每個矩陣輸入的維數(shù),T是時間點數(shù)。例如,假設(shè)用戶想要為模型的某一輸入端口輸入一個4?×?5階矩陣信號的51個采樣時間點,則工作區(qū)結(jié)構(gòu)中的對應(yīng)dimensions域必須等于[45],values數(shù)組維數(shù)必須為4?×?5?×?51。

再舉例說明,如圖5-25所示模型是一個有兩個輸入的系統(tǒng)。圖5-25假設(shè)要在第一個輸入端口輸入一個正弦波,在第二個輸入端口輸入一個余弦波,那么在MATLAB工作區(qū)中按如下語句定義向量a:

a.time=(0:0.1:10)';

a.signals(1).values=sin(a.time);

a.signals(1).dimensions=1;

a.signals(2).values=cos(a.time);

a.signals(2).dimensions=1;

然后打開模型的仿真參數(shù)對話框,選擇DataImport/Export選項面板中的Input復(fù)選框,并在相鄰的文本編輯框內(nèi)輸入a,選擇Structurewithtime作為I/O格式。運(yùn)行仿真后,示波器中會顯示正弦波和余弦波曲線。

Structure:Structure格式與Structurewithtime格式相同,不同的是時間域為空。例如,在上面的例子中,可以設(shè)置時間域為:a.time=[];這樣,Simulink就會在第一個時間步上從輸入端口數(shù)值數(shù)組中的第一個元素讀取輸入,在第二個時間步上從數(shù)組中的第二個元素讀取輸入,依此類推。時間表達(dá)式:時間表達(dá)式可以是任意的MATLAB表達(dá)式,這個表達(dá)式用來求取長度等于模型輸入端口信號數(shù)目的行向量。例如,假設(shè)模型有一個向量輸入端口,該端口接收兩個輸入信號,而且假設(shè)timefcn是用戶定義的函數(shù),該函數(shù)返回一個兩元素行向量,那么對于這個模型,下面給出的都是該模型有效的輸入時間表達(dá)式:

[3*sin(t),cos(2*t)]

4*timefcn(w*t)+7

Simulink會在仿真的每個時間步上求取表達(dá)式的值,并將最終的結(jié)果值應(yīng)用于模型的輸入端口。需要注意的是,當(dāng)運(yùn)行仿真時,Simulink會定義時間變量t,這樣,用戶在表達(dá)式中可以忽略這個時間變量,Simulink會把表達(dá)式sin看做sin(t)。5.3.2把輸出結(jié)果保存到工作區(qū)

在數(shù)據(jù)輸入/輸出選項面板的Savetoworkspace區(qū)域內(nèi),用戶可以通過選擇Time、States和/或Output等復(fù)選框指定返回到工作區(qū)中的變量,如圖5-26所示。Simulink會把指定的時間、狀態(tài)和輸出軌跡寫入到工作區(qū)。圖5-26對于變量的名稱,用戶可以在復(fù)選框右側(cè)的文本框內(nèi)指定,如果要把輸出數(shù)據(jù)寫入到一個以上的變量中,可以用逗號分隔以指定各變量名稱。

注意:Simulink會以模型的基本采樣速率將輸出保存到工作區(qū)中。如果用戶想用不同的采樣速率保存輸出,則可以使用ToWorkspace模塊。

Saveoptions選項區(qū)可以指定數(shù)據(jù)輸出的格式,并可以限制所保存的輸出值的數(shù)量。關(guān)于模型狀態(tài)和輸出的格式選項如下:

Array:選擇這個選項后,Simulink會把狀態(tài)和輸出保存到狀態(tài)數(shù)組和輸出數(shù)組中。

狀態(tài)矩陣的名稱在SavetoWorkspace區(qū)域內(nèi)指定(如xout),狀態(tài)矩陣中的每一行對應(yīng)于模型狀態(tài)的時間采樣點,每一列對應(yīng)于狀態(tài)中的一個元素。例如,假設(shè)用戶模型有兩個連續(xù)狀態(tài),每個狀態(tài)是一個兩元素向量,那么狀態(tài)矩陣每一行中的前兩個元素就包含著第一個狀態(tài)向量的時間采樣,每一行中的最后兩個元素包含第二個狀態(tài)向量的時間采樣。

模型輸出矩陣的名稱也在SavetoWorkspace區(qū)域內(nèi)指定(例如,yout),矩陣中的每一列對應(yīng)于一個模型輸出端口,每一行中的元素對應(yīng)指定時刻的輸出值。注意:只有當(dāng)模型的輸出都是相同數(shù)據(jù)類型的標(biāo)量或者向量(對狀態(tài)來說,都是矩陣),都是實數(shù)或者都是復(fù)數(shù)時,才能用Array格式保存模型的輸出或狀態(tài)。如果模型的輸出和狀態(tài)不滿足這些條件,則可以用Structurewithtime輸出格式保存數(shù)值。

Structurewithtime:選擇這個選項后,Simulink會以數(shù)據(jù)結(jié)構(gòu)保存模型的狀態(tài)和輸出,結(jié)構(gòu)的名稱在SavetoWorkspace區(qū)域內(nèi)指定(例如,xout和yout)。

用來保存輸出的結(jié)構(gòu)有兩個頂層域:time和signals。time域包含一個仿真時間向量,signals域包含一個子結(jié)構(gòu)數(shù)組,每個子結(jié)構(gòu)數(shù)組對應(yīng)一個模型輸出端口。而且,每個子結(jié)構(gòu)有四個域值:values、dimensions、label和blockName。values域指定的是相應(yīng)輸出端口的輸出值,如果輸出的是標(biāo)量或向量值,則values域是一個矩陣,矩陣中的每一行表示一個輸出,每一行中的元素值對應(yīng)時間向量中特定時刻的輸出;如果輸出的是矩陣(2-D)值,則values域是一個三維數(shù)組M×N×T,這里,M×N是輸出信號的維數(shù),T是輸出采樣點的個數(shù)。如果T=1,則MATLAB自動降為最低維數(shù),因此,values域就是M×N矩陣。dimensions域指定的是輸出信號的維數(shù)。label域指定的是連接到輸出端口或狀態(tài)類型(連續(xù)或離散)的信號標(biāo)簽。blockName域指定的是相應(yīng)輸出端口或模塊的名稱。用來保存狀態(tài)的結(jié)構(gòu)與保存輸出的結(jié)構(gòu)有相似的構(gòu)成,狀態(tài)結(jié)構(gòu)也有兩個頂層域:time和signals。time域指定的是仿真時間向量;signals域指定的是子結(jié)構(gòu)數(shù)組,每個子結(jié)構(gòu)數(shù)組對應(yīng)于模型中的一個狀態(tài)。每個signals結(jié)構(gòu)也有四個域:values、dimensions、label和blockName。values域指定的是由blockName域中指定的模塊狀態(tài)的時間采樣;對于內(nèi)嵌模塊,label域指定狀態(tài)類型,狀態(tài)類型或者為CSTATE(連續(xù)狀態(tài)),或者為DSTATE(離散狀態(tài))。對于S-Function模塊,標(biāo)簽包含由S-Function模塊應(yīng)用到狀態(tài)中的任意名稱。狀態(tài)的時間采樣以矩陣值的形式存儲在values域內(nèi),矩陣中的每一行對應(yīng)一個時間采樣,每一行中的每個元素對應(yīng)于狀態(tài)的一個元素,如果狀態(tài)是矩陣,則矩陣以列主序列的形式存儲在values數(shù)組中。例如,假設(shè)模型包含一個2?×?2矩陣狀態(tài),Simulink記錄了仿真運(yùn)行期間狀態(tài)值的51個采樣點,那么,該狀態(tài)的values域會是一個51?×?4矩陣,矩陣的每一行對應(yīng)該狀態(tài)的一個時間采樣,每一行的前兩個元素對應(yīng)采樣值的第一列,最后兩個元素對應(yīng)采樣的第二列。

Structure:這個格式與前面介紹的相同,不同的是,Simulink不會在被保存結(jié)構(gòu)中的time域內(nèi)存儲仿真時間。注意:向工作區(qū)中保存數(shù)據(jù)可能會降低仿真速度,并消耗內(nèi)存。為了避免這種情況,用戶可以限制保存到工作區(qū)中的采樣點數(shù)目,或者通過使用倍數(shù)因子跳過這些采樣點。若要設(shè)置所保存的數(shù)據(jù)采樣點的數(shù)目,可選擇Limitdatapointstolast復(fù)選框,并指定要保存的采樣點數(shù)目。若要使用倍數(shù)因子,可在Decimation右側(cè)的文本框內(nèi)輸入數(shù)值,例如,數(shù)值2表示每隔一個保存一個數(shù)據(jù)。5.3.3裝載和保存狀態(tài)

對于系統(tǒng)模型,仿真起始時刻應(yīng)用的初始條件通常在模塊中進(jìn)行設(shè)置,在DataImport/Export選項面板內(nèi),用戶可以通過指定States參數(shù)文本框中的內(nèi)容來替代模塊中設(shè)置的初始條件。用戶也可以在Finalstates參數(shù)文本框內(nèi)指定最終狀態(tài)的存儲變量,并保存當(dāng)前仿真運(yùn)行時的最終狀態(tài),然后把這些狀態(tài)應(yīng)用到后續(xù)的仿真中,見圖5-20。

如果用戶想要保存穩(wěn)態(tài)解,并用這些已知狀態(tài)重新啟動仿真,則可以利用這些特性,這些狀態(tài)以用戶在DataImport/Export選項面板中Saveoptions區(qū)域內(nèi)設(shè)置的格式存儲。設(shè)置裝載和保存狀態(tài)的方式如下:

若要保存最終狀態(tài)(仿真結(jié)束時的狀態(tài)值),可選擇FinalState復(fù)選框,并在相鄰的文本編輯框內(nèi)輸入變量。

若要裝載狀態(tài),可選擇InitialState復(fù)選框,然后指定包含初始狀態(tài)值的變量名稱,這個變量可以選擇與存儲最終狀態(tài)的變量具有相同格式的矩陣或結(jié)構(gòu)。這樣,Simulink就可以用Structure或Structurewithtime格式把當(dāng)前會話期中的初始狀態(tài)設(shè)置為前一個會話期中保存的最終狀態(tài)。

如果未選擇這些復(fù)選框,或者狀態(tài)數(shù)組為空([]),那么Simulink會使用模塊中定義的初始條件。5.3.4設(shè)置輸出選項

ConfigurationParameters對話框中的Outputoptions區(qū)域可以控制仿真生成的輸出數(shù)目,可以選擇如下三個選項:

Refineoutput(精細(xì)輸出);

Produceadditionaloutput(生成附加輸出);

Producespecifiedoutputonly(只生成指定輸出)。

Refineoutput:當(dāng)仿真輸出結(jié)果太粗糙時,這個選項可以提供額外的輸出點,以平滑結(jié)果曲線,它實際是在兩個時間步之間增加輸出點的數(shù)目,如圖5-27所示。例如,精細(xì)因子2可在兩個時間步之間再提供一個輸出點。缺省時的精細(xì)因子為1。圖5-27注意:如果用戶想要獲得比較光滑的輸出曲線,可以增加精細(xì)因子,也可以減小仿真步長,但改變精細(xì)因子比減小步長更快捷。當(dāng)精細(xì)因子改變時,仿真算法通過求取附加點處的擴(kuò)展公式來增加輸出點,但改變精細(xì)因子并不會改變仿真步長。此外,如果在模型中產(chǎn)生了過零,則利用這個選項無助于算法定位過零位置。如果用戶選擇了ode45算法,則對于這種變步長算法,使用精細(xì)因子是最有用的,因為ode45算法可以使用大步長,當(dāng)圖形化輸出仿真結(jié)果時,這種大步長算法可能會造成輸出曲線不夠光滑。這時可以試試較大的精細(xì)因子,并重新運(yùn)行仿真。通常,數(shù)值為4的精細(xì)因子都能提供更平滑的輸出結(jié)果。

Produceadditionaloutput:這個選項可以使用戶直接指定算法生成附加輸出點的時間。當(dāng)選擇這個選項時,Simulink會在Saveoptions選項區(qū)內(nèi)顯示一個OutputTimes文本框,如圖5-28所示。用戶可以在這個區(qū)域內(nèi)輸入求取附加點時刻的MATLAB表達(dá)式,或者直接輸入附加點時刻向量,算法會使用連續(xù)擴(kuò)展公式在這些附加時刻生成附加點。與精細(xì)因子不同,這個選項會改變仿真步長,以使仿真時間步與用戶為附加輸出指定的時間相一致。圖5-28

Producespecifiedoutputonly:這個選項只在仿真起始時間、仿真結(jié)束時間和用戶指定的輸出時刻提供輸出。例如,如果仿真起始時間為0,仿真終止時間為60,如在Outputtimes文本框內(nèi)輸入[10:10:50],那么模型在如下時刻產(chǎn)生輸出:

0,10,20,30,40,50,60

這個選項也會改變仿真步長,以使時間步與用戶指定的輸出時間相一致。如果用戶想要比較不同的仿真結(jié)果,以確保模型能在同一時刻產(chǎn)生輸出,則可以使用這個選項。下面是對這三個選項產(chǎn)生的輸出結(jié)果進(jìn)行的比較。假設(shè)仿真結(jié)果在如下時刻產(chǎn)生輸出:

0,,5,,10

選擇Refineoutput選項,并指定精細(xì)因子為2,那么會在下列時刻產(chǎn)生輸出:

0,,,,5,,,,10

選擇Produceadditionaloutput選項,并指定時間向量為[0:10],則在下列時刻產(chǎn)生輸出:

0,1,2,3,4,5,6,7,8,9,10

當(dāng)然,也可能在其他的時刻產(chǎn)生輸出,這取決于變步長算法采用的步長大小。選擇Producespecifiedoutputonly選項,并指定時間向量為[0:10],則在下列時刻產(chǎn)生輸出:

0,1,2,3,4,5,6,7,8,9,10

通常,應(yīng)該指定輸出點為基本步長的整數(shù)倍,如:或[1:0.01:100],前一種方式比后一種方式精確度更高。 5.4輸出信號的顯示

通常,模型仿真的結(jié)果可以用數(shù)據(jù)的形式保存在文件中,也可以用圖形的方式直觀地顯示出來。對于大多數(shù)工程設(shè)計人員來說,查看和分析結(jié)果曲線對于了解模型的內(nèi)部結(jié)構(gòu),以及判斷結(jié)果的準(zhǔn)確性具有重要意義。Simulink仿真模型后,可以用下面幾種方法繪制模型的輸出軌跡:

將輸出信號傳送到Scope模塊或XYGraph模塊;

使用懸浮Scope模塊和Display模塊;

將輸出數(shù)據(jù)寫入到返回變量,并用MATLAB的繪圖命令繪制曲線;

將輸出數(shù)據(jù)用ToWorkspace模塊寫入到工作區(qū),并用MATLAB的繪圖命令繪制結(jié)果曲線。

5.4.1Scope模塊和XYGraph模塊的使用

顯然,Scope模塊是示波器模塊,它與實驗室中使用的示波器具有類似的功能,用戶可以在仿真運(yùn)行期間打開Scope模塊,也可以在仿真結(jié)束后打開模塊觀察輸出軌跡。

Scope模塊顯示對應(yīng)于仿真時間的輸入信號,它可以有多個坐標(biāo)軸系(即每個輸入端口對應(yīng)于一個坐標(biāo)軸),所有的坐標(biāo)軸系都對應(yīng)獨立的y軸,但x軸的時間范圍是相同的,用戶可以調(diào)整需要顯示的時間范圍和輸入值范圍。當(dāng)用戶運(yùn)行模型仿真時,雖然Simulink會把結(jié)果數(shù)據(jù)寫入到相應(yīng)的Scope中,但它并不打開Scope窗口,若用戶在仿真結(jié)束后打開Scope窗口,則示波器窗口會顯示Scope模塊的輸入信號。如果信號是連續(xù)的,則Scope會生成點-點的曲線;如果信號是離散的,則Scope會生成階梯狀曲線。此外,用戶還可以在仿真運(yùn)行期間移動Scope窗口或改變窗口的大小,或更改Scope窗口的參數(shù)值。

Scope模塊提供的工具欄按鈕可以縮放被顯示的數(shù)據(jù),保存此次仿真的坐標(biāo)軸設(shè)置,限制被顯示的數(shù)據(jù)量,把數(shù)據(jù)存儲到工作區(qū)等。

圖5-29說明了Scope窗口中工具欄按鈕的不同功能。圖5-29注意:在用戶創(chuàng)建的庫模塊中不能使用Scope模塊。用戶可以提供帶有輸出端口的庫模塊,模塊的輸出端口可以與顯示內(nèi)部數(shù)據(jù)的示波器相連。

用戶可以在Scope窗口中單擊鼠標(biāo)右鍵打開示波器的Y軸設(shè)置對話框,在這個對話框內(nèi)用戶可以更改Y軸顯示范圍的最大值和最小值。此外,單擊窗口工具欄中的“示波器參數(shù)”按鈕,也可以更改示波器的參數(shù)設(shè)置。圖5-30說明了設(shè)置示波器參數(shù)的方式。圖5-30XYGraph模塊是Simulink中Sinks模塊庫內(nèi)的模塊,該模塊利用MATLAB的圖形窗口繪制信號的X-Y曲線。這個模塊有兩個標(biāo)量輸入,它把第一個輸入作為X軸數(shù)據(jù),第二個輸入作為Y軸數(shù)據(jù),X軸和Y軸的坐標(biāo)范圍可以在模塊的參數(shù)對話框內(nèi)設(shè)置,超出指定范圍的數(shù)據(jù)在圖形窗口中不顯示。此外,如果模型中有多個XYGraph模塊,則Simulink在仿真的起始時刻會為每個XYGraph模塊打開一個圖形窗口。

圖5-31是一個使用Scope模塊和XYGraph模塊顯示輸出曲線的簡單模型范例。圖5-31(a)(b)圖5-325.4.2懸浮Scope模塊和Display模塊的使用

懸浮Scope模塊也是一個可以顯示一個或多個信號的示波器模塊,用戶可以從Simulink的Sinks庫中把Scope模塊拷貝到模型中,并按下“懸浮示波器”按鈕設(shè)置懸浮示波器,或者直接從Sinks庫中把FloatingScope模塊拷貝到模型窗口中。

懸浮器件是不帶輸入端口的模塊,它可以在仿真過程中顯示任何一個被選擇的信號,懸浮示波器通過坐標(biāo)軸系周圍的藍(lán)框來辨別。為了在仿真過程中使用懸浮示波器,應(yīng)首先打開示波器窗口,若要顯示某個輸入信號線上的信號,可選擇這個線,在按下Shift鍵的同時選擇其他的信號,可以同時顯示多個信號。圖5-33中的模型使用一個懸浮示波器在兩個窗口中同時顯示兩個輸入信號,選擇SignalGenerator模塊產(chǎn)生并傳遞信號的線,并選擇懸浮示波器中下面的示波器窗口,這時單擊模型窗口中的“啟動仿真”按鈕,Simulink會在用戶所選擇的示波器窗口中顯示信號波形。圖5-33用戶可以單擊懸浮示波器工具欄中的“信號選擇”按鈕來打開SignalSelector對話框,如圖5-34所示。另一種打開SignalSelector對話框的方式是,先在懸浮示波器打開的情況下運(yùn)行模型仿真,然后用鼠標(biāo)右鍵單擊懸浮示波器窗口,從彈出菜單中選擇SignalSelection命令。信號選擇對話框允許用戶選擇模型中任一位置的信號,包括未打開的子系統(tǒng)內(nèi)的信號。圖5-34在一個Simulink模型中可以有多個懸浮示波器,但是在指定的時刻一個示

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論