matlab入門教程課件_第1頁
matlab入門教程課件_第2頁
matlab入門教程課件_第3頁
matlab入門教程課件_第4頁
matlab入門教程課件_第5頁
已閱讀5頁,還剩359頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

28.12.2024.1MATLAB

——數(shù)學(xué)建?;A(chǔ)教程主講者:高陳燕28.12.2024.2MATLAB

——數(shù)學(xué)建模基礎(chǔ)教程MATLAB的概述MATLAB程序設(shè)計(jì)基礎(chǔ)MATLAB在數(shù)值計(jì)算中的應(yīng)用MATLAB的符號計(jì)算MATLAB的圖形處理28.12.2024.3MATLAB程序設(shè)計(jì)基礎(chǔ)MATLAB語言的基本要素MATLAB語言的核心——矩陣單元型數(shù)據(jù)和結(jié)構(gòu)型數(shù)據(jù)M文件流程控制語句28.12.2024.4MATLAB語言的基本要素變量

變量不需要事先聲明,也不需要指定變量類型,它會自動根據(jù)所賦予變量的值或?qū)ψ兞康牟僮鱽泶_定變量的類型;賦值過程中,如果變量已存在,則用新值代替舊值,以新的類型代替舊的類型。變量的命名規(guī)則:變量名區(qū)分大小寫;變量名長度不超過31位,第31位之后的字符被忽略;變量名以字母開頭,變量名中可以包含字母、數(shù)字、下劃線,但不能使用標(biāo)點(diǎn)。

變量一般為局部變量,即僅在其調(diào)用的M文件內(nèi)部有效;若要定義全局變量,須在變量前加關(guān)鍵字global。Matlab語言主要是由幾個基本要素構(gòu)建而成的,其中包括變量、常量、數(shù)值、字符串、運(yùn)算符及標(biāo)點(diǎn)等?;氐街髂夸?8.12.2024.5常量

matlab中預(yù)定義的一些特殊的量。

i,j虛數(shù)單位 Realmin最小的正浮點(diǎn)數(shù),

pi圓周率 Realmax最大的浮點(diǎn)數(shù),

eps浮點(diǎn)運(yùn)算的相對精度 Inf 無窮大

NaNNot-a-Number,表示不定值

例如:

>>pi ans=%ans是默認(rèn)的結(jié)果變量

3.141628.12.2024.6>>1/0Warning:Dividebyzero.ans=Inf>>0/0Warning:Dividebyzero.ans=NaN28.12.2024.7

定義變量時應(yīng)避免與常量名相同,如果改變了某個常量的值,可以用“clear+常量名”命令來恢復(fù)該常量的初始設(shè)定值。>>pi=1pi=1>>clearpi>>pians=3.141628.12.2024.8數(shù)值數(shù)值缺省為實(shí)數(shù)保留小數(shù)點(diǎn)后4位浮點(diǎn)數(shù)表示。其輸入格式與C語言一致:如:9-730.19991.475e6

輸出格式由format命令控制,只是影響屏幕顯示效果,不影響內(nèi)部存儲和計(jì)算。下面以pi為例。>>formatlong;pians=3.14159265358979>>formatlonge;pians=3.141592653589793e+000>>formatlongg;pians=3.1415926535897928.12.2024.9>>z=2*exp(pi/3i)z=1.0000+1.7321iMatlab語言還提供了復(fù)數(shù)的表達(dá)和運(yùn)算功能。復(fù)數(shù)的基本單位表示為i或j。例如:如果是表達(dá)式,必須在虛部的數(shù)值與i、j之間使用乘號。>>sin(pi/3)+cos(pi/3)j???sin(pi/3)+cos(pi/3)j

Error:UnexpectedMATLABexpression.>>sin(pi/3)+cos(pi/3)*jans=0.8660+0.5000i28.12.2024.10字符串字符串用單引號輸入或賦值;字符串的每個字符都是都是字符數(shù)組的一個元素;字符串和字符數(shù)組基本上等價。>>s='iloveyou's=iloveyou>>size(s)ans=110>>s(2)ans=>>s(10)ans=u字符串的每個字符(包括空格)都是字符數(shù)組的一個元素。在matlab中,字符串與字符數(shù)組或矩陣基本上是等價的。28.12.2024.11

如果在字符串內(nèi)使用單引號時,可以用連續(xù)兩個單引號表示。例如:

字符串之間的轉(zhuǎn)換函數(shù):

double字符串轉(zhuǎn)換為數(shù)值代碼num2str數(shù)字轉(zhuǎn)換為字符串

int2str整數(shù)轉(zhuǎn)換為字符串mat2str矩陣轉(zhuǎn)換為字符串

str2num轉(zhuǎn)換字符串為數(shù)字>>double(s)‘%s=‘iloveyou’ans=1053210811111810132121111117>>s='it''sgood‘s=it'sgood28.12.2024.12>>a=[1:5]a=12345>>b=num2str(a)b=2345>>a*2ans=246810>>b*2ans=98646410064641026464104646410628.12.2024.13

matlab對字符串的操作與C語言中的幾乎完全相同:

strcat鏈結(jié)串strcmp比較串strvcat垂直鏈結(jié)串

strncmp比較串的前n個字符findstr在其他串中找此串

upper轉(zhuǎn)換串為大寫lower轉(zhuǎn)換串為小寫

blanks生成空串deblank移去串中空格……例如:把前面的字符串s轉(zhuǎn)化成大寫。s=“it’good”>>upper(s)ans=IT'SGOOD執(zhí)行字符串的功能用eval來實(shí)現(xiàn)。>>t=‘1/(a*b-1)’;a=2;b=3;c=eval(t)%可以在一行中表示。c=0.200028.12.2024.14運(yùn)算符

在matlab語言中運(yùn)算符包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符。其中算術(shù)運(yùn)算符見右表:其中點(diǎn)運(yùn)算是指操作元素點(diǎn)對點(diǎn)的運(yùn)算,也就是說矩陣內(nèi)元素對元素之間的運(yùn)算,點(diǎn)運(yùn)算要求參與運(yùn)算的變量在結(jié)構(gòu)上必須是相似的。例如:操作符定義+算術(shù)加-算術(shù)減*算術(shù)乘.*點(diǎn)乘^算術(shù)乘方.^點(diǎn)乘方\算術(shù)左除.\點(diǎn)左除/算術(shù)右除./點(diǎn)右除28.12.2024.15>>a=[1,2,3;4,5,6;7,8,9]a=123456789>>b=[123456789]b=123456789>>c=a*bc=303642668196102126150>>d=a.*bd=149162536496481思考:題目:通過描點(diǎn)法得到sin(x)xcos(x)函數(shù)在0-pi區(qū)間上的曲線。提示:通過點(diǎn)運(yùn)算獲得。(附件diancheng。txt)28.12.2024.16Matlab語言的關(guān)系運(yùn)算符如右表:當(dāng)判斷一個矩陣是否為空矩陣時,一般不用“==”,而應(yīng)當(dāng)使用函數(shù)isempty。操作符定義==等于~=不等于>大于>=大于等于<小于<=小于等于28.12.2024.17Matlab語言的邏輯運(yùn)算符如右表:進(jìn)行邏輯判斷時,所有非零數(shù)值均被認(rèn)為為真,而零為假;在邏輯判斷結(jié)果中,判斷為真時輸出1,為假時輸出0.三種運(yùn)算符中,它們的優(yōu)先級關(guān)系先后為:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符。操作符定義&邏輯與|邏輯或~邏輯非xor邏輯異或any當(dāng)向量中存在非零元素時為真all當(dāng)向量中所有元素非零時為真28.12.2024.18>>a=[1:3;4:6;7:9];>>x=5;>>y=ones(3)*5;>>xa=x<=axa=000011111>>b=[010;101;001];>>ab=a&bab=010101001>>nb=~bnb=10101011028.12.2024.19>>a=magic(5);>>a(:,3)=zeros(5,1)a=17240815235014164602022101202131118029>>a1=all(a(:,1)<10)a1=0>>a2=all(a>3)a2=11000>>a11=any(a(:,1)>10)a11=1>>a22=any(a>10)a22=1101128.12.2024.20標(biāo)點(diǎn)在matlab中一些標(biāo)點(diǎn)符號也被賦以特殊的意義,或表示要進(jìn)行一定的運(yùn)算等,如下表:標(biāo)點(diǎn)定義標(biāo)點(diǎn)定義:冒號,具有多種應(yīng)用功能…續(xù)行符;區(qū)分行,及取消結(jié)果顯示%注釋標(biāo)記,區(qū)分列,及函數(shù)參數(shù)分隔符等!調(diào)用操作系統(tǒng)運(yùn)算()指定運(yùn)算過程中的先后次序等[]矩陣定義的標(biāo)志等{}用于構(gòu)成單元數(shù)組等‘字符串的標(biāo)示符28.12.2024.21

下面對上表中各標(biāo)點(diǎn)作進(jìn)一步的介紹。首先,用冒號來定義行向量?;靖袷剑簒=x1:step:x2(初始值:步長:尾元素數(shù)值限)

x=x1:x2(默認(rèn)步長為1)注意:這里強(qiáng)調(diào)x2為尾元素數(shù)值限,而不是尾元素值。當(dāng)x2-x1恰為步長的整數(shù)倍時,x2才能成為尾值。例如:28.12.2024.22>>a=1:2:12a=1357911>>a=12:-2:1a=12108642>>a=1:6a=123456>>a=2:2:12a=2468101228.12.2024.23其次,通過使用冒號,可以截取指定矩陣中的部分。例如:>>a=[1:18];a=reshape(a,3,6)%重組矩陣a=147101316258111417369121518>>a1=a(:,1:3)%提取矩陣a的第1到3列元素組成的子矩陣。a1=147258369>>a2=a(1:2,3:end)a2=71013168111417思考:B1=a(1:3,:)?28.12.2024.24

分號在matlab語言中所起的作用是作為分隔行的標(biāo)志,這里包括在矩陣定義中對行的區(qū)分以及在程序代碼中對行的劃分。在矩陣定義中,分號之間的數(shù)據(jù)被認(rèn)為是矩陣的同一行。對于以分號結(jié)尾的行語句,matlab語言不會把其運(yùn)算結(jié)果顯示在命令窗口中。逗號主要起兩個作用。其一是逗號是函數(shù)參數(shù)的分隔符,也是矩陣下標(biāo)的分隔符。其二是逗號也是區(qū)分矩陣列的標(biāo)志,在同一行中,逗號分隔開的是各個列。括號是調(diào)整運(yùn)算先后次序的標(biāo)點(diǎn),可以通過引用括號來調(diào)整運(yùn)算次序。矩陣的定義需要使用中括號。此外,中括號可以表示空矩陣,并通過該空矩陣實(shí)現(xiàn)對矩陣的部分刪除。以下舉例:28.12.2024.25>>a=[1,2,3,4;5,6,7,8;4,3,2,1;8,7,6,5]a=1234567843218765>>a(:,1:2)=[]a=34782165>>b=a([13],:)b=342128.12.2024.26

大括號是單元型數(shù)據(jù)所特有的標(biāo)點(diǎn)。后面介紹。小數(shù)點(diǎn)“.”,它起到了數(shù)學(xué)符號的作用;而作為點(diǎn)運(yùn)算的標(biāo)志符,它又構(gòu)成了各種各樣的點(diǎn)運(yùn)算;最重要的是它可作為結(jié)構(gòu)型數(shù)組應(yīng)用時的專有符號?!啊睘閙atlab語言中的續(xù)行符,但是該續(xù)行符只能出現(xiàn)在各個語義群之間,也就是說不能出現(xiàn)在變量名之間,否則出錯。例如:>>a=sin(pi/4)+cos(pi/4)-tan(pi/4)...+cot(pi/4)a=1.4142>>a=sin(pi/4)+cos(pi/4)-t...an(pi/4)???an(pi/4)|Error:UnexpectedMATLABexpression.28.12.2024.27

在matlab語言中,一行內(nèi)在“%”之后的文字均被認(rèn)為是對M文件或程序代碼的解釋部分?!埃 笨梢栽诿畲翱谥苯诱{(diào)用操作系統(tǒng)命令,例如DOS命令,并將結(jié)果展示在命令窗口中,比如在命令窗口中調(diào)用“!dirc”,以顯示C盤的文件列表。單引號作為字符串的標(biāo)示符而存在,同時,它在矩陣運(yùn)算中也表示矩陣的轉(zhuǎn)置運(yùn)算及復(fù)數(shù)的共軛值。28.12.2024.28>>a=[1,2,3,4;5,6,7,8]a=12345678>>a'ans=15263748>>s=3-4i;s'ans=3.0000+4.0000i回到主目錄28.12.2024.29MATLAB語言的核心——矩陣矩陣的生成直接輸入小矩陣(最簡便的方法)

注意點(diǎn):輸入矩陣時要以“[]”為其標(biāo)識,即矩陣的元素應(yīng)在“[]”內(nèi)部。矩陣的同行元素之間可由空格或“,”分隔,行與行之間用“;”或回車符分隔。矩陣元素可為運(yùn)算表達(dá)式。無任何元素的空矩陣也合法。回到主目錄28.12.2024.30>>A=[1,2,3;4,5,6;7,8,9]A=123456789>>a=[123456789]a=123456789創(chuàng)建帶有運(yùn)算表達(dá)式的矩陣:>>b=[sin(pi/3),cos(pi/4);log(9),tan(pi/4)];%什么樣的結(jié)果?28.12.2024.31利用中括號將小矩陣合成一個大矩陣>>b=[1,2;3,4];>>a=[b,b';b^2,b*3]a=12133424710361522912從外部文件引用矩陣(excel,txt)(shuju1,shuju2)28.12.2024.32特殊矩陣的生成常用的特殊矩陣空陣:[]

單位陣:eye(m,n);eye(m)

零矩陣:zeros(m,n);zeros(m)

全1陣:ones(m,n);ones(m)

對角陣:對角元素向量V=[a1,a2,…,an] A=diag(V)

隨機(jī)陣:rand(m,n)產(chǎn)生一個m×n的均勻分布的隨機(jī)矩陣28.12.2024.33>>eye(2,3)ans=100010>>zeros(2,3)ans=000000>>ones(2,3)ans=11111

1>>v=[567];a=diag(v)a=500060007>>eye(2)ans=1001>>zeros(2)ans=0000>>ones(2)ans=1111

如果已知a為方陣,則v=diag(a)可以提取a的對角元素構(gòu)成向量v。28.12.2024.34其他特殊矩陣

compan友矩陣函數(shù)magic魔方矩陣

hankelHankel矩陣 rosser對稱特征值測試矩陣

hilbHilbert矩陣pascalPascal矩陣

invhilb反Hilbert矩陣vander范德蒙矩陣

……

其中,compan(c),結(jié)果是生成一以向量c為系數(shù)的多項(xiàng)式的特征矩陣。hilb所生成的hilbert矩陣的特點(diǎn)是矩陣中的元素值為1/(i+j-1)。28.12.2024.35單元型數(shù)據(jù)和結(jié)構(gòu)型數(shù)據(jù)單元型變量

單元型變量是matlab語言中較為特殊的一種數(shù)據(jù)類型。本質(zhì)上講,單元型變量為任意類型的多維數(shù)組。單元型變量可有兩種方式:一種是用賦值語句直接定義,另一種是由cell函數(shù)預(yù)先分配存儲空間,然后對單元元素逐個賦值。在直接賦值過程中,與在矩陣的定義中使用中括號不同,單元型變量的定義需用大括號,而元素間用逗號隔開?;氐街髂夸?8.12.2024.36>>a=[1,2;3,4]a=1234>>b={1:4,a,‘a(chǎn)bcd’}b=[1x4double][2x2double]'abcd'>>cellplot(b)%圖形顯示單元型變量的內(nèi)容>>celldisp(b)%顯示單元型變量的內(nèi)容b{1}=1234b{2}=1234b{3}=abcd28.12.2024.37

單元型變量元素的引用采用大括號為下標(biāo)標(biāo)識,用小括號只顯示該元素的壓縮形式。例如:>>b{2}ans=1234>>b(2)ans=[2x2double]注意:單元型變量的元素不是以指針方式保存的。思考:如果改變了上例中的a矩陣,那么單元型變量b中的第二個元素改變不?28.12.2024.38

單元型變量與矩陣的另一個區(qū)別是單元型變量自身可以嵌套。例如:>>c=cell(1,3)%另一種定義法>>c{1,1}=1:4;>>c{1,2}=a;>>c{1,3}=b;%b={1:4,a,‘a(chǎn)bcd’}>>cc=[1x4double][2x2double]{1x3cell}>>c{3}{3}ans=abcd28.12.2024.39結(jié)構(gòu)型變量

在matlab語言中結(jié)構(gòu)型變量的定義也有兩種方法,其一是直接賦值定義,其二是由函數(shù)struct定義。以指針操作符“.”連接結(jié)構(gòu)型變量名與屬性名。直接賦值時,應(yīng)當(dāng)指出結(jié)構(gòu)中的屬性名。例如:>>A.a1=‘a(chǎn)bcd’;%字符串類型>>A.a2=1;%數(shù)值類型>>A.a3=[1,2,3,4];%數(shù)組類型>>AA=a1:'abcd'a2:1a3:[1234]

思考:如何引用結(jié)構(gòu)型變量名A中a1屬性的c元素。

28.12.2024.40

由函數(shù)struct定義結(jié)構(gòu)型變量,其調(diào)用格式如下:結(jié)構(gòu)型變量名=struct(元素名1,元素值1,元素2,元素值2,……)>>B=[1,2;3,4];>>C=struct('c1',1,'c2',B,'c3','abcd')C=c1:1c2:[2x2double]c3:'abcd‘>>C.c2ans=123428.12.2024.41

結(jié)構(gòu)型變量可以嵌套定義。例如:

>>C.c1=A%前面結(jié)構(gòu)型變量AC=c1:[1x1struct]c2:[2x2double]c3:'abcd‘>>C.c1.a1%嵌套結(jié)構(gòu)型變量的引用ans=abcd28.12.2024.42M文件

所謂M文件就是由matlab語言編寫的可在matlab語言環(huán)境下運(yùn)行的程序源代碼文件。Matlab語言中的M文件可分為命令式(script)和函數(shù)式(function)兩種形式。M文件可在matlab的程序編輯器中編寫,也可在其他的文本編輯器中編寫,并以“.m”為擴(kuò)展名加以保存。命令式文件

命令式文件就是命令行的簡單疊加,matlab會自動按順序執(zhí)行文件中的命令。值得注意的是,命令式文件在運(yùn)行過程中可以調(diào)用matlab工作域內(nèi)所有的數(shù)據(jù),而且所產(chǎn)生的所有變量均為全局變量?;氐街髂夸?8.12.2024.43函數(shù)式文件函數(shù)式文件主要用于解決計(jì)算中的參數(shù)傳遞和函數(shù)調(diào)用的問題。函數(shù)式的標(biāo)志是它的第一行為function語句。函數(shù)式文件可以有返回值,也可以沒有。函數(shù)式文件執(zhí)行之后,只保留最后結(jié)果,不保留任何中間過程,所定義的變量也僅在函數(shù)內(nèi)部起作用,并隨著調(diào)用的結(jié)束而被清除。即除無特殊聲明外,其變量均為局部變量。注意:存儲函數(shù)式M文件時文件名要與主函數(shù)名相一致。28.12.2024.44函數(shù)式文件:functionabcd(a,b)c=a+bd=b-a保存為abcd.m在工作窗口中調(diào)用:>>a=2;b=[3,4,5,6];>>abcd(a,b)c=5678d=1234>>c%結(jié)果是什么?命令式文件:a=2;b=[3456];c=a+b;d=b-a;保存為:abcd.m在工作窗口中調(diào)用:>>abcd%文件名即可>>cc=5678>>dd=123428.12.2024.45函數(shù)變量及變量作用域變量主要有輸入變量、輸出變量及函數(shù)內(nèi)部變量。輸入變量相當(dāng)于函數(shù)的入口數(shù)據(jù),是一個函數(shù)操作的主要對象。函數(shù)的作用就是對輸入變量進(jìn)行加工以實(shí)現(xiàn)一定的功能。函數(shù)的輸入變量為形式參數(shù),即只是傳遞變量的值而不是變量的地址,函數(shù)對輸入變量的一切的操作和修改如果不依靠輸出變量傳出的話,將不會影響工作空間中該變量的值。

matlab語言提供了函數(shù)nargin來控制輸入變量的個數(shù),即可以實(shí)現(xiàn)不定參數(shù)輸入的操作。例如:在函數(shù)test1中,如果調(diào)用過程時只提供一個輸入變量,則求該輸入變量的模;如果是兩個輸入變量,則求兩個輸入變量的和28.12.2024.46%如果調(diào)用過程時只提供一個輸入變量,則求該輸入變量%的模;如果是兩個輸入變量,則求兩個輸入變量的和functionc=test1(a,b)ifnargin==1c=norm(a);elseifnargin==2c=a+b;end在工作窗口調(diào)用:>>a=[234]a=234>>test1(a)ans=5.3852>>b=3;>>test1(a,b)ans=56728.12.2024.47

同時,matlab語言還提供了另一個針對輸入變量的函數(shù)varargin。該函數(shù)可以實(shí)現(xiàn)不定數(shù)目輸入變量的函數(shù)的程序設(shè)計(jì)。此時,對函數(shù)的一切輸入變量均將存儲在以varargin命名的單元型數(shù)組中。例:在函數(shù)test2中,實(shí)現(xiàn)如下功能:通過使用函數(shù)varargin,用戶可以輸入任意多個學(xué)生的數(shù)學(xué)、英語及語文的成績,然后求各科目的平均值。程序如下:28.12.2024.48function[mathavg,englishavg,chineseavg]=test2(varargin)s=length(varargin);%求數(shù)組的長度mathsum=0;englishsum=0;chinesesum=0;forj=1:smathsum=mathsum+varargin{j}(1);englishsum=+varargin{j}(2);chinesesum=+varargin{j}(3);endmathavg=mathsum/s;englishavg=englishsum/s;chineseavg=chinesesum/s;思考:此函數(shù)如何調(diào)用。28.12.2024.49

與輸入變量相對應(yīng),matlab語言對輸出變量也提供了相應(yīng)的函數(shù),如nargout、varargout等。具體的使用與函數(shù)nargin和varargin相似。下面給出一個綜合應(yīng)用示例。示例函數(shù)test3中,綜合使用了函數(shù)nargin、nargout、narargin、narargout等,函數(shù)目的是求各學(xué)生(總數(shù)不確定)的個人平均成績,以及指定科目的平均成績等。函數(shù)test2的調(diào)用:[90,89,60]分別表示數(shù)學(xué)、英語、語文的成績>>[a,b,c]=test2([90,89,60],[79,89,66],[99,98,100])a=89.3333b=32.6667c=33.3333思考:如果多個學(xué)生的成績是同一科目的成績放在一個數(shù)組中,如何修改test2函數(shù)。28.12.2024.50

function[vararout]=test3(lessons,varargin)inputnum=nargin;lessonnum=length(lessons);outputnum=nargout;fori=1:lessonnumswitchlessons(i)case'math'vararout{1}=sum(varargin{1:inputnum}(1));case'english'vararout{2}=sum(varargin{1:inputnum}(2));case'chinese'vararout{3}=sum(varargin{1:inputnum}(3));endendfori=1:inputnumvarargout{i+3}=sum(varargin{i}(:));end28.12.2024.51

在matlab中,函數(shù)內(nèi)部定義的變量除特殊聲明外均為局部變量。如果需要使用全局變量,則應(yīng)當(dāng)使用命令global定義,而且在任何使用該全局變量的函數(shù)中都應(yīng)加以定義,在命令窗口中也不例外。注意:變量之間必須以空格分隔,而不能用逗號分隔。示例:function[avgs]=test4(A)globalsss%定義全局變量[m,n]=size(A);fori=1:ms(i)=sum(A(i,:));endss=sum(s);avgs=ss/(m*n);調(diào)用test4:>>a=[435;678;357;134];>>test4(a)ans=4.6667>>globalsss>>ssss=56>>ss=122115828.12.2024.52子函數(shù)與局部函數(shù)

Matlab中也可以定義子函數(shù),用來擴(kuò)充函數(shù)的功能。在函數(shù)文件中題頭定義的函數(shù)為主函數(shù),而在函數(shù)體內(nèi)定義的其他函數(shù)均被視為子函數(shù)。子函數(shù)只能為主函數(shù)或同一主函數(shù)下的其他的子函數(shù)所調(diào)用。示例:functionc=test(a,b)%主函數(shù)c=test1(a,b)*test2(a,b);functionc=test1(a,b)%子函數(shù)1c=a+b;functionc=test2(a,b)%子函數(shù)2c=a-b;28.12.2024.53

局部函數(shù)與子函數(shù)的區(qū)別是:局部函數(shù)可以被其父目錄下的所有函數(shù)所調(diào)用,而子函數(shù)則只能被其所在M文件的主函數(shù)所調(diào)用;在函數(shù)編輯的結(jié)構(gòu)上,局部函數(shù)與一般的函數(shù)文件的編輯相同,而子函數(shù)則只能在主函數(shù)文件中編輯。28.12.2024.54程序設(shè)計(jì)的輔助函數(shù)用戶交互函數(shù)

鍵盤輸入函數(shù)包括函數(shù)input及keyboard。函數(shù)input用于提示用戶輸入指定參數(shù)的值,調(diào)用格式:

var=input(‘提示性語句’)

其中,“提示性語句”將給出相應(yīng)的提示信息以告知用戶輸入的對象,在這種調(diào)用過程中,用戶可以有鍵盤輸入任何的可計(jì)算的表達(dá)式或已賦值的當(dāng)前工作空間中的變量名,而且返回至變量var中的值也是數(shù)值型,所有的輸入以回車鍵加以確認(rèn)。

28.12.2024.55第一種調(diào)用格式:>>a=input('inputexample\n')inputexample1+4a=5>>ischar(a)ans=0第二種調(diào)用格式:>>b=input('inputexample\n','s')inputexample1+4b=1+4>>ischar(b)ans=1函數(shù)input的另一種調(diào)用格式:

var=input(‘提示性語句’,’s’)以該格式調(diào)用時,input函數(shù)將視用戶鍵盤輸入的一切字符為字符型賦予變量var,而不對其進(jìn)行任何計(jì)算。在提示型語句中可以用“\n”來控制顯示時的換行。例如:28.12.2024.56

另一種輸入函數(shù)為keybroad,該函數(shù)出現(xiàn)在M文件中時,將終止程序的運(yùn)行,此時用戶可以查看運(yùn)算過程中各變量的值必要時也可進(jìn)行適當(dāng)?shù)母缮婕熬庉?。同時該函數(shù)在matlab語言中均可應(yīng)用,直到鍵入return并回車,這時程序返回中斷處,繼續(xù)執(zhí)行其余代碼。

matlab也提供了一種中斷函數(shù)pause,其調(diào)用格式:

pause(n)該命令的作用是中斷程序運(yùn)行并等待n秒。如果不帶參數(shù),則程序無限期中斷,直到用戶在鍵盤上鍵入任意鍵。28.12.2024.57流程控制語句

Matlab語言的流程控制語句主要有for、while、if-else-end和switch-case這四種語句。for語句

for循環(huán)語句是流程控制語句中的基礎(chǔ),使用該循環(huán)語句可以以指定的次數(shù)重復(fù)執(zhí)行循環(huán)體內(nèi)的語句。

for循環(huán)語句的調(diào)用形式:

for循環(huán)控制變量=<循環(huán)次數(shù)設(shè)定>(可以是已定義的向量,也可在for循環(huán)語句中定義)循環(huán)體

end回到主目錄28.12.2024.58fori=1:4%初始值:步長:終值(步長默認(rèn)為1) forj=4:-1:1 H(i,j)=1/(i+j-1); endend結(jié)果:>>HH=1.00000.50000.33330.25000.50000.33330.25000.20000.33330.25000.20000.16670.25000.20000.16670.142928.12.2024.59

循環(huán)次數(shù)的設(shè)定還可以由mxn矩陣來實(shí)現(xiàn),此時,整個循環(huán)將執(zhí)行n次,并且每次循環(huán)變量為一列向量。例如:a=[1234;5678];s=0;fori=ais=s+1;endi=15i=26i=37i=48s=?28.12.2024.60while語句

while循環(huán)語句與for循環(huán)語句不同的是,前者是以條件的滿足與否來判斷循環(huán)是否結(jié)束的,而后者則是以執(zhí)行次數(shù)是否達(dá)到指定值來判斷的。

while循環(huán)語句的一般形式:

while<循環(huán)判斷語句>

循環(huán)體

end

循環(huán)判斷語句為某種形式的邏輯判斷表達(dá)式。當(dāng)表達(dá)式的值為真時就執(zhí)行循環(huán)體內(nèi)的語句;否則退出。當(dāng)循環(huán)判斷語句為矩陣時,當(dāng)且僅當(dāng)所有的矩陣元素非零時,邏輯表達(dá)式的值為真。例如:28.12.2024.61n=0;while2^n<100n=n+1;end

從例子中可以看出while循環(huán)語句與for循環(huán)語句是有異曲同工之處的。但是兩者還是有區(qū)別的,for循環(huán)語句一般適用于已知到循環(huán)次數(shù),而不知道循環(huán)運(yùn)算目標(biāo)的問題;while循環(huán)語句則一般適用于已知循環(huán)運(yùn)算目標(biāo),而循環(huán)次數(shù)未知的問題。break語句:當(dāng)程序流程運(yùn)行至該命令時,則不論循環(huán)控制變量是否滿足循環(huán)判斷語句,均將退出當(dāng)前循環(huán),執(zhí)行循環(huán)后的其他語句。continue命令:當(dāng)程序流程運(yùn)行至該命令時,會忽視其后的循環(huán)體操作轉(zhuǎn)而執(zhí)行下一層的循環(huán)。28.12.2024.62例1.計(jì)算級數(shù):S=1+2+22+23+···+263=法一:s=0;i=0;whilei<64s=s+2^i;i=i+1;end法二:>>n=0:1:63;>>S=sum(2.^n)28.12.2024.63if-else-end語句

if-else-end語句的一般形式:

if<邏輯判斷語句>

邏輯值為“真”時執(zhí)行語句

else

邏輯值為“假”時執(zhí)行語句

end例如:

ifa==1a=a+1;elsea=a+2;end28.12.2024.64

在程序設(shè)計(jì)中,也常碰到需要進(jìn)行多重邏輯選擇的問題,這時可以采用if-else-end語句的嵌套形式:

if<邏輯判斷語句1>

邏輯值1為“真”時執(zhí)行語句

elseif<邏輯判斷語句2>

邏輯值2為“真”時執(zhí)行語句

elseif<邏輯判斷語句3>……else

當(dāng)以上所有的邏輯值均為“假”時執(zhí)行語句

end28.12.2024.65IfA>B'greater'elseifA<B'less'elseifA==B'equal'elseerror('AandBaredifferentdata')end解讀這段程序:a=10000;n=0;z=1;whilez<an=n+1;ifmod(n,2)==1continueendz=2^n-1;if~isprime(z)%是否質(zhì)數(shù)

breakendend28.12.2024.66switch-case語句

switch-case語句是用于解決多分支判斷選擇的問題。switch-case語句的一般表達(dá)形式:

switch<選擇判斷量>case選擇判斷值1

選擇判斷語句1case選擇判斷值2

選擇判斷語句2……otherwise

判斷執(zhí)行語句end28.12.2024.67例如:code=1switchcodecase-1disp('error');case0disp('writeinEnglish');case1disp('writeinChinese');otherwisedisp('writeinFrench');end結(jié)果:writeinChinese

注意:在matlab語言中,即使有多條case判斷語句為真,也只執(zhí)行所遇到的第一條為真的語句。不必像C語句那樣,在每條case語句后加上break語句防止繼續(xù)執(zhí)行后面為真的case條件語句。28.12.2024.68例:求雞兔同籠問題:雞兔同籠,頭共36,腳共100.求雞、兔各幾只?程序如下:i=1;while1ifmod(100-2*i,4)==0&i+(100-2*i)/4=36%函數(shù)mod表示取余

break;endenda1=i;a2=36-i;上述程序中有兩個錯誤,請指出!28.12.2024.69MATLAB在數(shù)值計(jì)算中的應(yīng)用數(shù)值計(jì)算的基本要素及相關(guān)函數(shù)數(shù)據(jù)的統(tǒng)計(jì)分析曲線擬合及插值數(shù)值分析28.12.2024.70數(shù)值計(jì)算的基本要素及相關(guān)函數(shù)MATLAB語言在數(shù)值計(jì)算中的基本要素主要有數(shù)組、多項(xiàng)式和矩陣。數(shù)組及相關(guān)函數(shù)數(shù)組的創(chuàng)建數(shù)組的定義相當(dāng)簡捷,主要有三種格式:

x=x1:step:x2(初始值:步長:尾元素數(shù)值限)y=linspace(x1,x2,n)(初始值:終止值:數(shù)組元素個數(shù))n默認(rèn)為100y=logspace(x1,x2,n)(初始值:終止值:數(shù)組元素個數(shù))n默認(rèn)為50回到主目錄28.12.2024.71例如:>>a=1:2:12a=1357911>>b=linspace(1,10,10)b=12345678910>>c=logspace(0,2,10)c=1.00001.66812.78264.64167.742612.915521.544335.938159.9484100.000028.12.2024.72數(shù)組的操作

例如:a=1357911>>a(3)%取a數(shù)組中的第3個元素ans=5>>a(2:5)%取數(shù)組a中第2個元素到第5個元素ans=3579>>a.^2%數(shù)組的平方ans=19254981121>>length(a)%檢測數(shù)組的長度,返回數(shù)組的元素個數(shù)ans=628.12.2024.73多維數(shù)組多維數(shù)組從某種角度來看,它是矩陣在維數(shù)上的擴(kuò)張,實(shí)際上也是矩陣中的一個特例。它可以是數(shù)值型、字符型、單元型或結(jié)構(gòu)型等。多維數(shù)組在創(chuàng)建及處理上與一維數(shù)組或普通矩陣有很大的不同。其創(chuàng)建方法有很多,可以仿照一維數(shù)組的定義,也可以通過matlab的有關(guān)函數(shù)來創(chuàng)建。直接賦值:例如:>>A(:,:,1)=[123;456;678];>>A(:,:,2)=[789;567;321];>>A(:,:,3)=[987;654;234];28.12.2024.74注意多維數(shù)組的顯示方法:>>AA(:,:,1)=123456678A(:,:,2)=789567321A(:,:,3)=987654234A(2,3,2)=?A(:,:,1)A(:,:,2)A(:,:,3)123456678789567321987654234數(shù)組A就像一個分塊矩陣,每塊都是3x3的矩陣。28.12.2024.75

還可以簡單的只對其中某一維的元素進(jìn)行賦值。系統(tǒng)會根據(jù)賦值的情況來確定該變量的具體維數(shù)結(jié)構(gòu)并將其他未賦值的元素自動賦為零。例如:>>B(:,:,3)=[1,2;3,4];>>BB(:,:,1)=0000B(:,:,2)=0000B(:,:,3)=1234>>C(:,2,:)=[12;34];>>CC(:,:,1)=0103C(:,:,2)=0204問:e(:,2,:)=[123;456]將是什么樣的數(shù)組?S(2,:,:)=[123;456]?123428.12.2024.76matlab語言中也提供了相應(yīng)的函數(shù)來創(chuàng)建多維數(shù)組,如rand、ones、zeros等。其使用方法與創(chuàng)建一維數(shù)組相同。例如:>>D=rand(2,3,2,2)%該例中顯示了四維數(shù)組。%類似于2x2的分塊矩陣,每塊都是2x3的矩陣。D(:,:,1,1)=0.95010.60680.89130.23110.48600.7621D(:,:,2,1)=0.45650.82140.61540.01850.44470.7919D(:,:,1,2)=0.92180.17630.93550.73820.40570.9169D(:,:,2,2)=0.41030.05790.81320.89360.35290.00991112212228.12.2024.77

函數(shù)cat也是創(chuàng)建多維數(shù)組的一個實(shí)用的工具。其調(diào)用方法:cat(dim,A1,A2,…)

輸入?yún)?shù)中的dim為定義的維數(shù),A1、A2等為構(gòu)建數(shù)組的元素。例如:>>E=cat(4,[12;34],[56;78])E(:,:,1,1)=1234E(:,:,1,2)=567828.12.2024.78多項(xiàng)式及相關(guān)函數(shù)

多項(xiàng)式的定義

多項(xiàng)式的定義如下:對于多項(xiàng)式,用以下行向量表示:這樣就把多項(xiàng)式的問題轉(zhuǎn)化為行向量的問題了。28.12.2024.79

最簡單的多項(xiàng)式輸入即為直接的向量輸入,matlab自動將向量元素按降冪順序分配給各系數(shù)值。例如:輸入多項(xiàng)式x^3-5x^2+6x-33.>>p=[1-56-33];>>poly2sym(p)%此函數(shù)可將多項(xiàng)式向量表示成符號多項(xiàng)式形式

ans=x^3-5*x^2+6*x-3328.12.2024.80多項(xiàng)式的操作下表是matlab中較常用的多項(xiàng)式函數(shù)。函數(shù)名說明函數(shù)名說明roots多項(xiàng)式求根polyfit多項(xiàng)式擬合poly由根創(chuàng)建多項(xiàng)式polyder求多項(xiàng)式導(dǎo)數(shù)polyval多項(xiàng)式求值conv多項(xiàng)式乘法polyvalm矩陣多項(xiàng)式求值deconv多項(xiàng)式除法28.12.2024.81

多項(xiàng)式求根函數(shù)roots的調(diào)用格式:

roots(P)通過該函數(shù)可以求得方程p=0在復(fù)數(shù)范圍內(nèi)的解。例如:函數(shù)poly與roots相對應(yīng),其作用是由多項(xiàng)式對應(yīng)的方程的根來創(chuàng)建多項(xiàng)式。例如:>>p=[103211];>>r=roots(p)r=0.3202+1.7042i0.3202-1.7042i-0.72090.0402+0.6780i0.0402-0.6780i>>poly(r)ans=1.00000.00003.00002.00001.00001.0000可見roots與poly是互逆運(yùn)算。注意:由poly創(chuàng)建的多項(xiàng)式最高次系數(shù)為1.28.12.2024.82Matlab中通過函數(shù)polyval和函數(shù)polyvalm可求得多項(xiàng)式在給定點(diǎn)的值:函數(shù)polyval:在輸入變量值代人多項(xiàng)式計(jì)算時是以數(shù)組為單位的,polyval(p,v)。函數(shù)polyvalm:以矩陣為計(jì)算單位,進(jìn)行矩陣式運(yùn)算,以求多項(xiàng)式的值,polyvalm(p,v)。這兩種計(jì)算在數(shù)值上有很大差別。例如:對同一多項(xiàng)式及變量值分別計(jì)算矩陣計(jì)算值和數(shù)組計(jì)算值。28.12.2024.83>>p=[11155125];b=[11;11];>>polyval(p,b)ans=192192192192>>polyvalm(p,b)ans=206818120628.12.2024.84

多項(xiàng)式的乘法由函數(shù)conv來實(shí)現(xiàn),此函數(shù)同于向量的卷積;多項(xiàng)式的除法由函數(shù)deconv來實(shí)現(xiàn),此函數(shù)同于向量的解卷。例:計(jì)算兩個多項(xiàng)式的乘除法。>>p=[2-56-19];poly2sym(p)ans=2*x^4-5*x^3+6*x^2-x+9>>d=[3-90-18];poly2sym(d)ans=3*x^2-90*x-18>>pd=conv(p,d)pd=6-195432-4539-792-162>>poly2sym(pd)ans=6*x^6-195*x^5+432*x^4-453*x^3+9*x^2-792*x-162>>p1=deconv(pd,d)%與p相同p1=2-56-1928.12.2024.85多項(xiàng)式的微分由函數(shù)polyder來實(shí)現(xiàn)。例:對上例中多項(xiàng)式p進(jìn)行微分計(jì)算。>>p=[2-56-19];poly2sym(p)ans=2*x^4-5*x^3+6*x^2-x+9>>dp=polyder(p)dp=8-1512-1>>poly2sym(dp)ans=8*x^3-15*x^2+12*x-128.12.2024.86矩陣及相關(guān)函數(shù)矩陣的基本運(yùn)算矩陣的加減運(yùn)算與傳統(tǒng)的矩陣運(yùn)算相同,但在乘法運(yùn)算中,就有關(guān)于算術(shù)乘(矩陣乘方)與點(diǎn)乘(點(diǎn)乘方)的區(qū)別,下面用示例說明兩者的具體差別。>>a=[12;34];>>b=[56;78];>>c=a*bc=19224350>>d=a.*bd=5122132>>a^2ans=7101522>>a.^2ans=1491628.12.2024.87

在介紹矩陣除法前,先介紹矩陣與線性方程組之間的關(guān)系。對于線性方程組Ax=b,其中A為(n×m)階矩陣:n=m且非奇異時,方程為恰定方程;n>m 方程為超定方程;(方程個數(shù)大于未知數(shù)的個數(shù))n<m方程為不定方程。(方程個數(shù)小于未知數(shù)的個數(shù))如果n>m,矩陣除法仍然可以得到方程的解,但不是精確解,而是近似解,該解確保誤差向量Ax-b的二范數(shù)最小。如果n<m,即存在無窮多解,矩陣除法將會產(chǎn)生包含零元素最多的解,并一定是最小二乘解。28.12.2024.88例如:n>m>>A=[1,4,6;3,5,6;7,8,3;4,6,7];>>b=[34,54,57,87];>>x=A\b'x=25.2078-20.520114.8480>>res=A*x-b‘;>>norm(res,2)ans=9.8821例如:n<m>>A=[2445;3451;7836];>>b=[234557];>>x=A\b'x=010.21871.8333-5.0417>>norm(A*x-b',2)ans=2.5619e-01428.12.2024.89線性方程組的另一種解法:就是利用偽逆函數(shù)pinv:x=pinv*b。例如:>>A=[2445;3451;7836];>>b=[234557];>>y=pinv(A)*b‘y=4.97104.00503.4903-3.3847>>norm(A*x-b',2)ans=2.5619e-01428.12.2024.90矩陣函數(shù)

這里介紹部分常用的函數(shù)。以示例的形式說明。>>A=[123;456;789];>>diag(A)%抽取矩陣的對角線ans=159>>diag(diag(A))%由矩陣的對角線生成對角陣ans=10005000928.12.2024.91A=123456789>>tril(A)%抽取矩陣的下三角ans=100450789>>flipdim(A,2)%以第2列為軸線翻轉(zhuǎn)矩陣ans=32165498728.12.2024.92A=123456789>>find(A)‘%返回矩陣A的非零元素的存儲下標(biāo),是列向量,故轉(zhuǎn)置顯示ans=123456789>>rot90(A)%矩陣A逆時針旋轉(zhuǎn)90度ans=369258147>>rank(A)%求矩陣A的秩ans=228.12.2024.93A=123456789>>det(A)%求矩陣A的行列式ans=0>>cond(A)%求矩陣的條件數(shù)ans=5.0524e+016

在matlab中,判斷矩陣的奇異性一般用函數(shù)cond,求矩陣的條件數(shù),即矩陣最大奇異值與最小奇異值的比值。當(dāng)矩陣的條件數(shù)很大時,說明矩陣趨近于奇異。28.12.2024.94函數(shù)[x,y]=eig(A)可以求出矩陣A的特征值和特征向量的值

x為特征向量矩陣,y為特征值矩陣。>>A=[73-2;34-1;-2-13];>>[x,y]=eig(A)x=0.57740.0988-0.8105-0.5774-0.6525-0.49080.5774-0.75130.3197y=2.00000002.39440009.605628.12.2024.95Svd函數(shù)給出了矩陣的奇異值以及奇異值分解矩陣。[U,S,V]=svd(X)其中X=U×S×V’>>a=[1;1];>>[U,S,V]=svd(a)U=0.7071-0.70710.70710.7071S=1.41420V=128.12.2024.96

LU分解:[L,U]=lu(A)又稱三角分解,目的是分解成一個下三角陣L和一個上三角陣U的乘積,即A=L×U>>a=[123;241;467];>>[l,u]=lu(a)l=0.25000.50001.00000.50001.000001.000000u=4.00006.00007.000001.0000-2.5000002.5000注意:L實(shí)際上是一個“心理上”的下三角矩陣,它事實(shí)上是一個置換矩陣P的逆矩陣與一個真正下三角矩陣L1(其對角線元素為1)的乘積。28.12.2024.97Chol分解:如果A為n階對稱正定矩陣,則存在一個非奇異下三角實(shí)矩陣L,使得A=LLT,當(dāng)限定L的對角元素為正時,這種分解是唯一的。>>a=[4-11;-14.252.75;12.753.5];>>chol(a)ans=2.0000-0.50000.500002.00001.5000001.000028.12.2024.98

正交分解:A=QR將矩陣A做正交化分解,使得Q*R=A,其中Q為正交矩陣(其范數(shù)為1,指令norm(Q)=1),R為對角化的上三角矩陣。>>a=[111;2-1-1;2-45];>>[q,r]=qr(a)q=-0.3333-0.6667-0.6667-0.6667-0.33330.6667-0.66670.6667-0.3333r=-33-30-3300-328.12.2024.99數(shù)據(jù)的統(tǒng)計(jì)分析

一般來講,矩陣的每一列代表統(tǒng)計(jì)過程不同的數(shù)據(jù)結(jié)果,而每一行則相應(yīng)代表不同的樣品。統(tǒng)計(jì)函數(shù)介紹

統(tǒng)計(jì)函數(shù)中的大部分函數(shù)都是針對列進(jìn)行操作的。下表中列出部分常用的統(tǒng)計(jì)函數(shù)?;氐街髂夸?8.12.2024.100函數(shù)說明函數(shù)說明max最大分量cumsum列累計(jì)和min最小分量cumprod列累計(jì)積mean平均值或列的平均值sort按升序排列std列的標(biāo)準(zhǔn)差sortrows按升序?qū)π信帕衯ar列的方差trapz梯形數(shù)值積分corrcoef相關(guān)系數(shù)cov協(xié)方差矩陣sum列求和conv卷積prod列求積hist直方圖28.12.2024.101應(yīng)用實(shí)例

數(shù)據(jù)如下給出了12個學(xué)生的英語、數(shù)學(xué)、物理、化學(xué)和哲學(xué)的成績。score=90999897779067875667899976677778889876895666754586677878899088788975856575766374736384769076869

溫馨提示

  • 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

提交評論