MATLAB入門學習 Matlab程序設計課件_第1頁
MATLAB入門學習 Matlab程序設計課件_第2頁
MATLAB入門學習 Matlab程序設計課件_第3頁
MATLAB入門學習 Matlab程序設計課件_第4頁
MATLAB入門學習 Matlab程序設計課件_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Matlab程序設計第8講Matlab程序設計第8講1Matlab命令的執(zhí)行方式Application

of

Matlab

Language2013/9/102

交互式命令執(zhí)行方式(命令窗口)逐條輸入,逐條執(zhí)行,操作簡單、直觀,但速度慢,執(zhí)行過程不能保留。

M文件的程序執(zhí)行方式將命令編成程序存儲在一個文件中(M文件),依次運行文件中的命令,可以重復進行。

Matlab程序設計有傳統(tǒng)高級語言的特征,又有自己獨特的特點,可以利用數據結構的特點,使程序結構簡單,編程效率高。Matlab命令的執(zhí)行方式ApplicationofMa5.1 M文件的分類Application

of

Matlab

Language2013/9/103

用Matlab語言編寫的程序,稱為M文件。是由若干Matlab命令組合在一起構成的,它可以完成某些操作,也可以實現某種算法。

M文件根據調用方式的不同分為兩類:命令文件(Script

File)函數文件(Function

File)

它們的擴展名都是.m5.1 M文件的分類ApplicationofMatla命令文件和函數文件的區(qū)別Application

of

Matlab

Language2013/9/104

命令文件沒有輸入參數,也不返回輸出參數;函數文件可以帶輸入參數,也可以返回輸出參數。

命令文件對工作空間中的變量進行操作,文件中所有命令的執(zhí)行結果也返回工作空間中;函數文件中定義的變量為局部變量,當函數文件執(zhí)行完畢時,這些變量也被清除。

命令文件可以直接運行;函數文件不能直接運行,要以函數調用的方式來調用它。命令文件和函數文件的區(qū)別ApplicationofMat例5.1

建立文件將變量a、b的值互換。Application

of

Matlab

Language2013/9/105命令文件:clear;a

=

1:10;b=[11,12,13,14;15,16,17,18];c

=

a;

a

=

b;

b

=c;ab將文件保存為exch,并在命令窗口執(zhí)行。執(zhí)行結果:a

=b

=1 2 3 4 5 6 7 8 9 101112131415161718例5.1建立文件將變量a、b的值互換。Applicatio函數文件Application

of

Matlab

Language2013/9/106fexch.mfunction

[a,b]

=exch(a,b)c

=

a;

a

=

b;

b

=

c;然后在命令窗口調用該函數文件:clear;x

=

1:10;y=[11,12,13,14;15,16,17,18];[x,y]=fexch(x,y)輸出結果為:a

=b

=1 2 3 4 5 6 7 8 9 10函數參數a,b,c未保留在工作空間中,x,y保留在工作空間中。1112131415161718函數文件ApplicationofMatlabLangM文件的建立與打開M文件是一個文本文件,可以用任何編輯程序來建立和編輯,一般最常用的是使用Matlab提供的文本編輯器。作環(huán)境。該編輯器是一個集編輯和調試于一體的工Application

of

Matlab

Language2013/9/107M文件的建立與打開M文件是一個文本文件,可以用任何編輯程序來5.2

程序控制結構Application

of

Matlab

Language2013/9/108

順序結構

選擇結構

循環(huán)結構任何復雜的程序都可以由這3種基本結構構成。5.2程序控制結構ApplicationofMatla5.2.1

順序結構Application

of

Matlab

Language2013/9/109

順序結構是指按照程序中語句的排列順序依次執(zhí)行,直到程序的最后一個語句。(最簡單的一種程序)1、數據的輸入從鍵盤輸入數據,則可以使用input函數來進行,調用格式為:A=input(提示信息,選項);其中提示信息為一個字符串,用于提示用戶輸入數據。

例如:從鍵盤輸入A矩陣,可以采用下面的命令來完成

A

=

input(‘輸入A矩陣’);如果在input函數調用時采用’s’選項,則允許用戶輸入一個字符串。例:xm

=

input(‘What’’s

your

name?’,’s’);5.2.1順序結構ApplicationofMatla5.2.1順序結構Application

of

Matlab

Language2013/9/10102、數據的輸出

命令窗口輸出函數主要有disp函數,其調用格式為:

disp(輸出項)

其中輸出項既可以為字符串,也可以為矩陣。例如:

A

=

‘Hello,

Tom’;disp(A)輸出為:Hello,

Tom又如:A=[1,2,3;4,5,6;7,8,9];disp(A)輸出為:%disp函數輸出格式更緊湊1234567895.2.1順序結構ApplicationofMatla5.2.1

順序結構Application

of

Matlab

Language2013/9/1011例5.2 求一元二次方程

ax2

bx

c

0

的根。

由于Matlab能進行復數運算,所以不需要判斷方程的判別式,可直接根據求根公式求根。程序如下:a=input('a=?');b=input('b=?');c

=

input('c=?');d

=

b*b-4*a*c;x

=

[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);程序輸出為:a=?4b=?78c=?54x1=-0.7188,x2=-18.78125.2.1順序結構ApplicationofMatla5.2.1順序結構Application

of

Matlab

Language2013/9/10123、程序的暫停

程序執(zhí)行過程中暫停,可用pause函數,其調用格式為:pause(延遲描述)

如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。若要強行中止程序的運行可按Ctrl+C鍵。5.2.1順序結構ApplicationofMatla5.2.2選擇結構Application

of

Matlab

Language2013/9/1013選擇結構是根據給定的條件成立或不成立,分別執(zhí)行不同的語句。Matlab用于實現選擇結構的語句有if語句,switch語句和try語句。1.

if語句

在Matlab中,if語句有3種格式。

(1)單分支if語句語句格式:if

條件語句組end例如:當x是整數矩陣時,輸出x的值if

fix(x)==xdisp(x);end5.2.2選擇結構ApplicationofMatla5.2.2

選擇結構Application

of

Matlab

Language2013/9/1014(2)雙分支if語句語句格式:if

條件語句組

1else語句組 2end當條件成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,然后再執(zhí)行if語句的后續(xù)語句。5.2.2選擇結構ApplicationofMatla5.2.2選擇結構例5.3

計算分段函數:x2

1,

x

10Application

of

Matlab

Language2013/9/1015cos(

x

1)

x x

x

,

x

10y

程序如下:x

=

input(‘請輸入x的值:');if

x

==

10y

=

cos(x+1)+sqrt(x*x+1);elsey

=

x*sqrt(x+sqrt(x));endy也可以用單分支if語句來實現:x

=

input('請輸入x的值:

');y

=

cos(x+1)+sqrt(x*x+1);if

x~=10y

=

x*sqrt(x+sqrt(x));endy5.2.2選擇結構例5.3計算分段函數:x21,5.2.2選擇結構Application

of

Matlab

Language2013/9/1016(3)多分支if語句語句格式:if

條件1語句組

1elseif

條件2語句組 2…elseif 條件m

語句組 melse語句組nend5.2.2選擇結構ApplicationofMatla例5.4

大小寫字母的置換Application

of

Matlab

Language2013/9/1017輸入一個字符,若為大寫字母,則輸出其對應的小寫字母;若為小寫字母,則輸出其對應的大寫字母;若為數字字符則輸出其對應的數值,若為其他字符則原樣輸出。程序如下:c

=

input(‘請輸入一個字符’,‘s’);if

c

>=‘A’

&

c<=‘Z’disp(setstr(abs(c)+

abs(‘a’)-abs(‘A’)));elseif

c>=‘a’

&

c<=‘z’disp(setstr(abs(c)-abs(‘a’)

+

abs(‘A’)));elseif

c>=‘0’

&

c<=‘9’disp(abs(c)-abs(‘0’));elsedisp(c);endsetstr函數可以得到ASCⅡ碼例5.4大小寫字母的置換ApplicationofMa5.2.2

選擇結構Application

of

Matlab

Language2013/9/10182、switch語句

switch語句根據表達式的取值不同,分別執(zhí)行不同的語句,其語句格式:

switch

表達式case表達式1語句組1case表達式2語句組2…case表達式m語句組motherwise語句組

nendswitch子句后面的表達式應為一個標量或一個字符串;

case子句后面的表達式不僅可以為一個標量或一個字符串,還可以為一個元胞矩陣。5.2.2選擇結構ApplicationofMatla例5.5Application

of

Matlab

Language2013/9/1019某商場對顧客所購買的商品實行打折銷售,標準如下:price<200200<=price<500500<=price<10001000<=price<25002500<=price<50005000<=price沒有折扣3%折扣5%折扣8%折扣10%折扣14%折扣輸入所售商品的價格,求其實際銷售價格。請同學們試著編程實現。例5.5ApplicationofMatlabLang程序如下Application

of

Matlab

Language2013/9/1020price

=

input(‘請輸入商品價格’);switch

fix(price/100)case{0,1}rate

=

0;case{2,3,4}rate

=

3/100;

case

num2cell(5:9)rate

=

5/100;case

num2cell(10:24)rate

=

8/100;case

num2cell(25:49)rate

=

10/100;otherwiserate

=

14/100;endprice

=

price*(1-rate)%價格小于200%價格大于等于200但小于500%價格大于等于500但小于1000%價格大于等于1000但小于2500%價格大于等于2500但小于5000%價格大于等于5000%輸出商品實際銷售價格num2cell函數是將數值矩陣轉化為單元矩陣。程序如下ApplicationofMatlabLang5.2.2

選擇結構Application

of

Matlab

Language2013/9/10213.try語句try語句是一種試探性執(zhí)行語句,其語句格式為:try語句組1catch語句組2endtry語句先試探性執(zhí)行語句組1,如果在執(zhí)行過程中出現錯誤,則將錯誤信息賦給保留的lasterr變量,并轉去執(zhí)行語句組2.5.2.2選擇結構ApplicationofMatla例5.6Application

of

Matlab

Language2013/9/1022矩陣乘法運算要求兩矩陣的維數相容,否則會出錯。先求兩矩陣的乘積,若出錯則自動轉去求兩矩陣的點乘。程序如下:A=[1,2,3;4,5,6];B

=[7,8,9;10,11,12];tryC=

A*B;catchC=A.*B;endClasterr %顯示出錯原因C=7 16 2740 55 72ans=Error

using==>mtimesInner

matrixdimensionsmustagree.例5.6ApplicationofMatlabLang5.2.3循環(huán)結構Application

of

Matlab

Language2013/9/1023循環(huán)是指按照給定的條件,重復執(zhí)行指定的語句,Matlab提供了兩種實現循環(huán)結構的語句:for語句和while語句。1、for語句for語句的格式為:for

循環(huán)變量

=表達式1:表達式2:表達式3循環(huán)體語句end

其中表達式1的值為循環(huán)變量的初值,表達式2的值為步長,表達式3的值為循環(huán)變量的終值。步長為1時,表達式2可以省略。5.2.3循環(huán)結構ApplicationofMatla例5.7已知 y

12

22

32

n2程序如下:,當n=100時,求y的值。y

=

0;n

=100;for

i=1:ny=

y+1/i/i;endy輸出結果為:y

=1.63501 1 11利用Matlab的特點,常用向量運算來代替循環(huán)操作,程序可以如下:n=100;i=1:n;f

=

1./i.^2;y

=

sum(f)Application

of

Matlab

Language2013/9/1024例5.7已知 y ,當n=100時,求y的5.2.3循環(huán)結構Application

of

Matlab

Language2013/9/10252、while語句while語句的一般格式為:while條件循環(huán)體語句end

其執(zhí)行過程為:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán)。5.2.3循環(huán)結構ApplicationofMatla從鍵盤輸入若干個數,當輸入0時結束輸入,求這些數的平均值和它們的和。Application

of

Matlab

Language2013/9/1026sum

=

0;n=

0;x

=

input(‘Enter

a

number(end

in

0):’);while(x~=0)sum

=

sum+x;n=

n+1;x

=

input(‘Enter

a

number(end

in

0):’);endif(n>0)summean=

sum/nend例5.8輸出結果為:Enter

a

number(end

in

0):67Enter

a

number(end

in

0):89Enter

a

number(end

in

0):93Enter

a

number(end

in

0):70Enter

a

number(end

in

0):0sum

=319mean

=79.7500從鍵盤輸入若干個數,當輸入0時結束輸入,求這些數的平均值和A5.2.3

循環(huán)結構Application

of

Matlab

Language2013/9/10273、break語句和continur語句它們一般與if語句配合使用。break語句用于終止循環(huán)的執(zhí)行。當在循環(huán)體內執(zhí)行到該語句時,程序將跳出循環(huán),繼續(xù)執(zhí)行循環(huán)語句的下一語句。continue語句控制跳過循環(huán)體中的某些語句。當在循環(huán)體內執(zhí)行到該語句時,程序將跳過循環(huán)體中所有剩下的語句,繼續(xù)下一次循環(huán)。5.2.3循環(huán)結構ApplicationofMatla例5.9

求[100,200]之間第一個能被21整除的整數。Application

of

Matlab

Language2013/9/1028程序如下:for

n

=

100:200ifrem(n,21)~=0;continueendbreakendn

程序輸出結果為:n

=105例5.9求[100,200]之間第一個能被21整除的整數。Matlab程序設計第9講Matlab程序設計第9講295.3

函數文件Application

of

Matlab

Language2013/9/1030函數文件是另一種形式的M文件,每一個函數文件都定義一個函數。Matlab提供的標準函數大部分是由函數文件定義的。5.3.1函數文件的基本結構函數文件由function語句引導,其基本結構為:

function

輸出形參表

=

函數名(輸入形參表)注釋說明部分函數體語句其中,以function開頭的一行為引導行,表示該M文件是一個函數文件。當輸出形參多于一個時,應該用方括號括起來。5.3函數文件ApplicationofMatlab說明:Application

of

Matlab

Language2013/9/10311.

關于函數文件名函數文件名通常由函數名再加上擴展名.m組成。當函數文件名與函數名不同時,Matlab將忽略函數名而確認文件名因此調用時使用函數文件名。2.

關于注釋說明部分注釋說明包括3部分:①

緊隨引導行之后以%開頭的第一注釋行。

這一行一般包括大寫的函數文件名和函數功能簡要描述,供lookfor關鍵詞查詢和help在線幫助時使用。②

第一注釋行及之后連續(xù)的注釋行。通常包括函數輸入/輸出參數的含義及調用格式說明等信息,構成全部在線幫助文本。說明:ApplicationofMatlabLangu說明:Application

of

Matlab

Language2013/9/1032③

與在線幫助文本相隔一空行的注釋行。包括函數文件編寫和修改的信息,如作者和版本等。3、關于return語句

如果在函數文件中插入了return語句,則執(zhí)行到該語句就結束函數的執(zhí)行,流程轉至調用該函數的位置。通常也不使用return語句。

例5.10

編寫函數文件,求半徑為r的圓的面積和周長。

函數文件如下:function

[s,p]

=

fcircle(r)%FCIRCLEcalculatethe

area

and

perimeter

of

acircle

of

radii

r%r%s%p圓半徑圓面積圓周長%2013年8月8日編s

=pi*r*r;p

=

2*pi*r;說明:ApplicationofMatlabLangu說明:Application

of

Matlab

Language2013/9/1033將以上函數文件以文件名fcircle.m保存,然后在命令窗口調用。[s,p]

=

fcircle(10)輸出結果是:s

=314.1593p

=62.8319采用help命令或lookfor命令可以顯示出注釋說明部分的內容。help

fcircle屏幕顯示FCIRCLEcalculate

the

area

andperimeter

of

a

circle

of

radii

rrsp圓半徑圓面積圓周長說明:ApplicationofMatlabLangu5.3.2函數調用Application

of

Matlab

Language2013/9/1034函數調用的一般格式是:[輸出實參表]

=

函數名(輸入實參表)

注意:函數調用時,各實參出現的順序、個數,應與函數定義時相同。

例5.11

利用函數文件,實現直角坐標(x,y)與極坐標(ρ,θ)之間的轉換。函數文件:tran.m:function

[rho,theta]

=tran(x,y)rho

=

sqrt(x*x+y*y);theta

=

atan(y/x);調用tran.m的命令文件main1.m:

x

=

input(‘please

inputx=:’);y=input(‘pleaseinputy=:’);[rho,the]=tran(x,y);rhothe5.3.2函數調用ApplicationofMatla函數的嵌套調用Application

of

Matlab

Language2013/9/1035在Matlab中,函數可以嵌套調用,即一個函數可以調用別的函數。一個函數調用自身稱為函數的遞歸調用。例5.12

利用函數的遞歸調用,求n!。n!本身就是以遞歸的形式定義的:1,n!

n

1n(n

1)!, n

1顯然,求n!需要求(n-1)!,這時可采用遞歸調用。函數如下:functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;

%遞歸調用求(n-1)!end函數的嵌套調用ApplicationofMatlabL函數的嵌套調用Application

of

Matlab

Language2013/9/1036在命令文件中調用該函數文件,求

s

=

1!+2!+3!+4!+5!。s

=

0;for

i

=

1:5s

=s

+

factor(i);ends在命令窗口運行命令文件,結果如下:s

=153函數的嵌套調用ApplicationofMatlabL5.3.3函數參數的可調性Application

of

Matlab

Language2013/9/1037Matlab在函數調用上有一個與一般高級語言不同之處:

函數所傳遞參數數目的可調性,即參數的數量可以改變。

在調用函數時,Matlab用兩個預定義變量nargin和nargout分別記錄調用該函數時的輸入實參和輸出實參的個數。例5.13

nargin用法示例函數文件examp.m:function

fout

=charray(a,b,c)if

nargin

==

1

fout

=

a;endif

nargin

==

2

fout

=

a+b;endif

nargin

==

3fout

=

(a*b*c)/2;end命令文件:x

=

[1:3];y=[1;2;3];examp(x)examp(x,y’)examp(x,y,3)5.3.3函數參數的可調性ApplicationofM5.3.4

全局變量與局部變量Application

of

Matlab

Language2013/9/1038Matlab中,函數文件中的變量是局部變量。如在若干函數中,都把某一變量定義為全局變量,那么這些函數將共用這個變量。全局變量的作用域是整個Matlab的工作空間,所有函數都可以對它進行存取和修改。全局變量用global命令定義,格式為:global

變量名例5.13

全局變量應用示例。先建立函數文件wadd.m,該函數將輸入的參數加權相加:function

f

=

wadd(x,y)global

ALPHABETAf

=

ALPHA*x+BETA*y;在命令窗口中輸入:global

ALPHABETAALPHA=

1;BETA

=

2;s

=

wadd(1,2)輸出為:s

=55.3.4全局變量與局部變量Applicationof5.4

程序調試Application

of

Matlab

Language2013/9/1039程序調試是程序設計的重要環(huán)節(jié),也是程序設計人員必須掌握的重要技能。Matlab提供了相應的程序調試功能,即可以通過文本編輯器對程序進行調試,又可以在命令窗口結合具體的命令進行。5.4.1

程序調試概述一般說來,應用程序的錯誤有兩類,一類是語法錯誤,另一類是運行時的錯誤。語法錯誤,給出相應的錯誤信息,并標出錯誤在程序中的行號。例如:輸入下列程序:A

=

87;B

=

9.3;C=

A+*B;系統(tǒng)將給出錯誤信息:???Error:

File:

Untitled1.m

Line:

3

Column:

7Unexpected

MATLABoperator.通過分析Matlab給出的錯誤信息,不難排查程序中的語法錯誤。5.4程序調試ApplicationofMatlab5.4.1

程序調試概述Matlab對程序邏輯錯誤時無能為力的,不會給出任何提示信息??梢酝ㄟ^調試手段來發(fā)現。采取的方法如下:①

將程序的一些主要中間結果輸出到命令窗口,從而確定錯誤的區(qū)段。②

使用Matlab的調試菜現程序調試。③

或使用命令方式來實單(debug),通過圖像界面操作來現程序調試。實Application

of

Matlab

Language2013/9/10405.4.1程序調試概述Matlab對程序邏輯錯誤時無能為力5.4.2

Matlab調試菜單2.斷點操作stop

if

error/warnings:

在程序執(zhí)行出現錯誤或警告時,停止程序運行,進入調試狀態(tài)。1、控制單步運行

step:單步運行,不進入函數;

step

in:

單步運行,進入函數;

step

out:停止單步運行;save

and

run:存儲文件并開始運行。Application

of

Matlab

Language2013/9/10415.4.2Matlab調試菜單2.斷點操作1、控制單步運例5.15

程序的調試有一個求水仙花數的程序ex.m,試設置斷點來控制程序執(zhí)行。調試步驟如下:①

在if語句處設置斷點:將插入點移至if語句所在行,選擇Debug菜單的Set/Clear

Breakpoint命令,在該行前面有一個紅色圓點,程序運行時將在斷點處暫停。②

運行程序,檢查中間結果。在命令窗口輸入命令:ex在窗口命令的K>>后輸入變量名,檢性。③

選擇Debug菜單中的Continue命令,程變量的值,一直到發(fā)現問題為止。④

切換工作空間,結束對程序的調試。打中選擇Base,即將工作空間切換到主Clear

Breakpoint

命令清楚已設置的箭頭,完成調試。查變量的值??梢苑治雠袛喑绦?/p>

的正確序繼續(xù)運行,在斷點處又暫停,再檢查開編輯窗口中的Stack下拉列表框,從工作空間。然后選擇Debug菜單中的Set斷點,在選擇Continue命令,去除白色Application

of

Matlab

Language2013/9/1042例5.15程序的調試有一個求水仙花數的程序ex.m,試設置5.5Matlab矩陣分析與處理Application

of

Matlab

Language2013/9/10435.5.1

特殊矩陣

常見的特殊矩陣有零矩陣、幺矩陣、單位矩陣等,這類特殊矩陣在應用中具有通用性。1、通用的特殊矩陣

常用的產生通用特殊矩陣的函數有:

zeros:產生全0矩陣(零矩陣)。ones:

產生全1矩陣(幺矩陣)。

eye:

產生單位矩陣。rand:產生0~1間均勻分布的隨機矩陣。

randn:產生均值為0,方差為1的標準正態(tài)分布隨機矩陣。產生(0,1)區(qū)間均勻分布隨機矩陣使用rand函數產生均值為0,方差為1的標準正態(tài)分布隨機矩陣使用randn函數5.5Matlab矩陣分析與處理Applicationo例5.16

建立隨機矩陣:Application

of

Matlab

Language2013/9/1044①

在區(qū)間[20,50]內均勻分布的5階隨機矩陣。②

均值為0.6,方差為0.1的5階正態(tài)分布隨機矩陣。命令如下:x=

20+(50-20)*rand(5)x=y

=

0.6

+sqrt(0.1)*randn(5)48.503942.862938.463032.171221.736726.934233.694043.758148.064130.586038.205320.555147.654447.507144.395034.579544.642242.146232.308120.295846.739033.341125.288046.809524.1667例5.16建立隨機矩陣:ApplicationofMa5.5

矩陣結構變換Application

of

Matlab

Language2013/9/10451、對角陣與三角陣只有對角線上有非零元素的矩陣稱為對角矩陣,在研究矩陣時,

有時候需要將矩陣的對角線上的元素提取出來形成一個列向量,有時也需要用一個向量構造一個對角陣。(1)提取矩陣的對角線元素函數:diag例如:A=[1,2,3;4,5,6];D

=

diag(A)D

=15diag函數還有一種形式:diag(A,k)提取第k條對角線的元素。例如:D1

=

diag(A,1)D

=265.5矩陣結構變換ApplicationofMatla5.5

矩陣結構變換Application

of

Matlab

Language2013/9/1046(2)構造對角矩陣如果V是一個m個元素的向量,diag(V)將產生一個m×m對角矩陣,其主對角線元素即為向量V的元素。例如:diag([1,2,-1,4])ans

=例如:diag(1:3,-1)ans=1000020000-10000400001000020000305.5矩陣結構變換ApplicationofMatla例5.17Application

of

Matlab

Language2013/9/1047建立一個5×5矩陣A,然后將A的第一行元素乘以1,第二行乘以2,…第五行乘以5。解:用一個對角矩陣左乘一個矩陣時,相當于用對角陣的第一個元素乘以該矩陣的第一行,依次類推。命令如下:A=ones(5);D=

diag(1:5);D*Aans

=1111122222333334444455555例5.17ApplicationofMatlabLan5.6

矩陣求逆與線性方程組求解Application

of

Matlab

Language2013/9/10485.6.1

矩陣的逆對于一個方陣A,如果存在一個與其同階的方陣B,使得:(I為單位矩陣)則稱B為A的逆矩陣,當然,A也是B的逆矩陣。求方陣A的逆矩陣可調用函數inv(A)。例5.18

求方陣A的逆矩陣,且驗證。A=[1,-1,1;5,-4,3;2,1,1];B

=

inv(A);A*Bans

=A

B

B

A

I1.000000-0.00001.00000-0.000001.00005.6矩陣求逆與線性方程組求解Applicationof5.6.2

用矩陣求逆方法求解線性方程組將包含n個未知數,由n個方程構成的線性方程組表示為:其矩陣表示形式為:其中:因此:

a11

x1

a12

x2

a1n

xn

b1

a2n

xn

b2

a21

x1

a22

x2

an1

x1

an2

x2

Ax

b

ann

xn

bn1111121nA

a21

a22a2n

,

x

x2

,

b

b2

an1

an2x

A1bann

xn

bn

x

b

a aa

Application

of

Matlab

Language2013/9/10495.6.2用矩陣求逆方法求解線性方程組將包含n個未知數,由例5.19

用求逆矩陣A的方法解線性方程組Application

of

Matlab

Language2013/9/1050命令如下:A=[1,2,3;1,4,9;1,8,27];b=[5,-2,6]’;x

=inv(A)*bx

=23.0000-14.50003.6667%x=

A\b也可以運用左除運算符求解。

x

2

y

3z

5

x

4

y

9z

2

x

8

y

27z

6例5.19用求逆矩陣A的方法解線性方程組Applicati5.7矩陣行列式值Application

of

Matlab

Language2013/9/1051把一個方程看做一個行列式,并按行列式的規(guī)則求值,稱為行列式的值。在Matlab中,使用函數det(A)得到。例如:A=rand(5)A=B

=-0.00710.95010.76210.61540.40570.05790.23110.45650.79190.93550.35290.60680.01850.92180.91690.81320.48600.82140.73820.41030.00990.89130.44470.17630.89360.1389B

=

det(A)5.7矩陣行列式值ApplicationofMatlaMatlab程序設計第8講Matlab程序設計第8講52Matlab命令的執(zhí)行方式Application

of

Matlab

Language2013/9/1053

交互式命令執(zhí)行方式(命令窗口)逐條輸入,逐條執(zhí)行,操作簡單、直觀,但速度慢,執(zhí)行過程不能保留。

M文件的程序執(zhí)行方式將命令編成程序存儲在一個文件中(M文件),依次運行文件中的命令,可以重復進行。

Matlab程序設計有傳統(tǒng)高級語言的特征,又有自己獨特的特點,可以利用數據結構的特點,使程序結構簡單,編程效率高。Matlab命令的執(zhí)行方式ApplicationofMa5.1 M文件的分類Application

of

Matlab

Language2013/9/1054

用Matlab語言編寫的程序,稱為M文件。是由若干Matlab命令組合在一起構成的,它可以完成某些操作,也可以實現某種算法。

M文件根據調用方式的不同分為兩類:命令文件(Script

File)函數文件(Function

File)

它們的擴展名都是.m5.1 M文件的分類ApplicationofMatla命令文件和函數文件的區(qū)別Application

of

Matlab

Language2013/9/1055

命令文件沒有輸入參數,也不返回輸出參數;函數文件可以帶輸入參數,也可以返回輸出參數。

命令文件對工作空間中的變量進行操作,文件中所有命令的執(zhí)行結果也返回工作空間中;函數文件中定義的變量為局部變量,當函數文件執(zhí)行完畢時,這些變量也被清除。

命令文件可以直接運行;函數文件不能直接運行,要以函數調用的方式來調用它。命令文件和函數文件的區(qū)別ApplicationofMat例5.1

建立文件將變量a、b的值互換。Application

of

Matlab

Language2013/9/1056命令文件:clear;a

=

1:10;b=[11,12,13,14;15,16,17,18];c

=

a;

a

=

b;

b

=c;ab將文件保存為exch,并在命令窗口執(zhí)行。執(zhí)行結果:a

=b

=1 2 3 4 5 6 7 8 9 101112131415161718例5.1建立文件將變量a、b的值互換。Applicatio函數文件Application

of

Matlab

Language2013/9/1057fexch.mfunction

[a,b]

=exch(a,b)c

=

a;

a

=

b;

b

=

c;然后在命令窗口調用該函數文件:clear;x

=

1:10;y=[11,12,13,14;15,16,17,18];[x,y]=fexch(x,y)輸出結果為:a

=b

=1 2 3 4 5 6 7 8 9 10函數參數a,b,c未保留在工作空間中,x,y保留在工作空間中。1112131415161718函數文件ApplicationofMatlabLangM文件的建立與打開M文件是一個文本文件,可以用任何編輯程序來建立和編輯,一般最常用的是使用Matlab提供的文本編輯器。作環(huán)境。該編輯器是一個集編輯和調試于一體的工Application

of

Matlab

Language2013/9/1058M文件的建立與打開M文件是一個文本文件,可以用任何編輯程序來5.2

程序控制結構Application

of

Matlab

Language2013/9/1059

順序結構

選擇結構

循環(huán)結構任何復雜的程序都可以由這3種基本結構構成。5.2程序控制結構ApplicationofMatla5.2.1

順序結構Application

of

Matlab

Language2013/9/1060

順序結構是指按照程序中語句的排列順序依次執(zhí)行,直到程序的最后一個語句。(最簡單的一種程序)1、數據的輸入從鍵盤輸入數據,則可以使用input函數來進行,調用格式為:A=input(提示信息,選項);其中提示信息為一個字符串,用于提示用戶輸入數據。

例如:從鍵盤輸入A矩陣,可以采用下面的命令來完成

A

=

input(‘輸入A矩陣’);如果在input函數調用時采用’s’選項,則允許用戶輸入一個字符串。例:xm

=

input(‘What’’s

your

name?’,’s’);5.2.1順序結構ApplicationofMatla5.2.1順序結構Application

of

Matlab

Language2013/9/10612、數據的輸出

命令窗口輸出函數主要有disp函數,其調用格式為:

disp(輸出項)

其中輸出項既可以為字符串,也可以為矩陣。例如:

A

=

‘Hello,

Tom’;disp(A)輸出為:Hello,

Tom又如:A=[1,2,3;4,5,6;7,8,9];disp(A)輸出為:%disp函數輸出格式更緊湊1234567895.2.1順序結構ApplicationofMatla5.2.1

順序結構Application

of

Matlab

Language2013/9/1062例5.2 求一元二次方程

ax2

bx

c

0

的根。

由于Matlab能進行復數運算,所以不需要判斷方程的判別式,可直接根據求根公式求根。程序如下:a=input('a=?');b=input('b=?');c

=

input('c=?');d

=

b*b-4*a*c;x

=

[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);程序輸出為:a=?4b=?78c=?54x1=-0.7188,x2=-18.78125.2.1順序結構ApplicationofMatla5.2.1順序結構Application

of

Matlab

Language2013/9/10633、程序的暫停

程序執(zhí)行過程中暫停,可用pause函數,其調用格式為:pause(延遲描述)

如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。若要強行中止程序的運行可按Ctrl+C鍵。5.2.1順序結構ApplicationofMatla5.2.2選擇結構Application

of

Matlab

Language2013/9/1064選擇結構是根據給定的條件成立或不成立,分別執(zhí)行不同的語句。Matlab用于實現選擇結構的語句有if語句,switch語句和try語句。1.

if語句

在Matlab中,if語句有3種格式。

(1)單分支if語句語句格式:if

條件語句組end例如:當x是整數矩陣時,輸出x的值if

fix(x)==xdisp(x);end5.2.2選擇結構ApplicationofMatla5.2.2

選擇結構Application

of

Matlab

Language2013/9/1065(2)雙分支if語句語句格式:if

條件語句組

1else語句組 2end當條件成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,然后再執(zhí)行if語句的后續(xù)語句。5.2.2選擇結構ApplicationofMatla5.2.2選擇結構例5.3

計算分段函數:x2

1,

x

10Application

of

Matlab

Language2013/9/1066cos(

x

1)

x x

x

,

x

10y

程序如下:x

=

input(‘請輸入x的值:');if

x

==

10y

=

cos(x+1)+sqrt(x*x+1);elsey

=

x*sqrt(x+sqrt(x));endy也可以用單分支if語句來實現:x

=

input('請輸入x的值:

');y

=

cos(x+1)+sqrt(x*x+1);if

x~=10y

=

x*sqrt(x+sqrt(x));endy5.2.2選擇結構例5.3計算分段函數:x21,5.2.2選擇結構Application

of

Matlab

Language2013/9/1067(3)多分支if語句語句格式:if

條件1語句組

1elseif

條件2語句組 2…elseif 條件m

語句組 melse語句組nend5.2.2選擇結構ApplicationofMatla例5.4

大小寫字母的置換Application

of

Matlab

Language2013/9/1068輸入一個字符,若為大寫字母,則輸出其對應的小寫字母;若為小寫字母,則輸出其對應的大寫字母;若為數字字符則輸出其對應的數值,若為其他字符則原樣輸出。程序如下:c

=

input(‘請輸入一個字符’,‘s’);if

c

>=‘A’

&

c<=‘Z’disp(setstr(abs(c)+

abs(‘a’)-abs(‘A’)));elseif

c>=‘a’

&

c<=‘z’disp(setstr(abs(c)-abs(‘a’)

+

abs(‘A’)));elseif

c>=‘0’

&

c<=‘9’disp(abs(c)-abs(‘0’));elsedisp(c);endsetstr函數可以得到ASCⅡ碼例5.4大小寫字母的置換ApplicationofMa5.2.2

選擇結構Application

of

Matlab

Language2013/9/10692、switch語句

switch語句根據表達式的取值不同,分別執(zhí)行不同的語句,其語句格式:

switch

表達式case表達式1語句組1case表達式2語句組2…case表達式m語句組motherwise語句組

nendswitch子句后面的表達式應為一個標量或一個字符串;

case子句后面的表達式不僅可以為一個標量或一個字符串,還可以為一個元胞矩陣。5.2.2選擇結構ApplicationofMatla例5.5Application

of

Matlab

Language2013/9/1070某商場對顧客所購買的商品實行打折銷售,標準如下:price<200200<=price<500500<=price<10001000<=price<25002500<=price<50005000<=price沒有折扣3%折扣5%折扣8%折扣10%折扣14%折扣輸入所售商品的價格,求其實際銷售價格。請同學們試著編程實現。例5.5ApplicationofMatlabLang程序如下Application

of

Matlab

Language2013/9/1071price

=

input(‘請輸入商品價格’);switch

fix(price/100)case{0,1}rate

=

0;case{2,3,4}rate

=

3/100;

case

num2cell(5:9)rate

=

5/100;case

num2cell(10:24)rate

=

8/100;case

num2cell(25:49)rate

=

10/100;otherwiserate

=

14/100;endprice

=

price*(1-rate)%價格小于200%價格大于等于200但小于500%價格大于等于500但小于1000%價格大于等于1000但小于2500%價格大于等于2500但小于5000%價格大于等于5000%輸出商品實際銷售價格num2cell函數是將數值矩陣轉化為單元矩陣。程序如下ApplicationofMatlabLang5.2.2

選擇結構Application

of

Matlab

Language2013/9/10723.try語句try語句是一種試探性執(zhí)行語句,其語句格式為:try語句組1catch語句組2endtry語句先試探性執(zhí)行語句組1,如果在執(zhí)行過程中出現錯誤,則將錯誤信息賦給保留的lasterr變量,并轉去執(zhí)行語句組2.5.2.2選擇結構ApplicationofMatla例5.6Application

of

Matlab

Language2013/9/1073矩陣乘法運算要求兩矩陣的維數相容,否則會出錯。先求兩矩陣的乘積,若出錯則自動轉去求兩矩陣的點乘。程序如下:A=[1,2,3;4,5,6];B

=[7,8,9;10,11,12];tryC=

A*B;catchC=A.*B;endClasterr %顯示出錯原因C=7 16 2740 55 72ans=Error

using==>mtimesInner

matrixdimensionsmustagree.例5.6ApplicationofMatlabLang5.2.3循環(huán)結構Application

of

Matlab

Language2013/9/1074循環(huán)是指按照給定的條件,重復執(zhí)行指定的語句,Matlab提供了兩種實現循環(huán)結構的語句:for語句和while語句。1、for語句for語句的格式為:for

循環(huán)變量

=表達式1:表達式2:表達式3循環(huán)體語句end

其中表達式1的值為循環(huán)變量的初值,表達式2的值為步長,表達式3的值為循環(huán)變量的終值。步長為1時,表達式2可以省略。5.2.3循環(huán)結構ApplicationofMatla例5.7已知 y

12

22

32

n2程序如下:,當n=100時,求y的值。y

=

0;n

=100;for

i=1:ny=

y+1/i/i;endy輸出結果為:y

=1.63501 1 11利用Matlab的特點,常用向量運算來代替循環(huán)操作,程序可以如下:n=100;i=1:n;f

=

1./i.^2;y

=

sum(f)Application

of

Matlab

Language2013/9/1075例5.7已知 y ,當n=100時,求y的5.2.3循環(huán)結構Application

of

Matlab

Language2013/9/10762、while語句while語句的一般格式為:while條件循環(huán)體語句end

其執(zhí)行過程為:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán)。5.2.3循環(huán)結構ApplicationofMatla從鍵盤輸入若干個數,當輸入0時結束輸入,求這些數的平均值和它們的和。Application

of

Matlab

Language2013/9/1077sum

=

0;n=

0;x

=

input(‘Enter

a

number(end

in

0):’);while(x~=0)sum

=

sum+x;n=

n+1;x

=

input(‘Enter

a

number(end

in

0):’);endif(n>0)summean=

sum/nend例5.8輸出結果為:Enter

a

number(end

in

0):67Enter

a

number(end

in

0):89Enter

a

number(end

in

0):93Enter

a

number(end

in

0):70Enter

a

number(end

in

0):0sum

=319mean

=79.7500從鍵盤輸入若干個數,當輸入0時結束輸入,求這些數的平均值和A5.2.3

循環(huán)結構Application

of

Matlab

Language2013/9/10783、break語句和continur語句它們一般與if語句配合使用。break語句用于終止循環(huán)的執(zhí)行。當在循環(huán)體內執(zhí)行到該語句時,程序將跳出循環(huán),繼續(xù)執(zhí)行循環(huán)語句的下一語句。continue語句控制跳過循環(huán)體中的某些語句。當在循環(huán)體內執(zhí)行到該語句時,程序將跳過循環(huán)體中所有剩下的語句,繼續(xù)下一次循環(huán)。5.2.3循環(huán)結構ApplicationofMatla例5.9

求[100,200]之間第一個能被21整除的整數。Application

of

Matlab

Language2013/9/1079程序如下:for

n

=

100:200ifrem(n,21)~=0;continueendbreakendn

程序輸出結果為:n

=105例5.9求[100,200]之間第一個能被21整除的整數。Matlab程序設計第9講Matlab程序設計第9講805.3

函數文件Application

of

Matlab

Language2013/9/1081函數文件是另一種形式的M文件,每一個函數文件都定義一個函數。Matlab提供的標準函數大部分是由

溫馨提示

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

評論

0/150

提交評論