




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
控制系統仿真與CAD教材:《控制系統仿真與CAD》王燕平
——高等教育“十二五”規劃教材主講教師:閆晶晶聯系方式:yanjingjing2009@163.com公用郵箱:hngydxdqgcxy@163.com(20130901)計算機輔助設計(Computer-AidedDesign)2本課程主要內容第1章
控制系統仿真及工具軟件概述第2章控制系統的數學描述第3章控制系統分析第4章控制系統設計與仿真第5章控制系統CAD-Simulink基礎第1章
控制系統仿真及工具軟件概述控制系統及仿真軟件
MATLAB的操作與使用數值計算與矩陣運算程序、文件和函數控制系統是指由控制主體、控制客體和控制媒體組成的具有自身目標和功能的管理系統。1.1控制系統及仿真軟件概述2023/2/4運動體多傳感器控制器運動空間構建導航與控制…………信息濾波與融合4仿真軟件發展概述仿真技術引起該領域各國學者、專家們的重視,建立起國際仿真委員會,該公司于1967年通過了仿真語言規范。仿真語言CSMP(computersimulationmodelingprogram)應該屬于建立在該標準上的最早的專用仿真語言。中科院沈陽自動化研究所在1988年推出了該語言的推廣版本
CSMP-C。51.1控制系統及仿真軟件概述6系統仿真領域需求:
最高水平,最實用的軟件或語言介紹仿真技術,能直接采用該語言解決自己的問題。實踐證明,MATLAB就是這樣的仿真軟件,由于它本身卓越的功能,已經使得它成為自動控制、航空航天、汽車設計等諸多領域仿真的首選語言。所以在本課程中將介紹基于MATLAB/Simulink的控制系統仿真與設計方法及其應用。1.1控制系統及仿真軟件概述7本課程的主要研究內容:1.1控制系統及仿真軟件概述分析系統的數學模型編寫程序運算語句得到關于系統輸出和中間變量的有關數據、曲線實現對控制系統性能指標的分析與設計。8本課程的主要研究內容:1.1控制系統及仿真軟件概述本章主要說明控制系統模型和控制系統仿真等基本概念,并詳細介紹控制系統仿真工具軟件MATLAB。9
實際系統的物理模型:根據相似原理,把真實系統按比例放大或縮小制成的模型,其狀態變量與原系統完全相同。1.1.1 控制系統模型
10數學模型:用數學方程(微分方程、傳遞函數、狀態方程)或信號流程圖、結構圖來描述系統性能的模型。1.1.1 控制系統模型11
仿真模型:原始控制系統的數學模型不能用來直接對系統進行仿真,應該將其轉換為能在計算機中對系統進行仿真的模型。1.1.1 控制系統模型傳遞函數模型狀態空間模型動態結構圖模型數字控制器模型12本課程的主要研究內容:1.1控制系統及仿真軟件概述本章主要說明控制系統模型和控制系統仿真等基本概念,并詳細介紹控制系統仿真工具軟件MATLAB。13將實際系統抽象為數學模型,稱為建模問題1.1.2 控制系統仿真
控制系統仿真研究對象:控制系統仿真過程可劃分為三個基本活動:建模,模型實現和模型實驗
1.1.2 控制系統仿真
控制系統仿真研究對象:控制系統仿真過程可劃分為三個基本活動:建模,模型實現和模型實驗
將數學模型轉換為可在計算機上運行的仿真模型,稱為模型實現傳遞函數模型狀態空間模型動態結構圖模型數字控制器模型14模型試驗傳遞函數模型狀態空間模型動態結構圖模型數字控制器模型1.1.2 控制系統仿真
控制系統仿真研究對象:控制系統仿真過程可劃分為三個基本活動:建模,模型實現和模型實驗。
15
通常,采用計算機來實現控制系統仿真的過程以下幾個步驟:
一、根據仿真目的確定仿真方案
二、建立控制系統的數學模型
三、建立控制系統的仿真模型四、用合適的開發語言編制控制系統的仿真程序五、在計算機上進行仿真實驗并輸出仿真結果1.1.2 控制系統仿真
1617系統仿真領域需求:
最高水平,最實用的軟件或語言介紹仿真技術,能直接采用該語言解決自己的問題。實踐證明,MATLAB就是這樣的仿真軟件,由于它本身卓越的功能,已經使得它成為自動控制、航空航天、汽車設計等諸多領域仿真的首選語言。所以在本課程中將介紹基于MATLAB/Simulink的控制系統仿真與設計方法及其應用。1.1控制系統及仿真軟件概述語言簡單,使用方便
181.1.3
MATLAB的語言特點例:矩陣乘法C語言程序(核心部分)for(i=0:i<n;i++){for(j=0;j<m;j++){c[i][j]=0;for(k=0;k<p
;
k++)c[i][j]+=a[i][k]*b[k][j];}}MATLAB實現:C=A*B功能強大,適用范圍廣在數值計算方面,MATLAB的內容幾乎涵蓋了所有的數學知識門類;有強大的符號運算功能;
十分方便的繪圖功能。擴充能力和可開發性很強MATLAB軟件除了有基本部分,還有專業擴展部分-工具箱(toolbox
);MATLAB的庫函數豐富,且可擴充。191.1.3
MATLAB的語言特點1.1.4MATLAB的控制產品MATLAB中與控制系統設計分析相關6個基礎工具箱控制系統工具箱(ControlSystemToolbox)系統辨識工具箱(SystemIdentificationToolbox)模糊邏輯工具箱(FuzzyLogicToolbox)魯棒控制工具箱(RobustControlToolbox)模型預測控制工具箱(ModelPredictiveControlToolbox)航空航天工具箱(AerospaceToolbox)20
Simulink為控制系統的仿真提供了一種可視化的編程方式,被廣泛應用于控制理論和數字信號處理的復雜仿真和設計。
MATLAB的控制產品可以完成的主要功能:使用經典和狀態空間方法設計單回路和多回路控制系統使用GUI或命令行函數分析系統響應和性能在Simulink模型中手動或自動調整SISO回路優化控制系統性能以滿足時間和頻率要求將線性模型表示或轉換為傳遞函數、狀態空間、零極點增益和頻率響應數據對象在模型表示間轉換,使連續時間模型離散化計算高階系統的低階近似值等211.1.4MATLAB的控制產品1.2MATLAB的操作與使用在公用郵箱中按照“說明”下載MATLAB安裝包并進行安裝。雙擊打開MATLAB的桌面平臺(Desktop),在默認情況下的桌面平臺包含幾個主要窗口,分別是MATLAB主窗口、命令窗口(CommandWindow)、當前目錄窗口(CurrentDirectory)、工作空間管理窗口(Workspace)、歷史窗口(CommandHistory)等;22工作空間窗口中顯示目前內存中所有的MATLAB變量的變量名、數學結構、字節數以及類型231.2.1MATLAB的工作空間(Workspace)其中等號右邊的表達式可由操作符或其它字符、函數和變量組成,它可以是MATLAB允許的數學或矩陣運算,也可以包含MATLAB下的函數調用;等號左邊的變量名是給右邊表達式返回結果所賦予的名字,該變量將出現在工作空間。如果左邊的變量名為默認,則返回值自動賦給系統默認變量ans。MATLAB語句的一般格式為:變量名=表達式;241.2.2MATLAB的命令窗口(CommandWindow)
1.2.2MATLAB的命令窗口(CommandWindow)
25在命令窗口的提示符號“>>”后輸入命令,并按“Enter”鍵,則MATLAB立即執行命令,完成相應的運算,顯示結果或繪制圖形。
,和;的差別
1.2.3MATLAB的程序編輯器
MATLAB不僅可以以交互式的命令行的方式工作,也可以進行控制流的程序設計,即將一段程序編寫在以.m為擴展名的M文件內。M文件的打開方法:
單擊
File-New-M-file/Script26MATLAB的M文件的兩種形式命令式文本文件編制相當于在命令窗口中逐行輸入命令,變量不需要預先定義,也可以通過文本編輯對其進行查看或修改。%P15函數(Function)文件
函數文件的功能是建立一個函數,且這個文件能夠與MATLAB的庫函數一樣被調用。函數文件的第一行必為function。函數文件中定義的變量為局部變量,只在函數內部起作用。%leapyear
27
1.2.3MATLAB的程序編輯器
幫助系統:聯機幫助系統;
命令窗口查詢幫助系統;
聯機演示系統。聯機幫助系統(1)單擊MATLAB主窗口工具條中的 按鈕。
(2)選擇下拉菜單Help/ProductHelp。
(3)在命令窗口執行helpwin,helpdesk
或doc。(4)快捷鍵<F1>進入簡潔版的幫助界面。281.2.4MATLAB的幫助文件291.2.4MATLAB的幫助文件幫助導航面板幫助顯示面板初學者最好的入門教程:
Contents-MATLAB-GettingStartedContents-MATLAB-Demos-GettingStarted在學習過程中,可以隨時通過選擇某條命令后,點擊右鍵,選擇HelpOnSelection來打開簡潔版幫助窗口界面,查詢該命令的功能及使用方法。301.2.4MATLAB的幫助文件311.2.4MATLAB的幫助文件命令窗口查詢幫助系統
在命令窗口通過幫助命令對特定的內容進行快速查詢。這些幫助指令包括help系列、lookfor系列和其他常用幫助命令。
help系列的幫助命令有help,help+函數(類)名,helpwin及helpdesk,其中后兩個命令是用來調用聯機幫助窗口的。321.2.4MATLAB的幫助文件
33例:若在命令窗口中直接輸入“helpabs”,執行后會列出函數abs()的說明,結果如下:
ABSAbsolutevalue.
ABS(X)istheabsolutevalueoftheelementsofX.
WhenXiscomplex,ABS(X)isthecomplexmodulus(magnitude)oftheelementsofX.
Seealsosign,angle,unwrap,hypot1.2.4MATLAB的幫助文件聯機演示系統
對于MATLAB或者其中某個工具箱的初學者,最好的學習方法之一就是查看MATLAB的聯機演示系統。
進入方法:(1)MATLAB主窗口菜單-Help-Demos(2)在命令窗口輸入demos命令(3)在幫助頁面上選中Demos選項均可進入MATLAB幫助系統的主演示頁面
341.2.4MATLAB的幫助文件35演示系統提供多種演示類型,通過研究它們來學習MATLAB是一種十分有效的方式。1.2.4MATLAB的幫助文件1.3數值計算與矩陣運算36數值計算功能是MATLAB的基礎,本節將簡要介紹1.3.1MATLAB的數值類型1.3.2矩陣運算1.3.3符號運算37MATLAB中的基本數據類型主要有數字、字符、矩陣、邏輯型、單元型數據及結構型數據等,這里只介紹幾個常用類型。變量與常量MATLAB不要求事先對要使用的變量進行定義或聲明,也不需要指定變量的類型,MATLAB會自動根據所賦予變量的值或對變量所進行的操作來識別變量的類型。
在賦值過程中如果賦值變量已經存在,則MATLAB將使用新值代替舊值,并以新值類型代替舊值類型。1.3.1MATLAB的數值類型
MATLAB變量命名規則
(1)變量名區分字母大小寫。
(2)變量名不超過31個字符,且字符之間不能有空格。
(3)變量名必須以字母打頭,之后可以是任意字母、數字或下畫線。變量名不允許使用標點符號。
3839在命令窗口中執行的命令和運行M文件所產生的變量信息全部存放在當前的工作空間(Workspace)中;Who;Whos永久變量含義ans計算結果的默認變量名eps機器零閾值,浮點運算的相對精度Inf無窮大,如1/0i或j虛數單位pi圓周率πNaN非數變量(NotaNumber),如0/0、∞/∞nargin函數輸入變量數目,用于M文件程序設計nargout函數輸出變量數目,用于M文件程序設計realmax最大正實數realmin最小正實數MATLAB語言預先定義了一些常量(或稱永久變量)表1-1常用的永久變量40(1)永久變量不能用clear命令清除,所以稱為永久變量。(2)永久變量不響應Who,Whos命令。
41(3)永久變量的變量名如果沒有被賦值,那么永久變量將取表1-1中所給定的值。
4243(4)若賦值,則默認值將被所賦的值臨時覆蓋。如果使用clear命令清除MATLAB內存中的變量,或者MATLAB的命令窗口被關閉后重新啟動,不管永久變量曾經被賦值與否,所有的永久變量將被重新設置為默認值。44(5)在遵循IEEE算法規則的計算機上,被0除是允許的。它不會導致程序執行的中斷,系統會給出警告信息,且用一個特殊的名稱(如Inf,NaN)記述。數字和算術表達式
對于簡單的數字運算,可以直接用表達式語句和賦值語句的形式在MATLAB命令窗口輸入。
45MATLAB語言的算術運算符可按優先級由低到高分為五級,
每一級的優先級相同,運算時從左向右進行結合。如果要改變運算的優先級,可以用括號強制實現。各優先級所包含的運算符為:
(1)數組轉置符“.’”、數組冪符“.^”、
矩陣轉置符“’”、矩陣冪符“^”。
(2)標量加“+”、標量減“-”。
(3)數組乘法“.*”、數組右除“./”、數組左除“.\”、
矩陣乘法“*”、矩陣右除“/”、矩陣左除“\”。
(4)加法“+”、減法“-”。
(5)冒號運算符。
46[1,2,3;4+5,6,1;sin(pi/2),0,1]'*[0,1,2;9,1,2;4,3,2]+[0,1,2;9,1,2;4,3,2]矩陣的生成直接輸入法:從鍵盤上直接輸入矩陣。注意:
①輸入矩陣時要以“[]”為
其標識符號,矩陣的所有元
素必須都在括號內。
②矩陣同行元素之間由空格
或逗號分隔,行與行之間用分
號或回車鍵分隔。
③矩陣大小不需要預先定義。
④矩陣元素可以是運算表達式。
⑤若“[]”中無元素表空矩陣。471.3.2矩陣運算
介紹矩陣的生成、矩陣的基本運算和矩陣的數組運算。
在MATLAB語言中冒號的作用是最為豐富的。
首先,可以用冒號來定義行向量。
例如可在命令窗口輸入:
a=1:0.5:4
返回結果為:a=1.00001.50002.00002.50003.00003.50004.0000
48其次,通過使用冒號,可以截取指定矩陣中的一部分
例如可在命令窗口輸入:
A=[123;456;789],B=A(1:2,:)
返回結果為:
A=
123
456
789
B=
123
456
通過上例可以看到B是由矩陣A的1到2行和相應的所有列的元素構成的一個新的矩陣。在這里,冒號代替了矩陣A的所有列。
49
外部文件讀入法
MATLAB語言允許用戶調用在MATLAB環境之外定義的矩陣。可以利用任意的文本編輯器編輯所要使用的矩陣,通過菜單File/ImportData…來導入到MATLAB工作空間。
另外也可以利用load函數,其調用方法為:load+文件名[參數]。
Load函數將會從文件名所指定的文件中讀取數據,并將輸入的數據賦給以文件名命名的變量。50
例如:事先在記事本中建立文件:1,2,3
2,3,4
并以data1.txt保存在當前工作目錄下。
在MATLAB命令窗口中輸入:
loaddata1.txt%載入文件中的數據至MATLAB工作空間
data1
%查看工作空間中的數據
運行后結果為:
data1=
123
23451特殊矩陣的生成
對于一些比較特殊的矩陣,MATLAB提供了一些函數用于生成這些矩陣。
zeros(m) %生成m階全0矩陣
eye(m) %生成m階單位矩陣
ones(m) %生成m階全1矩陣
rand(m) %生成m階均勻分布的隨機陣
randn(m)%生成m階正態分布的隨機矩陣
52矩陣的基本數學運算
矩陣的基本數學運算包括矩陣的四則運算、與常數的運算、逆運算、行列式運算、秩運算、特征值運算等基本函數運算。四則運算
矩陣的加、減、乘運算符:“+,-,*”
矩陣的除法:左除“\”和右除“/”
在傳統的MATLAB算法中,右除是先計算矩陣的逆再相乘,而左除則不需要計算逆矩陣直接進行除運算。通常右除要快一點,但左除可避免被除矩陣的奇異性所帶來的麻煩。在MATLAB7中兩者的區別不太大。53常數與矩陣的運算
常數與矩陣的運算即是同該矩陣的每一元素進行運算。但需注意進行數除時,常數通常只能做除數。基本函數運算
常用的基本函數運算主要有以下幾個:
det(a) %求矩陣a的行列式
eig(a) %求矩陣a的特征值
inv(a)或a^(-1)
%求矩陣a的逆矩陣
rank(a) %求矩陣a的秩
trace(a) %求矩陣a的跡(對角線元素之和)54例如可在命令窗口輸入:
a=[21-3-1;3107;-124-2;10-15];
a1=det(a);a2=det(inv(a));
a1*a2
返回結果為:ans=1
注意:命令行后加“;”表示該命令執行但不顯示
執行結果。55
矩陣的數組運算
矩陣對應元素之間的運算,也稱為“點”運算。
56基本數學運算
(1)數組的加、減與矩陣的加、減運算完全相同。
(2)數組的乘除法是指兩同維數組對應元素之間的乘除法,它們的運算符為“.*”和“./”或“.\”。(3)矩陣的數組運算中還有冪運算(.^)、指數運算(exp)、對數運算(log)、和開方運算(sqrt)等。數組運算實質上就是針對矩陣內部的每個元素進行的。例如可在命令窗口輸入:
a=[123;456;789];b=a^2,c=a.^2
返回結果為:
b=
303642
668196
102126150
c=
149
162536
496481
可見矩陣的冪運算與數組的冪運算有很大的區別。57表1-2常用邏輯函數
邏輯關系運算符號運算符功能函數名==等于eq~=不等于ne<小于lt>大于gt<=小于等于le>=大于等于ge&邏輯與and|邏輯或or~邏輯非not58說明:
①在關系比較中,若比較的雙方為同維數組,則比較的結果也是同維數組。當滿足比較關系時,對應值為1,否則為0。
②當比較的雙方中一方為常數,另一方為一數組,則比較的結果與數組同維。
③在算術運算、比較運算和邏輯與、或、非運算中,它們的優先級關系先后為:比較運算、算術運算、邏輯與或非運算。59例如可在命令窗口輸入:
a=[123;456;789];x=5;y=ones(3)*5;xa=x<=a
返回結果為:
xa=
000
011
111
若在命令窗口輸入:b=[010;101;001];ab=a&b
返回結果為:
ab=
010
101
001601.3.2符號運算61符號運算的基本操作
符號運算與數值運算的區別:數值運算中必須先對變量賦值,然后才能參與運算。而符號運算無須事先對獨立變量賦值,運算結果以標準的符號形式表達,但是符號變量必須預先定義。
字符串與符號變量、符號常量
①字符串
MATLAB用半角狀態下的單引號“''”來定義字符串。例在指令窗口輸入A='hello,thisisastring',回車執行后返回“A=hello,thisisastring”,此時在工作空間里觀察,或者用class(A)命令來返回對象A的數據類型為“char”,即字符型。62字符串對象也可以用于定義符號表達式,比如:f='sin(x)+5x',表達式中f為字符串名,sin(x)+5x為函數表達式,單引號里的內容可以是函數表達式,也可以是方程。
例如:
f1='a*x^2+b*x+c'%二次三項式
f2='a*x^2+b*x+c=0'%方程
f3='Dy+y^2=1'
%微分方程
對于這種方式定義的表達式或方程,在MATLAB工作空間中仍然顯示為字符格式。63
②符號變量
符號變量是內容可變的符號對象。它通常是指一個或幾個特定的字符。相關指令為sym()和syms(),sym是symbolic的縮寫,用于定義符號變量。
64例如:
a=sym('a'),b=sym('c')%定義單個符號變量
symsabcde %同時定義多個符號變量
顯見:當需要同時定義多個符號變量時,使用syms()更簡潔一些,可以用whos來查看所有變量類型。
③符號常量
當數值常量作為sym()的輸入參量時,就建立了一個符號對象--符號常量,符號常量雖然看上去是一個數值量,但已經是一個符號對象了。
例如:a=3/4;b='3/4';c=sym(3/4);d=sym('3/4');
用whos來查看所有變量類型:a為實雙精度浮點數值類型;b為實字符類型;c和d都是符號對象類型。65
④符號函數和符號方程
符號表達式是由符號常量、符號變量、符號函數運算符以及專用函數連接起來的符號對象。它包括:符號函數和符號方程。判斷看帶不帶等號。
例如:
symsxyz;f1=x*y/z;f2=x^2+y^2+z^2;f3=f1/f2;%符號函數
e1=sym('a*x^2+b*x+c')%符號函數e2=sym('sin(x)^2+2*cos(x)=1');
e3=sym('Dy-y=x')
%符號方程66符號矩陣的創建與修改
①創建符號矩陣
與數值矩陣不同,需要用MATLAB函數sym來創建矩陣,并用“''”標識
命令格式:A=sym('[]')。注意sym('[a,b;c,d]')與'[a,b;c,d]'的區別,后者只是定義了一系列字符串。67例如:在命令窗口輸入
“A=sym('[a,2*b;3*a,0]')”,
運行結果為:
A=
[a,2*b]
[3*a,0]
這就創建了一個符號矩陣。符號矩陣的每一行的兩端都有方括號,這是與數值矩陣的一個重要區別。
68
②符號矩陣的修改
直接修改,即在工作空間中找到要修改的矩陣,逐層雙擊打開后找到需要修改的值,直接修改。指令修改,用A(m,n)=‘new’或A1=subs(A,‘new’,‘old’)來修改。前者與普通數字矩陣的調用方法相同,后者將用新字符new代替矩陣A中的所有舊字符old。69例如:
A=sym('[a,2*b;3*a,0]')
A(2,2)='4*b' %把符號矩陣A中的第二行第二
列的元素用4*b代替
A1=subs(A,'c','b')%用新字符c代替矩陣A中的所有b
執行結果為:
A= [a,2*b]
[3*a,0]
A= [a,2*b]
[3*a,4*b]
A1=[a,2*c]
[3*a,4*c]
70符號運算
MATLAB中,符號計算表達式的運算符和基本函數,在形狀、名稱以及使用方法上,都與數值計算幾乎完全相同。下面主要介紹與符號計算相關的一些常用函數。71符號表達式的化簡
①collect函數——合并同類項
格式:R=collect(S)%以x為默認變量,返回系數
整理后的多項式
R=collect(S,v)%以v為指定變量,返回系數
整理后的多項式例如:
symsxy; %定義基本變量x,y
R1=collect((exp(x)+x)*(x+2))
%合并多項式中x的同
類項,exp為指數函數
R2=collect((x+y)*(x^2+y^2+1),y)%合并多項式中y的同類項
程序運行結果為:
R1=2*exp(x)+x*(exp(x)+2)+x^2
R2=y^3+x*y^2+(x^2+1)*y+x*(x^2+1)72
例如:
symsxyabt;
R1=expand((x-2)*(x-4)),R2=expand(cos(x+y)),
R3=expand(exp((a+b)^2)),
R4=expand([sin(2*t),cos(2*t)]),
程序運行結果為:
R1=x^2-6*x+8
R2=cos(x)*cos(y)-sin(x)*sin(y)
R3=exp(2*a*b)*exp(a^2)*exp(b^2)
R4=[2*cos(t)*sin(t),cos(t)^2-sin(t)^2]73②expand函數——展開符號表達式
格式:R=expand(S)
說明:對符號表達式S中每個因式的乘積進行展開。
例如:
symsxyab;
R1=factor(x^3-y^3),R2=factor([a^2-b^2,a^3+b^3])
R3=factor(sym('12345678901234567890'))
程序運行結果為:
R1=(x-y)*(x^2+x*y+y^2)
R2=[(a-b)*(a+b),(a+b)*(a^2-a*b+b^2)]
R3=2*3^2*5*101*3541*3607*3803*2796174③factor函數——符號表達式的因式分解
格式:factor(X)
說明:將系數為有理數的多項式(矩陣),表示成低階多項式相乘的形式,如果不能分解,則返回其本身。
④simple和simplify函數——符號表達式的化簡
格式:R=simple(S)或simplify(S)
例如:symsx;simple(cos(x)^2+sin(x)^2)
運行以后,從結果看出,simple比較這些不同函數的結果,最終把最少字符作為標準。75
符號表達式的計算
①符號表達式的極限
格式:limit(F,x,a)
%求當x→a時,表達式F的極限
limit(F,a)
%默認自變量趨于a的極限
limit(F)%默認自變量,默認a=0
limit(F,x,a,'left')、limit(F,x,a,'right')%取F的左或右極限
注意:對于極限不存在,返回NaN7677例如:symshnx
dc=limit((sin(x+h)-sin(x))/h,h,0)%按照導數的定義求sin的導數,結果為:dc=cos(x)
limit(1/x,x,0) %ans=NaN
limit(1/x,x,0,'left') %ans=-Inf
limit(1/x,x,0,'right') %ans=Inf
②符號表達式的微分
格式:diff(f)
%對缺省變量求f的微分
diff(f,v)
%對指定變量v求微分
diff(f,n)
%對默認變量求n階微分
diff(f,v,n)
%對指定變量v求f的n階微分78例如:symsax;f=sin(a*x);%定義函數f=sin(a*x)
df=diff(f) %對默認變量x求1階微分結果為:df=a*cos(a*x)
dfa=diff(f,a,2) %對指定變量a求f的2階微分結果為:dfa=-x^2*sin(a*x)③符號表達式的積分
格式:int(f)
%對f表達式的缺省變量求不定積分
int(f,v)
%對f表達式的v變量求不定積分
int(f,v,a,b)
%對f表達式的v變量在(a,b)區間求
定積分
findsym(f)
%可以找出f中的每個變量
注意:當函數的積分不存在時,Matlab將簡單地返回原來的積分表達式;當積分上限和積分下限缺省時為不定積分。79
例如:symsx;int(-2*x/(1+x^2)^2) %ans=1/(1+x^2)
int(x*log(1+x),0,1) %ans=1/4
int(log10(x)) %ans=(x*(log(x)-1))/log(10)
int(sin(x),x,-pi,pi)
%ans=0
80④符號函數的Taylor級數展開
格式:taylor(f,n,v)
%n階泰勒級數展開
另外,MATLAB提供了可以使用Taylor級數計數器的taylortool命令。
81該命令生成一圖形用戶界面,顯示默認函數f=x*cos(x)在區間[-2*pi,2*pi]內的圖形,同時顯示函數f的前7項Taylor級數和的圖形(在a=0附近)。通過更改f(x)項可以得到不同的函數圖形。通過改變相關的參量,利用taylortool('cos(x*sin(x))')或直接在打開的界面中修改相關參量,可得到如圖所示的界面。
82
⑤Fourier積分變換公式:格式:F=fourier(f)
%對符號單值函數f中的默認變量x計算fourier變換形式。默認的輸出結果F是變量ω的函數若f=f(ω),則fourier(f)返回變量為v的函數F=F(v)。
F=fourier(f,v)
%對符號單值函數f中的默認變量x計算fourier變換形式,F(v)F=fourier(f,u,v)
%令符號函數f為變量u的函數,而F為變量v的函數,計算fourier變換形式。83
例如:symsxwu;
f=exp(-x^2);F1=fourier(f)
g=exp(-abs(w));F2=fourier(g)
h=x*exp(-abs(x));F3=fourier(h,u)
執行結果為:
F1=pi^(1/2)/exp(w^2/4)
F2=2/(v^2+1)
F3=-(4*i*u)/(u^2+1)^2
84⑥ifourier函數
逆Fourier積分變換定義為:格式:f=ifourier(F)
%輸出參量f=f(x)為默認變量w的標量符號對象F的逆fourier積分變換,即F=F(w)→f=f(x)。若F=F(x),ifourier(F)返回變量t的函數,即F=F(x)→f=f(t)。
f=ifourier(F,u)
%使f為變量u的函數,即
f=ifourier(F,v,u)
%使F為變量v的函數,f為變量u的函數85
例如:symsawxtreal;
F=exp(-w^2/(4*a^2));f=ifourier(F);
f1=simple(f),
F=exp(-abs(x));f2=ifourier(F),
F=2*exp(-abs(w))-1;f3=ifourier(F,t)
執行結果為:
f1=abs(a)/(pi^(1/2)*exp(a^2*x^2))
f2=1/(pi*(t^2+1))
f3=2/(pi*(t^2+1))-dirac(t)
86
⑦Laplace函數
Laplace變換定義為: 。
格式:L=laplace(F)
%返回默認獨立變量t的符號表達式F的Laplace變換,函數返回默認變量為s的函數,即F=F(t)→L=L(s)。若F=F(s),則返回的變量為t。L=laplace(F,t)
%以t代替s為變量的Laplace變換
L=laplace(F,w,z)
%在指定自變量w和指定參變量z的情況下,計算符號函數F的Laplace變換。87例如:symstsax;
F=t^4; L1=laplace(F)
F=1/sqrt(s); L2=laplace(F)
F=exp(-a*t); L3=laplace(F,x)
執行結果為:
L1=24/s^5
L2=pi^(1/2)/t^(1/2)
L3=1/(a+x)
88⑧ilaplace函數,逆Laplace變換。
逆Laplace變換的定義為:格式:F=ilaplace(L)
%在默認自變量s和參變量t情況下,計算L(s)的laplace逆變換,即。
另:
F=ilaplace(L,y)%以y代替默認的t。
F=ilaplace(L,y,x)
%以x代替t,對y取積分。
89例如:
symssatxu
L=1/s^2;
F1=ilaplace(L)
L=1/(t-a)^2;F2=ilaplace(L)
symsareal;L=1/(u^2-a^2);
F3=simplify(ilaplace(L,x))
執行結果為:
F1=t
F2=x*exp(a*x)
F3=sinh(a*x)/a90
符號方程求解
①符號代數方程求解
Matlab符號運算能夠解一般的線性方程、非線性方
程、超越方程。線性方程的求解函數為solve。
調用格式如下:
solve(f)
%求一個方程f=0的解;
solve(f,‘t’
)
%對指定變量t求解,‘’可以忽略;t缺省時默認為x或最接近x的符號變量;
solve(f1,f2,…,fn)
%求n個方程的解。91例如:求解方程:ax^2+bx+c=0
輸入程序:f='a*x^2+b*x+c'; %定義符號方程
solve(f) %對缺省變量x求解
返回結果:ans=
-(b+(b^2-4*a*c)^(1/2))/(2*a)
-(b-(b^2-4*a*c)^(1/2))/(2*a)
92例如:解方程組輸入命令:[x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')
返回結果為:x=2/3,y=-1/2,z=5/693例如:解方程組輸入命令:[x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')
返回結果為:x=2/3,y=-1/2,z=5/6[x,y,z]=solve('x+y+z-1','x-y+z-2','2*x-y-z-1')②符號微分方程求解
符號微分方程求解指令:dsolve
格式:dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
說明:eq1,eq2,…為微分方程(組),可多至12個微分方程的求解;cond1,cond2,...為初始條件;v為指定自變量,默認時為t;微分方程的各階導數項以大寫字母D表示,如:y的一階導數 可表示為:Dy,
y的二階導數 可表示為:D2y,
y的n階導數 可表示為:Dny。94例如:求微分方程的解
在命令窗口輸入:y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')
運行返回結果為:y=cos(t)/exp(t)+sin(t)/exp(t)
若再輸入命令“ezplot(y)”,可進行符號函數繪圖。
951.4程序、文件和函數
Matlab不僅具有強大的數值處理和符號運算功能,而且可以像計算機高級語言一樣進行程序設計。用matlab編程語言編寫的程序以.m為擴展名,簡稱M文件。M文件的打開方法:
單擊
File-New-M-file/Script96
1.4.1m文件編程
M文件根據調用方式的不同分為命令文件和函數文件。命令式文件(又稱文本文件)特點:1、可以通過調用文件名來執行,逐條讀取和執
行命令;2、運行產生的變量都是駐留在MATLAB的工作空間中,除非用clear命令清除工作空間;3、可以通過其他編輯器來編寫m文件;
97在編輯/調試窗口中按順序輸入下面的命令語句:
%該文件用于順次求出從sin(1)到sin(10)的值。
fori=1:10
a=sin(i);
fprintf('sin(%d)=',i)
fprintf('%12.4f\n',a)
end
將該命令式文件以文件名sinvalue.m保存在MATLAB的work文件夾中(默認值),然后在命令窗口輸入sinvalue,即可運行sinvalue.m文件,結果為:
sin(1)=0.8415
sin(2)=0.9093
…
sin(10)=-0.544098%d讀取“,”后面的數值,并要求該數值必須為整數。%12.4f
讀取后面的數值,并要求輸出的結果占12個字符的位置,并保留4個有效數字。\n指換行。
函數式文件作用:實現參數傳遞特點:1、第一行為function;2、返回值可有可無;3、執行后只保留最后結果,不在工作空間中保留任何中間過程,所定義的變量也只在函數內部起作用,并隨著調用的結束而被清除。4、M函數必須由其它語句調用,不能直接鍵入一個文件名來運行一個M函數。99
MATLAB語言的函數文件包含以下幾個部分。
(1)函數題頭:指函數的定義行,在該行中定義函數名、輸入輸出變量列表等。函數文件的第一行總是以“function”引導的函數聲明行,一般格式為:
function[輸出變量列表]=函數名(輸入變量列表)(2)幫助信息索引行:函數幫助文本第一行,內容為該函數功能的大致描述,當使用lookfor命令查看該函數時,顯示該行。(3)詳細幫助信息:該部分提供函數的完整幫助信息,通過MATLAB的幫助系統查看函數的幫助信息時,顯示該部分。(4)函數體:指函數代碼段,是函數的主體部分。(5)注釋部分:是對函數體中各語句的解釋和說明文本,注釋語句以英文輸入狀態下的%引導。
100例如:編寫一個函數文件,來求一向量的平均值。
在MATLAB語言的編輯/調試窗口中輸入如下內容:
functiony=myaverage(x)%函數題頭
%MYAVERAGEMeanofvectorelements.%幫助信息索引行
%MYAVERAGE(X),whereXisavector,isthemeanof%詳細幫助信息
%vectorelements.Nonvectorinputresultsinanerror. %詳細幫助信息[m,n]=size(x); %函數主體,判斷輸入參數維數
if(~((m==1)|(n==1))) %m,n為臨時變量
disp(‘輸入必須是向量!’);%判斷輸入變量為矩陣顯示提示
return; %并結束函數文件的運行
end
y=sum(x)/length(x);%實際計算,臨時的函數變量
101
將該函數文件以myaverage.m為文件名保存在MATLAB的work文件夾中,若在命令窗口輸入“a=myaverage([12345678910])”,可調用函數文件,完成向量1~10平均值的計算,返回結果a=5.5000。
若在命令窗口輸入“myaverage([12345;678910])”,也可以調用函數文件,但由于輸入參數為矩陣,返回結果為程序中設置的提示信息:“輸入必須是向量!”。
102注意1、上述函數文件的五個組成部分,并不是所有的函數均需要。實際上,除了函數題頭是必須的以外,其它部分均可以省略。
注意2、在MATLAB語言中,存儲M函數時文件名應當與文件內主函數名一致。這是因為調用M文件時,系統查詢的是相應的文件而不是函數名,如果兩者不一致,這或者打不開目的文件,或者打開的是其他文件。鑒于這種查詢方式與其他程序設計語言不同,所以建議在儲存M函數文件時,應該將文件名與主函數名統一起來,方便理解和使用。
103
For循環語句功能:重復執行循環體內的MATLAB語句特點:1、循環判斷條件通常就是對循環次數的判斷,即
for循環語句的循環次數是預先設定好的;2、可以多次嵌套for循環或者是與其他的結構形式
嵌套使用。使用格式:
for循環變量=表達式1(初值):表達式2(增量):表達式3(終值)
循環語句組
end1041.4.2常用編程語句形式可以是m:s:n。如1:0.1:5生成從1到5等差為0.1的數列。當增量為1時可以省略表達式2。如1:5生成從1到5等差為1的數列。例如:用for循環實現數值1~10平方的求取,程序如下:
fori=1:10
x(i)=(i+1).^2;
end
x
程序運行后結果為:
x=
49162536496481100121
該段程序使用了一個for循環,求出了數組x從x(1)到x(10)的值,程序運行結束后,自動在工作空間生成雙精度變量i和雙精度數組x。105while循環語句
特點:判斷控制語句可以是邏輯判斷語句通用格式:while表達式
執行語句
end
只要表達式的值為真,程序就會一直運行下去,當程序設計出現了問題,比如表達式的值總是為真,程序將陷入死循環,可以利用鍵盤CTRL+Break中斷程序運行。106a=0;while1<2;a=a+1,end
例如:利用while循環求1+2+3+…+100的值。
sum=0;i=1;
while(i<=100)
sum=sum+i;i=i+1;
end
sum
執行結果為:sum=5050107作用:流程控制,選擇執行指定的命令if:判斷一個邏輯表達式,當表達式為true時執行一組語句。elseif和else:是可選的,用于提供替代語句的執行end:和if匹配,放在最后,用于終止最后一組語句
條件判斷語句if,elseif,else,end108(1)當if語句只有一種選擇時,它的程序結構為:
if表達式
執行語句
end
當表達式為真時,執行語句被執行;否則不予執行。(2)當if語句有兩種選擇時,它的程序結構為:
if表達式
執行語句1
else
執行語句2
end如果表達式為真,則系統將運行執行語句1;如果表達式為假,則系統將運行執行語句2。109(3)當if語句有3種或者更多選擇時,它的程序結構為:
if表達式1 //表達式1為真時的執行語句1執行語句1
elseif表達式2 //表達式2為真時的執行語句2執行語句2
elseif表達式3//表達式3為真時的執行語句3執行語句3
…
else
//所有表達式都為假時的執行語句執行語句N
end
在這種情況下,當運行到程序的某一條表達式為真時,則執行與之相關的執行語句,此時系統將不再檢驗其他的關系表達式。在實際應用中,最后的else命令可有可無。110
例如:編寫一個M文件繪制函數的圖形程序:
x=-6:0.1:6;%設定自變量x的取值范圍
leng=length(x);%計算向量x的長度
form=1:leng %計算函數值
ifx(m)<=0 %判斷x取值所在范圍
y(m)=sin(x(m)); %計算分段函數值
elseifx(m)<=3
y(m)=x(m); %計算分段函數值
else
y(m)=-x(m)+6; %計算分段函數值
end
end
plot(x,y,‘*’),grid; %繪制函數曲線
將其存盤為demoif.m(該文件就是一個MATLAB腳本文件),然后在MATLAB命令行下輸入“demoif”,則生成函數曲線。
111多分支判斷語句switch-case
作用:多分支判斷選擇。
一般表達形式:
switch〈選擇判斷量〉
case選擇判斷值1
選擇判斷語句1
case選擇判斷值2
選擇判斷語句2
……
otherwise
判斷執行語句
end注意:當其中一個case語句后的條件為真時,switch-case語句不對其后的case語句進行判斷。112
例如:利用switch_case語句編寫判斷季節的函數文件。
functiondemo_switch_case(month)
switchmonth
case{3,4,5}
season='spring'
case{6,7,8}
season='summer'
case{9,10,11}
season='autumn'
otherwise
season='winter'
end
將該函數文件以demo_switch_case.m為文件名保存后,在命令窗口輸入“demo_switch_case(1)”,可調用該函數文件,返回結果為:season=winter。113人機交互命令作用:在執行MATLAB主程序文件時,在適當的地方對程序的運行進行觀察或干預。重要性:在調試程序的時候,人機交互命令更是不可缺少。MATLAB語言提供的基本人機交互命令有:echo、input、pause和keyboard四種。114
echo命令
作用:使M文件的命令在執行時可見,有利于程序的調試和演示。
115echofile %文件在執行中的回應顯示開關。echofileon %使指定的file文件的命令在執行中被顯示出來。
echofileoff %關閉指定文件的命令在執行中的回應。對于函數文件,echo命令一般只用于其調試階段。函數文件echoon %打開文本文件的回應命令。
echooff %關閉回應命令。
echoonall %顯示其后所有執行文件的執行過程。
echooffall %關閉其后所有執行文件的顯示。文本文件
input命令
input命令用來提示用戶從鍵盤輸入數據、字符串或表達式,并接收輸入值。116例:R=input('Howmanyapples')pause命令
作用:使程序暫時執行,等待用戶按任意鍵后繼續執行。基本調用格式:
pause%暫停程序等待回應。
pause(n) %在程序運行中等待n秒后繼續運行。
pauseon %顯示其后的pause命令,并且執行pause命令。
pauseoff %顯示其后的pause命令,但不執行該命令。
keyboard命令
keyboard命令與input命令的作用相似。當程序遇到此命令時,MATLAB就將暫時停止運行程序,處于等待鍵盤輸入狀態且在屏幕上顯示字符K。鍵盤處理完畢后,輸入字符串return,程序將繼續執行。在M文件中使用該命令,對于程序的調試和在程序運行中修改變量都很方便。117例如:
disp(‘pleaseinputamonth:’) %顯示提示信息
keyboard %控制權交給鍵盤
demo_switch_case(ans)
輸入數字(例如3)回車,繼續在命令行輸入“return”,控制權返回給MATLAB,即可顯示3月是春天。
程序調試與診斷MATLAB程序出錯時的基本處理方法
語法格式錯誤
如缺“(”或“)”等,在運行時可檢測出大多數該類錯誤,并指出錯在哪一行。
算法邏輯錯誤這樣的錯誤非常隱蔽,往往是對算法考慮不周全,程序可以順利通過,顯示的結果也是正常的數值,但是與先驗的預期不符合。118
注意:在包含函數調用的M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福利待遇協議書
- 電信產品協議書
- 注漿施工協議書
- 物業廉潔協議書
- 石灰合同協議書
- 禁止劇透協議書
- 離婚需寫協議書
- 私人打款協議書
- 燃氣更應協議書
- 石棉處理協議書
- GB/T 23723.5-2025起重機安全使用第5部分:橋式和門式起重機
- 植物提取物分類與提取方法課件
- 《元代染織工藝》課件
- 2025年華東師大版八年級物理下冊階段測試試卷
- 《熱愛生命》課件-初中教育-教育專區
- 微信公眾號運營協議
- 2024年銀行業全渠道客戶旅程分析與精細化線上運營白皮書-火山引擎
- 江蘇省鹽城市阜寧縣多校2024-2025學年九年級上學期12月月考語文試題含答案
- 基于Arduino的智能鬧鐘設計與制作
- DB36T 477-2019 商品肉鵝規模養殖生產技術規程
- 印章交接表(可編輯)
評論
0/150
提交評論