第一章電子課件_第1頁
第一章電子課件_第2頁
第一章電子課件_第3頁
第一章電子課件_第4頁
第一章電子課件_第5頁
已閱讀5頁,還剩123頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

控制系統(tǒng)仿真與CAD教材:《控制系統(tǒng)仿真與CAD》王燕平

——高等教育“十二五”規(guī)劃教材主講教師:閆晶晶聯(lián)系方式:yanjingjing2009@163.com公用郵箱:hngydxdqgcxy@163.com(20130901)計(jì)算機(jī)輔助設(shè)計(jì)(Computer-AidedDesign)2本課程主要內(nèi)容第1章

控制系統(tǒng)仿真及工具軟件概述第2章控制系統(tǒng)的數(shù)學(xué)描述第3章控制系統(tǒng)分析第4章控制系統(tǒng)設(shè)計(jì)與仿真第5章控制系統(tǒng)CAD-Simulink基礎(chǔ)第1章

控制系統(tǒng)仿真及工具軟件概述控制系統(tǒng)及仿真軟件

MATLAB的操作與使用數(shù)值計(jì)算與矩陣運(yùn)算程序、文件和函數(shù)控制系統(tǒng)是指由控制主體、控制客體和控制媒體組成的具有自身目標(biāo)和功能的管理系統(tǒng)。1.1控制系統(tǒng)及仿真軟件概述2023/2/4運(yùn)動體多傳感器控制器運(yùn)動空間構(gòu)建導(dǎo)航與控制…………信息濾波與融合4仿真軟件發(fā)展概述仿真技術(shù)引起該領(lǐng)域各國學(xué)者、專家們的重視,建立起國際仿真委員會,該公司于1967年通過了仿真語言規(guī)范。仿真語言CSMP(computersimulationmodelingprogram)應(yīng)該屬于建立在該標(biāo)準(zhǔn)上的最早的專用仿真語言。中科院沈陽自動化研究所在1988年推出了該語言的推廣版本

CSMP-C。51.1控制系統(tǒng)及仿真軟件概述6系統(tǒng)仿真領(lǐng)域需求:

最高水平,最實(shí)用的軟件或語言介紹仿真技術(shù),能直接采用該語言解決自己的問題。實(shí)踐證明,MATLAB就是這樣的仿真軟件,由于它本身卓越的功能,已經(jīng)使得它成為自動控制、航空航天、汽車設(shè)計(jì)等諸多領(lǐng)域仿真的首選語言。所以在本課程中將介紹基于MATLAB/Simulink的控制系統(tǒng)仿真與設(shè)計(jì)方法及其應(yīng)用。1.1控制系統(tǒng)及仿真軟件概述7本課程的主要研究內(nèi)容:1.1控制系統(tǒng)及仿真軟件概述分析系統(tǒng)的數(shù)學(xué)模型編寫程序運(yùn)算語句得到關(guān)于系統(tǒng)輸出和中間變量的有關(guān)數(shù)據(jù)、曲線實(shí)現(xiàn)對控制系統(tǒng)性能指標(biāo)的分析與設(shè)計(jì)。8本課程的主要研究內(nèi)容:1.1控制系統(tǒng)及仿真軟件概述本章主要說明控制系統(tǒng)模型和控制系統(tǒng)仿真等基本概念,并詳細(xì)介紹控制系統(tǒng)仿真工具軟件MATLAB。9

實(shí)際系統(tǒng)的物理模型:根據(jù)相似原理,把真實(shí)系統(tǒng)按比例放大或縮小制成的模型,其狀態(tài)變量與原系統(tǒng)完全相同。1.1.1 控制系統(tǒng)模型

10數(shù)學(xué)模型:用數(shù)學(xué)方程(微分方程、傳遞函數(shù)、狀態(tài)方程)或信號流程圖、結(jié)構(gòu)圖來描述系統(tǒng)性能的模型。1.1.1 控制系統(tǒng)模型11

仿真模型:原始控制系統(tǒng)的數(shù)學(xué)模型不能用來直接對系統(tǒng)進(jìn)行仿真,應(yīng)該將其轉(zhuǎn)換為能在計(jì)算機(jī)中對系統(tǒng)進(jìn)行仿真的模型。1.1.1 控制系統(tǒng)模型傳遞函數(shù)模型狀態(tài)空間模型動態(tài)結(jié)構(gòu)圖模型數(shù)字控制器模型12本課程的主要研究內(nèi)容:1.1控制系統(tǒng)及仿真軟件概述本章主要說明控制系統(tǒng)模型和控制系統(tǒng)仿真等基本概念,并詳細(xì)介紹控制系統(tǒng)仿真工具軟件MATLAB。13將實(shí)際系統(tǒng)抽象為數(shù)學(xué)模型,稱為建模問題1.1.2 控制系統(tǒng)仿真

控制系統(tǒng)仿真研究對象:控制系統(tǒng)仿真過程可劃分為三個(gè)基本活動:建模,模型實(shí)現(xiàn)和模型實(shí)驗(yàn)

1.1.2 控制系統(tǒng)仿真

控制系統(tǒng)仿真研究對象:控制系統(tǒng)仿真過程可劃分為三個(gè)基本活動:建模,模型實(shí)現(xiàn)和模型實(shí)驗(yàn)

將數(shù)學(xué)模型轉(zhuǎn)換為可在計(jì)算機(jī)上運(yùn)行的仿真模型,稱為模型實(shí)現(xiàn)傳遞函數(shù)模型狀態(tài)空間模型動態(tài)結(jié)構(gòu)圖模型數(shù)字控制器模型14模型試驗(yàn)傳遞函數(shù)模型狀態(tài)空間模型動態(tài)結(jié)構(gòu)圖模型數(shù)字控制器模型1.1.2 控制系統(tǒng)仿真

控制系統(tǒng)仿真研究對象:控制系統(tǒng)仿真過程可劃分為三個(gè)基本活動:建模,模型實(shí)現(xiàn)和模型實(shí)驗(yàn)。

15

通常,采用計(jì)算機(jī)來實(shí)現(xiàn)控制系統(tǒng)仿真的過程以下幾個(gè)步驟:

一、根據(jù)仿真目的確定仿真方案

二、建立控制系統(tǒng)的數(shù)學(xué)模型

三、建立控制系統(tǒng)的仿真模型四、用合適的開發(fā)語言編制控制系統(tǒng)的仿真程序五、在計(jì)算機(jī)上進(jìn)行仿真實(shí)驗(yàn)并輸出仿真結(jié)果1.1.2 控制系統(tǒng)仿真

1617系統(tǒng)仿真領(lǐng)域需求:

最高水平,最實(shí)用的軟件或語言介紹仿真技術(shù),能直接采用該語言解決自己的問題。實(shí)踐證明,MATLAB就是這樣的仿真軟件,由于它本身卓越的功能,已經(jīng)使得它成為自動控制、航空航天、汽車設(shè)計(jì)等諸多領(lǐng)域仿真的首選語言。所以在本課程中將介紹基于MATLAB/Simulink的控制系統(tǒng)仿真與設(shè)計(jì)方法及其應(yīng)用。1.1控制系統(tǒng)及仿真軟件概述語言簡單,使用方便

181.1.3

MATLAB的語言特點(diǎn)例:矩陣乘法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實(shí)現(xiàn):C=A*B功能強(qiáng)大,適用范圍廣在數(shù)值計(jì)算方面,MATLAB的內(nèi)容幾乎涵蓋了所有的數(shù)學(xué)知識門類;有強(qiáng)大的符號運(yùn)算功能;

十分方便的繪圖功能。擴(kuò)充能力和可開發(fā)性很強(qiáng)MATLAB軟件除了有基本部分,還有專業(yè)擴(kuò)展部分-工具箱(toolbox

);MATLAB的庫函數(shù)豐富,且可擴(kuò)充。191.1.3

MATLAB的語言特點(diǎn)1.1.4MATLAB的控制產(chǎn)品MATLAB中與控制系統(tǒng)設(shè)計(jì)分析相關(guān)6個(gè)基礎(chǔ)工具箱控制系統(tǒng)工具箱(ControlSystemToolbox)系統(tǒng)辨識工具箱(SystemIdentificationToolbox)模糊邏輯工具箱(FuzzyLogicToolbox)魯棒控制工具箱(RobustControlToolbox)模型預(yù)測控制工具箱(ModelPredictiveControlToolbox)航空航天工具箱(AerospaceToolbox)20

Simulink為控制系統(tǒng)的仿真提供了一種可視化的編程方式,被廣泛應(yīng)用于控制理論和數(shù)字信號處理的復(fù)雜仿真和設(shè)計(jì)。

MATLAB的控制產(chǎn)品可以完成的主要功能:使用經(jīng)典和狀態(tài)空間方法設(shè)計(jì)單回路和多回路控制系統(tǒng)使用GUI或命令行函數(shù)分析系統(tǒng)響應(yīng)和性能在Simulink模型中手動或自動調(diào)整SISO回路優(yōu)化控制系統(tǒng)性能以滿足時(shí)間和頻率要求將線性模型表示或轉(zhuǎn)換為傳遞函數(shù)、狀態(tài)空間、零極點(diǎn)增益和頻率響應(yīng)數(shù)據(jù)對象在模型表示間轉(zhuǎn)換,使連續(xù)時(shí)間模型離散化計(jì)算高階系統(tǒng)的低階近似值等211.1.4MATLAB的控制產(chǎn)品1.2MATLAB的操作與使用在公用郵箱中按照“說明”下載MATLAB安裝包并進(jìn)行安裝。雙擊打開MATLAB的桌面平臺(Desktop),在默認(rèn)情況下的桌面平臺包含幾個(gè)主要窗口,分別是MATLAB主窗口、命令窗口(CommandWindow)、當(dāng)前目錄窗口(CurrentDirectory)、工作空間管理窗口(Workspace)、歷史窗口(CommandHistory)等;22工作空間窗口中顯示目前內(nèi)存中所有的MATLAB變量的變量名、數(shù)學(xué)結(jié)構(gòu)、字節(jié)數(shù)以及類型231.2.1MATLAB的工作空間(Workspace)其中等號右邊的表達(dá)式可由操作符或其它字符、函數(shù)和變量組成,它可以是MATLAB允許的數(shù)學(xué)或矩陣運(yùn)算,也可以包含MATLAB下的函數(shù)調(diào)用;等號左邊的變量名是給右邊表達(dá)式返回結(jié)果所賦予的名字,該變量將出現(xiàn)在工作空間。如果左邊的變量名為默認(rèn),則返回值自動賦給系統(tǒng)默認(rèn)變量ans。MATLAB語句的一般格式為:變量名=表達(dá)式;241.2.2MATLAB的命令窗口(CommandWindow)

1.2.2MATLAB的命令窗口(CommandWindow)

25在命令窗口的提示符號“>>”后輸入命令,并按“Enter”鍵,則MATLAB立即執(zhí)行命令,完成相應(yīng)的運(yùn)算,顯示結(jié)果或繪制圖形。

,和;的差別

1.2.3MATLAB的程序編輯器

MATLAB不僅可以以交互式的命令行的方式工作,也可以進(jìn)行控制流的程序設(shè)計(jì),即將一段程序編寫在以.m為擴(kuò)展名的M文件內(nèi)。M文件的打開方法:

單擊

File-New-M-file/Script26MATLAB的M文件的兩種形式命令式文本文件編制相當(dāng)于在命令窗口中逐行輸入命令,變量不需要預(yù)先定義,也可以通過文本編輯對其進(jìn)行查看或修改。%P15函數(shù)(Function)文件

函數(shù)文件的功能是建立一個(gè)函數(shù),且這個(gè)文件能夠與MATLAB的庫函數(shù)一樣被調(diào)用。函數(shù)文件的第一行必為function。函數(shù)文件中定義的變量為局部變量,只在函數(shù)內(nèi)部起作用。%leapyear

27

1.2.3MATLAB的程序編輯器

幫助系統(tǒng):聯(lián)機(jī)幫助系統(tǒng);

命令窗口查詢幫助系統(tǒng);

聯(lián)機(jī)演示系統(tǒng)。聯(lián)機(jī)幫助系統(tǒng)(1)單擊MATLAB主窗口工具條中的 按鈕。

(2)選擇下拉菜單Help/ProductHelp。

(3)在命令窗口執(zhí)行helpwin,helpdesk

或doc。(4)快捷鍵<F1>進(jìn)入簡潔版的幫助界面。281.2.4MATLAB的幫助文件291.2.4MATLAB的幫助文件幫助導(dǎo)航面板幫助顯示面板初學(xué)者最好的入門教程:

Contents-MATLAB-GettingStartedContents-MATLAB-Demos-GettingStarted在學(xué)習(xí)過程中,可以隨時(shí)通過選擇某條命令后,點(diǎn)擊右鍵,選擇HelpOnSelection來打開簡潔版幫助窗口界面,查詢該命令的功能及使用方法。301.2.4MATLAB的幫助文件311.2.4MATLAB的幫助文件命令窗口查詢幫助系統(tǒng)

在命令窗口通過幫助命令對特定的內(nèi)容進(jìn)行快速查詢。這些幫助指令包括help系列、lookfor系列和其他常用幫助命令。

help系列的幫助命令有help,help+函數(shù)(類)名,helpwin及helpdesk,其中后兩個(gè)命令是用來調(diào)用聯(lián)機(jī)幫助窗口的。321.2.4MATLAB的幫助文件

33例:若在命令窗口中直接輸入“helpabs”,執(zhí)行后會列出函數(shù)abs()的說明,結(jié)果如下:

ABSAbsolutevalue.

ABS(X)istheabsolutevalueoftheelementsofX.

WhenXiscomplex,ABS(X)isthecomplexmodulus(magnitude)oftheelementsofX.

Seealsosign,angle,unwrap,hypot1.2.4MATLAB的幫助文件聯(lián)機(jī)演示系統(tǒng)

對于MATLAB或者其中某個(gè)工具箱的初學(xué)者,最好的學(xué)習(xí)方法之一就是查看MATLAB的聯(lián)機(jī)演示系統(tǒng)。

進(jìn)入方法:(1)MATLAB主窗口菜單-Help-Demos(2)在命令窗口輸入demos命令(3)在幫助頁面上選中Demos選項(xiàng)均可進(jìn)入MATLAB幫助系統(tǒng)的主演示頁面

341.2.4MATLAB的幫助文件35演示系統(tǒng)提供多種演示類型,通過研究它們來學(xué)習(xí)MATLAB是一種十分有效的方式。1.2.4MATLAB的幫助文件1.3數(shù)值計(jì)算與矩陣運(yùn)算36數(shù)值計(jì)算功能是MATLAB的基礎(chǔ),本節(jié)將簡要介紹1.3.1MATLAB的數(shù)值類型1.3.2矩陣運(yùn)算1.3.3符號運(yùn)算37MATLAB中的基本數(shù)據(jù)類型主要有數(shù)字、字符、矩陣、邏輯型、單元型數(shù)據(jù)及結(jié)構(gòu)型數(shù)據(jù)等,這里只介紹幾個(gè)常用類型。變量與常量MATLAB不要求事先對要使用的變量進(jìn)行定義或聲明,也不需要指定變量的類型,MATLAB會自動根據(jù)所賦予變量的值或?qū)ψ兞克M(jìn)行的操作來識別變量的類型。

在賦值過程中如果賦值變量已經(jīng)存在,則MATLAB將使用新值代替舊值,并以新值類型代替舊值類型。1.3.1MATLAB的數(shù)值類型

MATLAB變量命名規(guī)則

(1)變量名區(qū)分字母大小寫。

(2)變量名不超過31個(gè)字符,且字符之間不能有空格。

(3)變量名必須以字母打頭,之后可以是任意字母、數(shù)字或下畫線。變量名不允許使用標(biāo)點(diǎn)符號。

3839在命令窗口中執(zhí)行的命令和運(yùn)行M文件所產(chǎn)生的變量信息全部存放在當(dāng)前的工作空間(Workspace)中;Who;Whos永久變量含義ans計(jì)算結(jié)果的默認(rèn)變量名eps機(jī)器零閾值,浮點(diǎn)運(yùn)算的相對精度Inf無窮大,如1/0i或j虛數(shù)單位pi圓周率πNaN非數(shù)變量(NotaNumber),如0/0、∞/∞nargin函數(shù)輸入變量數(shù)目,用于M文件程序設(shè)計(jì)nargout函數(shù)輸出變量數(shù)目,用于M文件程序設(shè)計(jì)realmax最大正實(shí)數(shù)realmin最小正實(shí)數(shù)MATLAB語言預(yù)先定義了一些常量(或稱永久變量)表1-1常用的永久變量40(1)永久變量不能用clear命令清除,所以稱為永久變量。(2)永久變量不響應(yīng)Who,Whos命令。

41(3)永久變量的變量名如果沒有被賦值,那么永久變量將取表1-1中所給定的值。

4243(4)若賦值,則默認(rèn)值將被所賦的值臨時(shí)覆蓋。如果使用clear命令清除MATLAB內(nèi)存中的變量,或者M(jìn)ATLAB的命令窗口被關(guān)閉后重新啟動,不管永久變量曾經(jīng)被賦值與否,所有的永久變量將被重新設(shè)置為默認(rèn)值。44(5)在遵循IEEE算法規(guī)則的計(jì)算機(jī)上,被0除是允許的。它不會導(dǎo)致程序執(zhí)行的中斷,系統(tǒng)會給出警告信息,且用一個(gè)特殊的名稱(如Inf,NaN)記述。數(shù)字和算術(shù)表達(dá)式

對于簡單的數(shù)字運(yùn)算,可以直接用表達(dá)式語句和賦值語句的形式在MATLAB命令窗口輸入。

45MATLAB語言的算術(shù)運(yùn)算符可按優(yōu)先級由低到高分為五級,

每一級的優(yōu)先級相同,運(yùn)算時(shí)從左向右進(jìn)行結(jié)合。如果要改變運(yùn)算的優(yōu)先級,可以用括號強(qiáng)制實(shí)現(xiàn)。各優(yōu)先級所包含的運(yùn)算符為:

(1)數(shù)組轉(zhuǎn)置符“.’”、數(shù)組冪符“.^”、

矩陣轉(zhuǎn)置符“’”、矩陣冪符“^”。

(2)標(biāo)量加“+”、標(biāo)量減“-”。

(3)數(shù)組乘法“.*”、數(shù)組右除“./”、數(shù)組左除“.\”、

矩陣乘法“*”、矩陣右除“/”、矩陣左除“\”。

(4)加法“+”、減法“-”。

(5)冒號運(yùn)算符。

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]矩陣的生成直接輸入法:從鍵盤上直接輸入矩陣。注意:

①輸入矩陣時(shí)要以“[]”為

其標(biāo)識符號,矩陣的所有元

素必須都在括號內(nèi)。

②矩陣同行元素之間由空格

或逗號分隔,行與行之間用分

號或回車鍵分隔。

③矩陣大小不需要預(yù)先定義。

④矩陣元素可以是運(yùn)算表達(dá)式。

⑤若“[]”中無元素表空矩陣。471.3.2矩陣運(yùn)算

介紹矩陣的生成、矩陣的基本運(yùn)算和矩陣的數(shù)組運(yùn)算。

在MATLAB語言中冒號的作用是最為豐富的。

首先,可以用冒號來定義行向量。

例如可在命令窗口輸入:

a=1:0.5:4

返回結(jié)果為:a=1.00001.50002.00002.50003.00003.50004.0000

48其次,通過使用冒號,可以截取指定矩陣中的一部分

例如可在命令窗口輸入:

A=[123;456;789],B=A(1:2,:)

返回結(jié)果為:

A=

123

456

789

B=

123

456

通過上例可以看到B是由矩陣A的1到2行和相應(yīng)的所有列的元素構(gòu)成的一個(gè)新的矩陣。在這里,冒號代替了矩陣A的所有列。

49

外部文件讀入法

MATLAB語言允許用戶調(diào)用在MATLAB環(huán)境之外定義的矩陣。可以利用任意的文本編輯器編輯所要使用的矩陣,通過菜單File/ImportData…來導(dǎo)入到MATLAB工作空間。

另外也可以利用load函數(shù),其調(diào)用方法為:load+文件名[參數(shù)]。

Load函數(shù)將會從文件名所指定的文件中讀取數(shù)據(jù),并將輸入的數(shù)據(jù)賦給以文件名命名的變量。50

例如:事先在記事本中建立文件:1,2,3

2,3,4

并以data1.txt保存在當(dāng)前工作目錄下。

在MATLAB命令窗口中輸入:

loaddata1.txt%載入文件中的數(shù)據(jù)至MATLAB工作空間

data1

%查看工作空間中的數(shù)據(jù)

運(yùn)行后結(jié)果為:

data1=

123

23451特殊矩陣的生成

對于一些比較特殊的矩陣,MATLAB提供了一些函數(shù)用于生成這些矩陣。

zeros(m) %生成m階全0矩陣

eye(m) %生成m階單位矩陣

ones(m) %生成m階全1矩陣

rand(m) %生成m階均勻分布的隨機(jī)陣

randn(m)%生成m階正態(tài)分布的隨機(jī)矩陣

52矩陣的基本數(shù)學(xué)運(yùn)算

矩陣的基本數(shù)學(xué)運(yùn)算包括矩陣的四則運(yùn)算、與常數(shù)的運(yùn)算、逆運(yùn)算、行列式運(yùn)算、秩運(yùn)算、特征值運(yùn)算等基本函數(shù)運(yùn)算。四則運(yùn)算

矩陣的加、減、乘運(yùn)算符:“+,-,*”

矩陣的除法:左除“\”和右除“/”

在傳統(tǒng)的MATLAB算法中,右除是先計(jì)算矩陣的逆再相乘,而左除則不需要計(jì)算逆矩陣直接進(jìn)行除運(yùn)算。通常右除要快一點(diǎn),但左除可避免被除矩陣的奇異性所帶來的麻煩。在MATLAB7中兩者的區(qū)別不太大。53常數(shù)與矩陣的運(yùn)算

常數(shù)與矩陣的運(yùn)算即是同該矩陣的每一元素進(jìn)行運(yùn)算。但需注意進(jìn)行數(shù)除時(shí),常數(shù)通常只能做除數(shù)?;竞瘮?shù)運(yùn)算

常用的基本函數(shù)運(yùn)算主要有以下幾個(gè):

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

返回結(jié)果為:ans=1

注意:命令行后加“;”表示該命令執(zhí)行但不顯示

執(zhí)行結(jié)果。55

矩陣的數(shù)組運(yùn)算

矩陣對應(yīng)元素之間的運(yùn)算,也稱為“點(diǎn)”運(yùn)算。

56基本數(shù)學(xué)運(yùn)算

(1)數(shù)組的加、減與矩陣的加、減運(yùn)算完全相同。

(2)數(shù)組的乘除法是指兩同維數(shù)組對應(yīng)元素之間的乘除法,它們的運(yùn)算符為“.*”和“./”或“.\”。(3)矩陣的數(shù)組運(yùn)算中還有冪運(yùn)算(.^)、指數(shù)運(yùn)算(exp)、對數(shù)運(yùn)算(log)、和開方運(yùn)算(sqrt)等。數(shù)組運(yùn)算實(shí)質(zhì)上就是針對矩陣內(nèi)部的每個(gè)元素進(jìn)行的。例如可在命令窗口輸入:

a=[123;456;789];b=a^2,c=a.^2

返回結(jié)果為:

b=

303642

668196

102126150

c=

149

162536

496481

可見矩陣的冪運(yùn)算與數(shù)組的冪運(yùn)算有很大的區(qū)別。57表1-2常用邏輯函數(shù)

邏輯關(guān)系運(yùn)算符號運(yùn)算符功能函數(shù)名==等于eq~=不等于ne<小于lt>大于gt<=小于等于le>=大于等于ge&邏輯與and|邏輯或or~邏輯非not58說明:

①在關(guān)系比較中,若比較的雙方為同維數(shù)組,則比較的結(jié)果也是同維數(shù)組。當(dāng)滿足比較關(guān)系時(shí),對應(yīng)值為1,否則為0。

②當(dāng)比較的雙方中一方為常數(shù),另一方為一數(shù)組,則比較的結(jié)果與數(shù)組同維。

③在算術(shù)運(yùn)算、比較運(yùn)算和邏輯與、或、非運(yùn)算中,它們的優(yōu)先級關(guān)系先后為:比較運(yùn)算、算術(shù)運(yùn)算、邏輯與或非運(yùn)算。59例如可在命令窗口輸入:

a=[123;456;789];x=5;y=ones(3)*5;xa=x<=a

返回結(jié)果為:

xa=

000

011

111

若在命令窗口輸入:b=[010;101;001];ab=a&b

返回結(jié)果為:

ab=

010

101

001601.3.2符號運(yùn)算61符號運(yùn)算的基本操作

符號運(yùn)算與數(shù)值運(yùn)算的區(qū)別:數(shù)值運(yùn)算中必須先對變量賦值,然后才能參與運(yùn)算。而符號運(yùn)算無須事先對獨(dú)立變量賦值,運(yùn)算結(jié)果以標(biāo)準(zhǔn)的符號形式表達(dá),但是符號變量必須預(yù)先定義。

字符串與符號變量、符號常量

①字符串

MATLAB用半角狀態(tài)下的單引號“''”來定義字符串。例在指令窗口輸入A='hello,thisisastring',回車執(zhí)行后返回“A=hello,thisisastring”,此時(shí)在工作空間里觀察,或者用class(A)命令來返回對象A的數(shù)據(jù)類型為“char”,即字符型。62字符串對象也可以用于定義符號表達(dá)式,比如:f='sin(x)+5x',表達(dá)式中f為字符串名,sin(x)+5x為函數(shù)表達(dá)式,單引號里的內(nèi)容可以是函數(shù)表達(dá)式,也可以是方程。

例如:

f1='a*x^2+b*x+c'%二次三項(xiàng)式

f2='a*x^2+b*x+c=0'%方程

f3='Dy+y^2=1'

%微分方程

對于這種方式定義的表達(dá)式或方程,在MATLAB工作空間中仍然顯示為字符格式。63

②符號變量

符號變量是內(nèi)容可變的符號對象。它通常是指一個(gè)或幾個(gè)特定的字符。相關(guān)指令為sym()和syms(),sym是symbolic的縮寫,用于定義符號變量。

64例如:

a=sym('a'),b=sym('c')%定義單個(gè)符號變量

symsabcde %同時(shí)定義多個(gè)符號變量

顯見:當(dāng)需要同時(shí)定義多個(gè)符號變量時(shí),使用syms()更簡潔一些,可以用whos來查看所有變量類型。

③符號常量

當(dāng)數(shù)值常量作為sym()的輸入?yún)⒘繒r(shí),就建立了一個(gè)符號對象--符號常量,符號常量雖然看上去是一個(gè)數(shù)值量,但已經(jīng)是一個(gè)符號對象了。

例如:a=3/4;b='3/4';c=sym(3/4);d=sym('3/4');

用whos來查看所有變量類型:a為實(shí)雙精度浮點(diǎn)數(shù)值類型;b為實(shí)字符類型;c和d都是符號對象類型。65

④符號函數(shù)和符號方程

符號表達(dá)式是由符號常量、符號變量、符號函數(shù)運(yùn)算符以及專用函數(shù)連接起來的符號對象。它包括:符號函數(shù)和符號方程。判斷看帶不帶等號。

例如:

symsxyz;f1=x*y/z;f2=x^2+y^2+z^2;f3=f1/f2;%符號函數(shù)

e1=sym('a*x^2+b*x+c')%符號函數(shù)e2=sym('sin(x)^2+2*cos(x)=1');

e3=sym('Dy-y=x')

%符號方程66符號矩陣的創(chuàng)建與修改

①創(chuàng)建符號矩陣

與數(shù)值矩陣不同,需要用MATLAB函數(shù)sym來創(chuàng)建矩陣,并用“''”標(biāo)識

命令格式:A=sym('[]')。注意sym('[a,b;c,d]')與'[a,b;c,d]'的區(qū)別,后者只是定義了一系列字符串。67例如:在命令窗口輸入

“A=sym('[a,2*b;3*a,0]')”,

運(yùn)行結(jié)果為:

A=

[a,2*b]

[3*a,0]

這就創(chuàng)建了一個(gè)符號矩陣。符號矩陣的每一行的兩端都有方括號,這是與數(shù)值矩陣的一個(gè)重要區(qū)別。

68

②符號矩陣的修改

直接修改,即在工作空間中找到要修改的矩陣,逐層雙擊打開后找到需要修改的值,直接修改。指令修改,用A(m,n)=‘new’或A1=subs(A,‘new’,‘old’)來修改。前者與普通數(shù)字矩陣的調(diào)用方法相同,后者將用新字符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

執(zhí)行結(jié)果為:

A= [a,2*b]

[3*a,0]

A= [a,2*b]

[3*a,4*b]

A1=[a,2*c]

[3*a,4*c]

70符號運(yùn)算

MATLAB中,符號計(jì)算表達(dá)式的運(yùn)算符和基本函數(shù),在形狀、名稱以及使用方法上,都與數(shù)值計(jì)算幾乎完全相同。下面主要介紹與符號計(jì)算相關(guān)的一些常用函數(shù)。71符號表達(dá)式的化簡

①collect函數(shù)——合并同類項(xiàng)

格式:R=collect(S)%以x為默認(rèn)變量,返回系數(shù)

整理后的多項(xiàng)式

R=collect(S,v)%以v為指定變量,返回系數(shù)

整理后的多項(xiàng)式例如:

symsxy; %定義基本變量x,y

R1=collect((exp(x)+x)*(x+2))

%合并多項(xiàng)式中x的同

類項(xiàng),exp為指數(shù)函數(shù)

R2=collect((x+y)*(x^2+y^2+1),y)%合并多項(xiàng)式中y的同類項(xiàng)

程序運(yùn)行結(jié)果為:

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)]),

程序運(yùn)行結(jié)果為:

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函數(shù)——展開符號表達(dá)式

格式:R=expand(S)

說明:對符號表達(dá)式S中每個(gè)因式的乘積進(jìn)行展開。

例如:

symsxyab;

R1=factor(x^3-y^3),R2=factor([a^2-b^2,a^3+b^3])

R3=factor(sym('12345678901234567890'))

程序運(yùn)行結(jié)果為:

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函數(shù)——符號表達(dá)式的因式分解

格式:factor(X)

說明:將系數(shù)為有理數(shù)的多項(xiàng)式(矩陣),表示成低階多項(xiàng)式相乘的形式,如果不能分解,則返回其本身。

④simple和simplify函數(shù)——符號表達(dá)式的化簡

格式:R=simple(S)或simplify(S)

例如:symsx;simple(cos(x)^2+sin(x)^2)

運(yùn)行以后,從結(jié)果看出,simple比較這些不同函數(shù)的結(jié)果,最終把最少字符作為標(biāo)準(zhǔn)。75

符號表達(dá)式的計(jì)算

①符號表達(dá)式的極限

格式:limit(F,x,a)

%求當(dāng)x→a時(shí),表達(dá)式F的極限

limit(F,a)

%默認(rèn)自變量趨于a的極限

limit(F)%默認(rèn)自變量,默認(rèn)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)%按照導(dǎo)數(shù)的定義求sin的導(dǎo)數(shù),結(jié)果為: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

②符號表達(dá)式的微分

格式:diff(f)

%對缺省變量求f的微分

diff(f,v)

%對指定變量v求微分

diff(f,n)

%對默認(rèn)變量求n階微分

diff(f,v,n)

%對指定變量v求f的n階微分78例如:symsax;f=sin(a*x);%定義函數(shù)f=sin(a*x)

df=diff(f) %對默認(rèn)變量x求1階微分結(jié)果為:df=a*cos(a*x)

dfa=diff(f,a,2) %對指定變量a求f的2階微分結(jié)果為:dfa=-x^2*sin(a*x)③符號表達(dá)式的積分

格式:int(f)

%對f表達(dá)式的缺省變量求不定積分

int(f,v)

%對f表達(dá)式的v變量求不定積分

int(f,v,a,b)

%對f表達(dá)式的v變量在(a,b)區(qū)間求

定積分

findsym(f)

%可以找出f中的每個(gè)變量

注意:當(dāng)函數(shù)的積分不存在時(shí),Matlab將簡單地返回原來的積分表達(dá)式;當(dāng)積分上限和積分下限缺省時(shí)為不定積分。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④符號函數(shù)的Taylor級數(shù)展開

格式:taylor(f,n,v)

%n階泰勒級數(shù)展開

另外,MATLAB提供了可以使用Taylor級數(shù)計(jì)數(shù)器的taylortool命令。

81該命令生成一圖形用戶界面,顯示默認(rèn)函數(shù)f=x*cos(x)在區(qū)間[-2*pi,2*pi]內(nèi)的圖形,同時(shí)顯示函數(shù)f的前7項(xiàng)Taylor級數(shù)和的圖形(在a=0附近)。通過更改f(x)項(xiàng)可以得到不同的函數(shù)圖形。通過改變相關(guān)的參量,利用taylortool('cos(x*sin(x))')或直接在打開的界面中修改相關(guān)參量,可得到如圖所示的界面。

82

⑤Fourier積分變換公式:格式:F=fourier(f)

%對符號單值函數(shù)f中的默認(rèn)變量x計(jì)算fourier變換形式。默認(rèn)的輸出結(jié)果F是變量ω的函數(shù)若f=f(ω),則fourier(f)返回變量為v的函數(shù)F=F(v)。

F=fourier(f,v)

%對符號單值函數(shù)f中的默認(rèn)變量x計(jì)算fourier變換形式,F(xiàn)(v)F=fourier(f,u,v)

%令符號函數(shù)f為變量u的函數(shù),而F為變量v的函數(shù),計(jì)算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)

執(zhí)行結(jié)果為:

F1=pi^(1/2)/exp(w^2/4)

F2=2/(v^2+1)

F3=-(4*i*u)/(u^2+1)^2

84⑥ifourier函數(shù)

逆Fourier積分變換定義為:格式:f=ifourier(F)

%輸出參量f=f(x)為默認(rèn)變量w的標(biāo)量符號對象F的逆fourier積分變換,即F=F(w)→f=f(x)。若F=F(x),ifourier(F)返回變量t的函數(shù),即F=F(x)→f=f(t)。

f=ifourier(F,u)

%使f為變量u的函數(shù),即

f=ifourier(F,v,u)

%使F為變量v的函數(shù),f為變量u的函數(shù)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)

執(zhí)行結(jié)果為:

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函數(shù)

Laplace變換定義為: 。

格式:L=laplace(F)

%返回默認(rèn)獨(dú)立變量t的符號表達(dá)式F的Laplace變換,函數(shù)返回默認(rèn)變量為s的函數(shù),即F=F(t)→L=L(s)。若F=F(s),則返回的變量為t。L=laplace(F,t)

%以t代替s為變量的Laplace變換

L=laplace(F,w,z)

%在指定自變量w和指定參變量z的情況下,計(jì)算符號函數(shù)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)

執(zhí)行結(jié)果為:

L1=24/s^5

L2=pi^(1/2)/t^(1/2)

L3=1/(a+x)

88⑧ilaplace函數(shù),逆Laplace變換。

逆Laplace變換的定義為:格式:F=ilaplace(L)

%在默認(rèn)自變量s和參變量t情況下,計(jì)算L(s)的laplace逆變換,即。

另:

F=ilaplace(L,y)%以y代替默認(rèn)的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))

執(zhí)行結(jié)果為:

F1=t

F2=x*exp(a*x)

F3=sinh(a*x)/a90

符號方程求解

①符號代數(shù)方程求解

Matlab符號運(yùn)算能夠解一般的線性方程、非線性方

程、超越方程。線性方程的求解函數(shù)為solve。

調(diào)用格式如下:

solve(f)

%求一個(gè)方程f=0的解;

solve(f,‘t’

)

%對指定變量t求解,‘’可以忽略;t缺省時(shí)默認(rèn)為x或最接近x的符號變量;

solve(f1,f2,…,fn)

%求n個(gè)方程的解。91例如:求解方程:ax^2+bx+c=0

輸入程序:f='a*x^2+b*x+c'; %定義符號方程

solve(f) %對缺省變量x求解

返回結(jié)果: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')

返回結(jié)果為: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')

返回結(jié)果為: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個(gè)微分方程的求解;cond1,cond2,...為初始條件;v為指定自變量,默認(rèn)時(shí)為t;微分方程的各階導(dǎo)數(shù)項(xiàng)以大寫字母D表示,如:y的一階導(dǎo)數(shù) 可表示為:Dy,

y的二階導(dǎo)數(shù) 可表示為:D2y,

y的n階導(dǎo)數(shù) 可表示為:Dny。94例如:求微分方程的解

在命令窗口輸入:y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')

運(yùn)行返回結(jié)果為:y=cos(t)/exp(t)+sin(t)/exp(t)

若再輸入命令“ezplot(y)”,可進(jìn)行符號函數(shù)繪圖。

951.4程序、文件和函數(shù)

Matlab不僅具有強(qiáng)大的數(shù)值處理和符號運(yùn)算功能,而且可以像計(jì)算機(jī)高級語言一樣進(jìn)行程序設(shè)計(jì)。用matlab編程語言編寫的程序以.m為擴(kuò)展名,簡稱M文件。M文件的打開方法:

單擊

File-New-M-file/Script96

1.4.1m文件編程

M文件根據(jù)調(diào)用方式的不同分為命令文件和函數(shù)文件。命令式文件(又稱文本文件)特點(diǎn):1、可以通過調(diào)用文件名來執(zhí)行,逐條讀取和執(zhí)

行命令;2、運(yùn)行產(chǎn)生的變量都是駐留在MATLAB的工作空間中,除非用clear命令清除工作空間;3、可以通過其他編輯器來編寫m文件;

97在編輯/調(diào)試窗口中按順序輸入下面的命令語句:

%該文件用于順次求出從sin(1)到sin(10)的值。

fori=1:10

a=sin(i);

fprintf('sin(%d)=',i)

fprintf('%12.4f\n',a)

end

將該命令式文件以文件名sinvalue.m保存在MATLAB的work文件夾中(默認(rèn)值),然后在命令窗口輸入sinvalue,即可運(yùn)行sinvalue.m文件,結(jié)果為:

sin(1)=0.8415

sin(2)=0.9093

sin(10)=-0.544098%d讀取“,”后面的數(shù)值,并要求該數(shù)值必須為整數(shù)。%12.4f

讀取后面的數(shù)值,并要求輸出的結(jié)果占12個(gè)字符的位置,并保留4個(gè)有效數(shù)字。\n指換行。

函數(shù)式文件作用:實(shí)現(xiàn)參數(shù)傳遞特點(diǎn):1、第一行為function;2、返回值可有可無;3、執(zhí)行后只保留最后結(jié)果,不在工作空間中保留任何中間過程,所定義的變量也只在函數(shù)內(nèi)部起作用,并隨著調(diào)用的結(jié)束而被清除。4、M函數(shù)必須由其它語句調(diào)用,不能直接鍵入一個(gè)文件名來運(yùn)行一個(gè)M函數(shù)。99

MATLAB語言的函數(shù)文件包含以下幾個(gè)部分。

(1)函數(shù)題頭:指函數(shù)的定義行,在該行中定義函數(shù)名、輸入輸出變量列表等。函數(shù)文件的第一行總是以“function”引導(dǎo)的函數(shù)聲明行,一般格式為:

function[輸出變量列表]=函數(shù)名(輸入變量列表)(2)幫助信息索引行:函數(shù)幫助文本第一行,內(nèi)容為該函數(shù)功能的大致描述,當(dāng)使用lookfor命令查看該函數(shù)時(shí),顯示該行。(3)詳細(xì)幫助信息:該部分提供函數(shù)的完整幫助信息,通過MATLAB的幫助系統(tǒng)查看函數(shù)的幫助信息時(shí),顯示該部分。(4)函數(shù)體:指函數(shù)代碼段,是函數(shù)的主體部分。(5)注釋部分:是對函數(shù)體中各語句的解釋和說明文本,注釋語句以英文輸入狀態(tài)下的%引導(dǎo)。

100例如:編寫一個(gè)函數(shù)文件,來求一向量的平均值。

在MATLAB語言的編輯/調(diào)試窗口中輸入如下內(nèi)容:

functiony=myaverage(x)%函數(shù)題頭

%MYAVERAGEMeanofvectorelements.%幫助信息索引行

%MYAVERAGE(X),whereXisavector,isthemeanof%詳細(xì)幫助信息

%vectorelements.Nonvectorinputresultsinanerror. %詳細(xì)幫助信息[m,n]=size(x); %函數(shù)主體,判斷輸入?yún)?shù)維數(shù)

if(~((m==1)|(n==1))) %m,n為臨時(shí)變量

disp(‘輸入必須是向量!’);%判斷輸入變量為矩陣顯示提示

return; %并結(jié)束函數(shù)文件的運(yùn)行

end

y=sum(x)/length(x);%實(shí)際計(jì)算,臨時(shí)的函數(shù)變量

101

將該函數(shù)文件以myaverage.m為文件名保存在MATLAB的work文件夾中,若在命令窗口輸入“a=myaverage([12345678910])”,可調(diào)用函數(shù)文件,完成向量1~10平均值的計(jì)算,返回結(jié)果a=5.5000。

若在命令窗口輸入“myaverage([12345;678910])”,也可以調(diào)用函數(shù)文件,但由于輸入?yún)?shù)為矩陣,返回結(jié)果為程序中設(shè)置的提示信息:“輸入必須是向量!”。

102注意1、上述函數(shù)文件的五個(gè)組成部分,并不是所有的函數(shù)均需要。實(shí)際上,除了函數(shù)題頭是必須的以外,其它部分均可以省略。

注意2、在MATLAB語言中,存儲M函數(shù)時(shí)文件名應(yīng)當(dāng)與文件內(nèi)主函數(shù)名一致。這是因?yàn)檎{(diào)用M文件時(shí),系統(tǒng)查詢的是相應(yīng)的文件而不是函數(shù)名,如果兩者不一致,這或者打不開目的文件,或者打開的是其他文件。鑒于這種查詢方式與其他程序設(shè)計(jì)語言不同,所以建議在儲存M函數(shù)文件時(shí),應(yīng)該將文件名與主函數(shù)名統(tǒng)一起來,方便理解和使用。

103

For循環(huán)語句功能:重復(fù)執(zhí)行循環(huán)體內(nèi)的MATLAB語句特點(diǎn):1、循環(huán)判斷條件通常就是對循環(huán)次數(shù)的判斷,即

for循環(huán)語句的循環(huán)次數(shù)是預(yù)先設(shè)定好的;2、可以多次嵌套for循環(huán)或者是與其他的結(jié)構(gòu)形式

嵌套使用。使用格式:

for循環(huán)變量=表達(dá)式1(初值):表達(dá)式2(增量):表達(dá)式3(終值)

循環(huán)語句組

end1041.4.2常用編程語句形式可以是m:s:n。如1:0.1:5生成從1到5等差為0.1的數(shù)列。當(dāng)增量為1時(shí)可以省略表達(dá)式2。如1:5生成從1到5等差為1的數(shù)列。例如:用for循環(huán)實(shí)現(xiàn)數(shù)值1~10平方的求取,程序如下:

fori=1:10

x(i)=(i+1).^2;

end

x

程序運(yùn)行后結(jié)果為:

x=

49162536496481100121

該段程序使用了一個(gè)for循環(huán),求出了數(shù)組x從x(1)到x(10)的值,程序運(yùn)行結(jié)束后,自動在工作空間生成雙精度變量i和雙精度數(shù)組x。105while循環(huán)語句

特點(diǎn):判斷控制語句可以是邏輯判斷語句通用格式:while表達(dá)式

執(zhí)行語句

end

只要表達(dá)式的值為真,程序就會一直運(yùn)行下去,當(dāng)程序設(shè)計(jì)出現(xiàn)了問題,比如表達(dá)式的值總是為真,程序?qū)⑾萑胨姥h(huán),可以利用鍵盤CTRL+Break中斷程序運(yùn)行。106a=0;while1<2;a=a+1,end

例如:利用while循環(huán)求1+2+3+…+100的值。

sum=0;i=1;

while(i<=100)

sum=sum+i;i=i+1;

end

sum

執(zhí)行結(jié)果為:sum=5050107作用:流程控制,選擇執(zhí)行指定的命令if:判斷一個(gè)邏輯表達(dá)式,當(dāng)表達(dá)式為true時(shí)執(zhí)行一組語句。elseif和else:是可選的,用于提供替代語句的執(zhí)行end:和if匹配,放在最后,用于終止最后一組語句

條件判斷語句if,elseif,else,end108(1)當(dāng)if語句只有一種選擇時(shí),它的程序結(jié)構(gòu)為:

if表達(dá)式

執(zhí)行語句

end

當(dāng)表達(dá)式為真時(shí),執(zhí)行語句被執(zhí)行;否則不予執(zhí)行。(2)當(dāng)if語句有兩種選擇時(shí),它的程序結(jié)構(gòu)為:

if表達(dá)式

執(zhí)行語句1

else

執(zhí)行語句2

end如果表達(dá)式為真,則系統(tǒng)將運(yùn)行執(zhí)行語句1;如果表達(dá)式為假,則系統(tǒng)將運(yùn)行執(zhí)行語句2。109(3)當(dāng)if語句有3種或者更多選擇時(shí),它的程序結(jié)構(gòu)為:

if表達(dá)式1 //表達(dá)式1為真時(shí)的執(zhí)行語句1執(zhí)行語句1

elseif表達(dá)式2 //表達(dá)式2為真時(shí)的執(zhí)行語句2執(zhí)行語句2

elseif表達(dá)式3//表達(dá)式3為真時(shí)的執(zhí)行語句3執(zhí)行語句3

else

//所有表達(dá)式都為假時(shí)的執(zhí)行語句執(zhí)行語句N

end

在這種情況下,當(dāng)運(yùn)行到程序的某一條表達(dá)式為真時(shí),則執(zhí)行與之相關(guān)的執(zhí)行語句,此時(shí)系統(tǒng)將不再檢驗(yàn)其他的關(guān)系表達(dá)式。在實(shí)際應(yīng)用中,最后的else命令可有可無。110

例如:編寫一個(gè)M文件繪制函數(shù)的圖形程序:

x=-6:0.1:6;%設(shè)定自變量x的取值范圍

leng=length(x);%計(jì)算向量x的長度

form=1:leng %計(jì)算函數(shù)值

ifx(m)<=0 %判斷x取值所在范圍

y(m)=sin(x(m)); %計(jì)算分段函數(shù)值

elseifx(m)<=3

y(m)=x(m); %計(jì)算分段函數(shù)值

else

y(m)=-x(m)+6; %計(jì)算分段函數(shù)值

end

end

plot(x,y,‘*’),grid; %繪制函數(shù)曲線

將其存盤為demoif.m(該文件就是一個(gè)MATLAB腳本文件),然后在MATLAB命令行下輸入“demoif”,則生成函數(shù)曲線。

111多分支判斷語句switch-case

作用:多分支判斷選擇。

一般表達(dá)形式:

switch〈選擇判斷量〉

case選擇判斷值1

選擇判斷語句1

case選擇判斷值2

選擇判斷語句2

……

otherwise

判斷執(zhí)行語句

end注意:當(dāng)其中一個(gè)case語句后的條件為真時(shí),switch-case語句不對其后的case語句進(jìn)行判斷。112

例如:利用switch_case語句編寫判斷季節(jié)的函數(shù)文件。

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

將該函數(shù)文件以demo_switch_case.m為文件名保存后,在命令窗口輸入“demo_switch_case(1)”,可調(diào)用該函數(shù)文件,返回結(jié)果為:season=winter。113人機(jī)交互命令作用:在執(zhí)行MATLAB主程序文件時(shí),在適當(dāng)?shù)牡胤綄Τ绦虻倪\(yùn)行進(jìn)行觀察或干預(yù)。重要性:在調(diào)試程序的時(shí)候,人機(jī)交互命令更是不可缺少。MATLAB語言提供的基本人機(jī)交互命令有:echo、input、pause和keyboard四種。114

echo命令

作用:使M文件的命令在執(zhí)行時(shí)可見,有利于程序的調(diào)試和演示。

115echofile %文件在執(zhí)行中的回應(yīng)顯示開關(guān)。echofileon %使指定的file文件的命令在執(zhí)行中被顯示出來。

echofileoff %關(guān)閉指定文件的命令在執(zhí)行中的回應(yīng)。對于函數(shù)文件,echo命令一般只用于其調(diào)試階段。函數(shù)文件echoon %打開文本文件的回應(yīng)命令。

echooff %關(guān)閉回應(yīng)命令。

echoonall %顯示其后所有執(zhí)行文件的執(zhí)行過程。

echooffall %關(guān)閉其后所有執(zhí)行文件的顯示。文本文件

input命令

input命令用來提示用戶從鍵盤輸入數(shù)據(jù)、字符串或表達(dá)式,并接收輸入值。116例:R=input('Howmanyapples')pause命令

作用:使程序暫時(shí)執(zhí)行,等待用戶按任意鍵后繼續(xù)執(zhí)行。基本調(diào)用格式:

pause%暫停程序等待回應(yīng)。

pause(n) %在程序運(yùn)行中等待n秒后繼續(xù)運(yùn)行。

pauseon %顯示其后的pause命令,并且執(zhí)行pause命令。

pauseoff %顯示其后的pause命令,但不執(zhí)行該命令。

keyboard命令

keyboard命令與input命令的作用相似。當(dāng)程序遇到此命令時(shí),MATLAB就將暫時(shí)停止運(yùn)行程序,處于等待鍵盤輸入狀態(tài)且在屏幕上顯示字符K。鍵盤處理完畢后,輸入字符串return,程序?qū)⒗^續(xù)執(zhí)行。在M文件中使用該命令,對于程序的調(diào)試和在程序運(yùn)行中修改變量都很方便。117例如:

disp(‘pleaseinputamonth:’) %顯示提示信息

keyboard %控制權(quán)交給鍵盤

demo_switch_case(ans)

輸入數(shù)字(例如3)回車,繼續(xù)在命令行輸入“return”,控制權(quán)返回給MATLAB,即可顯示3月是春天。

程序調(diào)試與診斷MATLAB程序出錯時(shí)的基本處理方法

語法格式錯誤

如缺“(”或“)”等,在運(yùn)行時(shí)可檢測出大多數(shù)該類錯誤,并指出錯在哪一行。

算法邏輯錯誤這樣的錯誤非常隱蔽,往往是對算法考慮不周全,程序可以順利通過,顯示的結(jié)果也是正常的數(shù)值,但是與先驗(yàn)的預(yù)期不符合。118

注意:在包含函數(shù)調(diào)用的M

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論