




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MATLAB程式設計進階篇常微分方程式,張智星.tw.tw/jang清大資工系多媒體檢索實驗室,11-1ODE指令列表,MATLAB用於求解常微分方程式的指令:,ODE指令列表,指令項目繁多,最主要可分兩大類適用於Nonstiff系統一般的常微分方程式都是Nonstiff系統直接選用ode45、ode23或ode113來求解適用Stiff系統速率(即微分值)差異相常大使用一般的ode45、ode23或ode113來求解,可能會使得積分的步長(StepSizes)變得很小,以便降低積分誤差至可容忍範圍以內,會導致計算時間過長專門對付Stiff系統的指令,例如ode15s、ode23s、ode23t及ode23tb,提示,使用Simulink來求解常微分方程式Simulink是和MATLAB共同使用的一套軟體可使用拖拉的方式來建立動態系統可直接產生C程式碼或進行動畫顯示功能非常強大,11-2ODE指令基本用法,使用ODE指令時,必須先將要求解的ODE表示成一個函式輸入為t(時間)及y(狀態變數,StateVariables)輸出則為dy(狀態變數的微分值)ODE函式的檔名為odeFile.m,則呼叫ODE指令的格式如下:t,y=solver(odeFile,t0,t1,y0);t0,t1是積分的時間區間y0代表起始條件(InitialConditions)solver是前表所列的各種ODE指令t是輸出的時間向量y則是對應的狀態變數向量,ODE指令基本用法,以vanderPol微分方程為例,其方程式為:化成標準格式可用向量來表示成一般化的數學式為一向量,代表狀態變數,ODE指令基本用法,假設=1,ODE檔案(vdp1.m)可顯示如下:typevdp1.mfunctiondy=vdp1(t,y)mu=1;dy=y(2);mu*(1-y(1)2)*y(2)-y(1);有了ODE檔案,即可選用前述之ODE指令來求解,ODE指令基本用法範例-1(I),在=1時,vanderPol方程式並非Stiff系統,所以使用ode45來畫出積分的結果範例11-1:odeBasic01.m,ode45(vdp1,025,33);,ODE指令基本用法範例-1(II),0,25代表積分的時間區間,33則代表起始條件(必須以行向量來表示)因為沒有輸出變數,所以上述程式執行結束後,MATLAB只會畫出狀態變數對時間的圖形,ODE指令基本用法範例-2(I),要取得積分所得的狀態變數及對應的時間,可以加上輸出變數以取得這些資料範例11-2:odeGetData01.m,t,y=ode45(vdp1,025,33);plot(t,y(:,1),t,y(:,2),:);xlabel(Timet);ylabel(Solutiony(t)andy(t);legend(y(t),y(t);,ODE指令基本用法範例-2(II),ODE指令基本用法範例-3(I),也可以畫出及在相位平面(PhasePlane)的運動情況範例11-3:odePhastPlot01.m,t,y=ode45(vdp1,025,33);plot(y(:,1),y(:,2),-o);xlabel(y(t);ylabel(y(t);,ODE指令基本用法範例-3(II),當值越來越大時,vanderPol方程式就漸漸變成一個Stiff的系統,此時若要解此方程式,就必須改用專門對付Stiff系統的指令,ODE指令基本用法範例-4(I),將值改成1000,ODE檔案改寫成(vdp2.m):typevdp2.mfunctiondy=vdp2(t,y)mu=1000;dy=y(2);mu*(1-y(1)2)*y(2)-y(1);,ODE指令基本用法範例-4(II),選用專門對付Stiff系統的ODE指令,例如ode15s,來求解此系統並作圖顯示範例11-4:ode15s01.m,t,y=ode15s(vdp2,03000,21);subplot(2,1,1);plot(t,y(:,1),-o);xlabel(Timet);ylabel(y(t);subplot(2,1,2);plot(t,y(:,2),-o);xlabel(Timet);ylabel(y(t);%注意單引號的重覆使用,ODE指令基本用法範例-4(III),由上圖可知,的變化相當劇烈(超過),這就是Stiff系統的特色,ODE指令基本用法範例-5(I),若要畫出二維平面相位圖,可以使用下列範例:範例11-5:ode15s02.m若要產生在某些特定時間點的狀態變數值,則呼叫ODE指令的格式可改成:t,y=solver(odeFile,t0,t1,tn,y0);其中t0,t1,tn即是特定時間點所形成的向量,t,y=ode15s(vdp2,03000,21);subplot(1,1,1);plot(y(:,1),y(:,2),-o);xlabel(y(t);ylabel(y(t),ODE指令基本用法範例-5(II),11-3ODE指令的選項,ODE指令可以接受第四個輸入變數,代表積分過程用到的各種選項(Options),此種ODE指令的格式為:t,y=solver(odeFile,t0,tn,y0,options);其中options是由odeset指令來控制的結構變數結構變數即包含了積分過程用到的各種選項odeset的一般格式如下:options=odeset(name1,value1,name2,value2,)其欄位name1的值為value1,欄位name2的值為value2,依此類推未被設定的欄位,其欄位值即為預設值,ODE指令的選項,也可以只改變一個現存的options結構變數中,某個欄位的值,其格式如下:newOptions=odeset(options,name,value);若要讀出某個欄位的值,可用odeget,其格式如下:value=odeget(otpions,name);其中name為欄位名稱,value即為對應的欄位值當使用odeset指令時,若無任何輸入變數,則odeset會顯示所有的欄位名稱及欄位值,並以大括號代表預設值,ODE指令的選項,odesetAbsTol:positivescalarorvector1e-6RelTol:positivescalar1e-3NormControl:on|offNonNegative:vectorofintegersOutputFcn:function_handleOutputSel:vectorofintegersRefine:positiveintegerStats:on|offInitialStep:positivescalarMaxStep:positivescalarBDF:on|offMaxOrder:1|2|3|4|5Jacobian:matrix|function_handleJPattern:sparsematrixVectorized:on|offMass:matrix|function_handleMStateDependence:none|weak|strongMvPattern:sparsematrixMassSingular:yes|no|maybeInitialSlope:vectorEvents:function_handle,由odeset產生的ODE選項,由odeset產生的ODE選項,若F(t,y,Jacobian)傳回,若F(,JPattern)傳回,,且,由odeset產生的ODE選項,常用到的欄位來進行說明,f在積分誤差容忍度方面,每一次積分所產生的局部誤差e(i),必須滿足下列方程式:max(RelTol*,AbsTol(i)其中i代表第i個狀態變數降低RelTol及AbsTol來求得更精確的積分結果,範例-1(I),範例11-6:odeRelTol01.m,subplot(2,1,1);ode45(vdp1,025,33);title(RelTol=0.01);options=odeset(RelTol,0.00001);subplot(2,1,2);ode45(vdp1,025,33,options);title(RelTol=0.0001);,範例-1(II),第一個圖所使用的相對誤差值是0.01(預設值),第二個圖所使用的相對誤差值是0.00001,因此我們得到較細密的點,但所花的計算時間也會比較長,積分輸出方面說明,積分輸出的相關處理方面選用一個OutputFcn當ODE指令沒有輸出變數時,此輸出函式OutputFcn會被MATLAB呼叫OutputFcn的預設值是”odeplot”,其功能為畫出所有的狀態變數其它可用的函式odephas2:畫出2-D的相位平面(PhasePlane)odephas3:畫出3-D的相位平面odeprint:隨時在指令視窗印出計算結果,積分輸出方面說明,以Lorenz渾沌方程式(LorenzChaoticEquation)為例typelorenzOde.mfunctiondy=lorenzOde(t,y)%LORENZODE:ODEfileforLorenzchaoticequationIGMA=10.;RHO=28;BETA=8./3.;A=-BETA0y(2)0-SIGMASIGMA-y(2)RHO-1;dy=A*y;,範例-2,使用ode45對Lorenz渾沌方程式進行數值積分範例11-7:odeLorenz01.m上列圖中,共有三條曲線,代表三個狀態變數隨時間變化的圖形,ode45(lorenzOde,010,205-5);,範例-3,上述範例畫三度空間之相位圖形範例11-8:odeLorenz02.m圖形中只出現一條曲線,此曲線代表以三個狀態變數為座標、以時間為參數的一條三度空間中的曲線,options=odeset(OutputFcn,odephas3);%使用odephas3進行繪圖ode45(lorenzOde,010,205-5,options);,提示,要觀看Lorenz渾沌方程式隨時間而變的動畫,可在MATLAB指令視窗下直接輸入lorenz指令,範例-4(I),假設OutputFcn設成“myfunc”:options=odeset(OutputFcn,myfunc)ODE指令會呼叫myfunc(tspan,y0,init)讓myfunc進行各種初始化動作積分步驟中,ODE指令會持續呼叫status=myfunc(t,y)若status=1,則停止積分積分結束時,ODE指令會呼叫myfunc(,done),讓myfunc進行收尾動作OutputSel可指定要傳送到OutputFcn的狀態變數之元素,範例-4(II),只要傳送第一及第三個Lorenz渾沌方程式的狀態變數至odeplot範例11-9:odeOutputSelect01.m,options=odeset(OutputSel,1,3)%只畫出第一和第三個狀態變數ode45(lorenzOde,010,205-5,options);,範例-5(I),Refine欄位可以使用內差法來增加輸出狀態變數的密度,以得到較平滑的輸出曲線用Refine欄位使ode23的輸出點個數增為原先三倍:範例11-10:odeRefine01.m,subplot(2,1,1);ode23(vdp1,025,33);subplot(2,1,2);options=odeset(Refine,3);ode23(vdp1,025,33,options);,範例-5(II),範例-6,當Stat=on時,ODE指令會在執行完畢後顯示計算過程的各種統計數字範例11-11:odeShowStats01.m71successfulsteps10failedattempts487functionevaluations,t,y=ode45(vdp1,025,33,odeset(Stat,on);,範例-7,相同的統計數字,也可由ODE指令的第三個輸出變數傳回範例11-12:odeShowStats02.ms=7110487000,t,y,s=ode45(vdp1,025,33);s,說明,MaxStep及InitialStep欄位可用來調整最大積分步長及起始積分步長一般而言,不必去調整這兩個數值,因為ODE指令本身就具有步長自動調適功能若要產生更多輸出點,可直接調整Refine欄位值。調整MaxStep雖然可以達到同樣效果,但是計算時間可能會大幅增加如果積分結果不甚準確,請勿先調降MaxStep,您應先調降RelTol及AbsTol。調降MaxStep是最後的步驟,11-4ODE檔案的進階用法,更進一步介紹ODE檔案的進階用法,使ODE指令能夠迅速且準確地算出積分結果可將tspan(積分時間範圍)、y0(起始值)及options(ODE參數)置於ODE檔案中,這些變數必須能由ODE檔案傳回,其格式為:tspan,y0,options=odeFile(,init)假設odeFile即是我們的ODE檔案且odeFile滿足上述要求,則可以直接呼叫ODE指令如下:t,y=solver(odeFile)其中solver為前述的任一個ODE指令,它可由odeFile直接得到tspan、y0及options等積分所需的資訊,ODE檔案的進階用法範例-1(I),以前述的vanderPol為例,若要能夠傳回tspan、y0及options,vdp1.m須改寫如下(vdp3.m):typevdp3.mfunctionoutput1,output2,output3=vdp3(t,y,flag)ifstrcmp(flag,)mu=1;output1=y(2);mu*(1-y(1)2)*y(2)-y(1);%dy/dtelseifstrcmp(flag,init),output1=0;25;%Timespanoutput2=3;3;%Initialconditionsoutput3=odeset;%ODEoptionsend,ODE檔案的進階用法範例-1(II),範例11-13:odeAdvanced01.m,ode45(vdp3),ODE檔案的進階用法範例-2(I),vanderPol的微分方程式有一個參數,希望從
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 区县医院面试题及答案
- 药库测试试题及答案
- 呼吸内科临床重点专科
- 白内障护理查房
- 2025年 仓储管理员中级考试练习试卷附答案
- 培训学校年终汇报
- 小蚂蚁手工课课件
- 车展新能源技术研讨会举办合同
- 生态公园场地租赁及环保教育合作合同
- 艺术比赛选手成绩PK合同
- 优2023年医用X射线诊断与介入放射学 辐射安全考核试题库含答案
- 《桥小脑角占位》
- 甘肃省苹果产业发展现状、问题及对策苹果产业的现状及对策
- 培训MSDS专业知识课件
- 夜空中最亮的星二部合唱简谱
- 广东省佛山市南海区2021-2022学年六年级下学期数学学科核心素养水平抽样调研试卷
- YC/T 246-2008烟草及烟草制品烟碱的测定气相色谱法
- 钢结构施工检查记录表格
- 桥梁施工质量控制要点(PPT)
- 一二年级看图说话写话:过河 教学课件
- 售后服务管理制度与工作流程
评论
0/150
提交评论