數(shù)學實驗 課件 第5、6章 MATLAB程序設(shè)計、線性代數(shù)實驗_第1頁
數(shù)學實驗 課件 第5、6章 MATLAB程序設(shè)計、線性代數(shù)實驗_第2頁
數(shù)學實驗 課件 第5、6章 MATLAB程序設(shè)計、線性代數(shù)實驗_第3頁
數(shù)學實驗 課件 第5、6章 MATLAB程序設(shè)計、線性代數(shù)實驗_第4頁
數(shù)學實驗 課件 第5、6章 MATLAB程序設(shè)計、線性代數(shù)實驗_第5頁
已閱讀5頁,還剩103頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

5.1M文件

簡單的命令可以在MATLAB命令窗口中輸入運行,直接得到運算結(jié)果.在進行復雜運算時,在命令行窗口調(diào)試程序或修改指令是不方便的.MATLAB提供了M文件編輯器,將代碼寫在M文件中,然后運行文件即可.

M文件根據(jù)調(diào)用方式的不同分為腳本(Script)文件(也稱為命令文件)和函數(shù)(Function)文件,都是以.m為擴展名,并且創(chuàng)建的M文件名要避免與MATLAB的內(nèi)置函數(shù)和工具箱中的函數(shù)重名.

新建M文件有以下幾種方法:

(1)在工具欄中單擊“新建腳本”,即可創(chuàng)建一個新的M文件;

(2)依次選擇“主頁”|“新建”菜單命令,然后選擇“腳本”或“函數(shù)”,即可創(chuàng)建腳本文件或函數(shù)文件;

(3)在命令窗口中執(zhí)行“edit”命令,即可創(chuàng)建一個新的M文件.

代碼編寫完畢后,可以單擊工具欄中的“運行”按鈕,或按F5快捷鍵,可執(zhí)行整個M文件MATLAB語言稱為第四代編程語言,程序簡潔、可讀性強,而且調(diào)試十分容易.5.1.1腳本文件

腳本文件是一系列命令的集合,實際上就是將在命令窗口中逐行輸入的命令放在M文件中,MATLAB會按文件中命令的順序依次執(zhí)行.

MATLAB語言稱為第四代編程語言,程序簡潔、可讀性強,而且調(diào)試十分容易.腳本文件在運行過程中可以調(diào)用MATLAB工作域內(nèi)所有的數(shù)據(jù),且所產(chǎn)生的所有變量均為全局變量例5.1編寫一個腳本文件將華氏溫度轉(zhuǎn)化為攝氏溫度.解

MATLAB命令如下:

clear;

f=input('PleaseinputFahrenheittemperature:');

c=5*(f-32)/9;

fprintf('Thecentigradetemperatureis%g\n',c);運行結(jié)果為:

>>f51

PleaseinputFahrenheittemperature:95

Thecentigradetemperatureis355.1.2函數(shù)文件

為了實現(xiàn)計算中的參數(shù)傳遞,需要用到函數(shù)文件.與腳本文件不同,函數(shù)文件有一定的格式.函數(shù)文件是以第一行function語句為標志的.格式為:function輸出變量=函數(shù)名(輸入變量)

函數(shù)體語句

當函數(shù)具有多個輸出變量時,則以方括號括起;當函數(shù)具有多個輸入變量時,則直接用圓括號括起.例如,function[xx,yy,zz]=sphere(varargin).當函數(shù)不含輸出變量時,則直接略去輸出部分或采用方括號表示MATLAB語言稱為第四代編程語言,程序簡潔、可讀性強,而且調(diào)試十分容易.例如functionlimit(f)或者function[]=limit(f)MATLAB語言稱為第四代編程語言,程序簡潔、可讀性強,而且調(diào)試十分容易.下面以MATLAB的函數(shù)文件rank.m為例,來說明函數(shù)文件的各個部分.在命令行窗口輸入:>>typerank命令行窗口將顯示函數(shù)文件rank的內(nèi)容為:functionr=rank(A,tol)%函數(shù)定義行%RANKMatrixrank.%H1行%RANK(A)providesanestimateofthenumberoflinearly%函數(shù)幫助文本%independentrowsorcolumnsofamatrixA.%注釋行%RANK(A,TOL)isthenumberofsingularvaluesofA%thatarelargerthanTOL.Bydefault,TOL=max(size(A))*eps(norm(A)).%ClasssupportforinputA:%float:double,single%Copyright1984-2015TheMathWorks,Inc.s=svd(A);%函數(shù)體語句ifnargin==1tol=max(size(A))*eps(max(s));endr=sum(s>tol);

rank.m是MATLAB自帶的函數(shù),我們也可以根據(jù)自己的需要編寫一些函數(shù).函數(shù)文件必須遵循以下規(guī)則:

(1)由function開頭;

(2)函數(shù)名必須與文件名相同;

(3)在命令行窗口調(diào)用函數(shù),調(diào)用函數(shù)時需要給輸入變量賦值.

在函數(shù)文件中,除了函數(shù)定義行和函數(shù)體語句外,其他部分都是可以省略的,不是必須有的.但作為一個函數(shù),為了提高函數(shù)的可用性,應(yīng)加上H1行和函數(shù)幫助文本,當在MATLAB命令行窗口執(zhí)行“help函數(shù)文件名”時,可顯示出H1行和函數(shù)幫助文本;為了提高函數(shù)的可讀性,加上適當?shù)淖⑨專?/p>

需要注意:M文件最好直接放在MATLAB的默認搜索路徑下,這樣就不用設(shè)置M文件的路徑了,否則應(yīng)當重新設(shè)置路徑.另外,M文件名不應(yīng)該與MATLAB的內(nèi)置函數(shù)名以及工具箱中的函數(shù)重名,以免發(fā)生執(zhí)行錯誤命令的現(xiàn)象.例5.2計算函數(shù)

在(1,3)處的值.解MATLAB命令如下:functionz=f52(x,y)z=5*(y-x)^2+(1-x)^3;運行結(jié)果為:>>z=f52(2,1)z=4可得函數(shù)

在(1,3)處的值為4.例5.3計算第n個Fibonnaci數(shù).解新建函數(shù)文件fib.m,在文件中輸入以下命令:functionf=fib(n)ifn>2f=fib(n-1)+fib(n-2);elsef=1;end在命令行窗口調(diào)用函數(shù),>>f=fib(10)f=

55

可得第n個Fibonnaci數(shù)是55.5.1.3匿名函數(shù)

匿名函數(shù)是快速建立簡單函數(shù)的方法,它只包含一個MATLAB表達式,可以有多個輸入和輸出.如果不需要將函數(shù)寫成函數(shù)文件,可以建立匿名函數(shù).

匿名函數(shù)的定義格式為:handle=@(inarglist)expr

匿名函數(shù)的調(diào)用格式為:

var=handle(inarglist)

其中handle是調(diào)用匿名函數(shù)時使用的函數(shù)名;inarglist是輸入?yún)?shù)列表,各參數(shù)間用逗號“,”隔開;expr是一個變量表達式.例5.4創(chuàng)建用于計算平方數(shù)的匿名函數(shù)的句柄.解>>sqr=@(x)x.^2;

>>sqr(3)

ans=

9

變量sqr是一個函數(shù)句柄.@運算符創(chuàng)建句柄,@運算符后面的圓括號()包括函數(shù)的輸入?yún)?shù).該匿名函數(shù)接受單個輸入x,并顯式返回單個輸出,即大小與包含平方值的x相同的數(shù)組.例5.5創(chuàng)建帶有多個輸入或輸出的函數(shù).解>>myfunction=@(x,y)(x^2+y^2+x*y);

>>z=myfunction(10,3)

z=

1395.2數(shù)據(jù)的輸入與輸出

5.2.1數(shù)據(jù)的輸入

MATLAB中在“主頁”選項卡中點擊“導入數(shù)據(jù)”,可以讀取數(shù)據(jù)文件.可以得到如下類型:

將所選數(shù)據(jù)導入為表.

列向量

將所選數(shù)據(jù)的每一列導入為單個m×1向量

數(shù)值矩陣

將所選數(shù)據(jù)導入為m×n數(shù)值數(shù)組

字符串數(shù)組

將所選數(shù)據(jù)導入為m×n字符串數(shù)組

元胞數(shù)組

將所選數(shù)據(jù)導入為可包含多種數(shù)據(jù)類型的元胞數(shù)組,例如數(shù)值數(shù)據(jù)和文本

在編寫程序時,為使程序更具靈活性,有時需要程序提示用戶輸入滿足某種條件的數(shù)值或字符串,這時可以使用input函數(shù)實現(xiàn);在實際問題中會碰到大量的數(shù)據(jù),利用load函數(shù)輸入數(shù)據(jù)文件可以方便操作,提高上機效率.函數(shù)的調(diào)用格式如下:

x=input(prompt)提示輸入數(shù)值,prompt是提示信息

str=input(prompt,'s')提示輸入字符串,prompt是提示信息,'s'指定輸入內(nèi)容為字符串例5.6請求一個數(shù)值輸入,然后將該輸入乘以10.解prompt='Whatistheoriginalvalue?';

x=input(prompt)

y=x*10在提示下,輸入一個數(shù)值或數(shù)組(如10)

x=

10

y=

1005.2.2數(shù)據(jù)的輸出

MATLAB提供的命令行窗口輸出函數(shù)有disp和fprintf.其中,disp函數(shù)用于輸出變量值到命令行窗口,而fprintf函數(shù)輸出指定格式的數(shù)據(jù)到命令行窗口或指定的文件中,它們的調(diào)用格式如下:disp(X)輸出變量X的值到命令窗口;fileID=fopen(filename,permission)將打開由permission指定訪問類型的文件(見表5-1);fprintf(fileID,formatSpec,A1,...,An)將指定格式的數(shù)組A1,...An按列順序?qū)懭氲絝ileID中.當fileID缺省時,寫入數(shù)據(jù)到命令窗口.其中,fileID是文件標識符,formatSpec是輸出字段的格式(見表5-2),A1,...,An是數(shù)值數(shù)組或字符數(shù)組;fclose(fileID)關(guān)閉打開的文件.類型描述類型描述'r'打開要讀取的文件'r+'打開要讀寫的文件'w'打開或創(chuàng)建要寫入的新文件,放棄現(xiàn)有內(nèi)容(如果有)'w+'打開或創(chuàng)建要讀寫的新文件,放棄現(xiàn)有內(nèi)容(如果有)'a'打開或創(chuàng)建要寫入的新文件,追加數(shù)據(jù)到文件末尾'a+'打開或創(chuàng)建要讀寫的新文件,追加數(shù)據(jù)到文件末尾表5-1fopen函數(shù)中文件訪問類型permission格式碼描述格式碼描述%d整數(shù)格式%g更緊湊的%e或%f%e帶小寫字母e的科學記數(shù)格式%s輸出字符串%E帶大寫字母E的科學記數(shù)格式\n開始新的一行%f小數(shù)格式\t制表符表5-2fprintf函數(shù)中的格式碼formatSpec例5.7輸出數(shù)據(jù)到命令行窗口.解>>A=[15150];>>S='HelloWorld.';>>disp(A)15150>>disp(S)HelloWorld.>>a=[1.023.045.06];>>fprintf('%d\n',round(a));135例5.8計算一個球的體積.解

r=input('Typeradius輸入半徑:');

Area=pi*r^2;

volume=(4/3)*pi*r^3;

fprintf('半徑Theradiusis%12.5f\n',r)

fprintf('面積Theareaofacircleis%12.5f\n',Area)

fprintf('體積Thevolumeofasphereis%12.5f\n',volume)例5.9將指數(shù)函數(shù)的短表寫入到名為exp.txt的文本文件.解x=0:.1:1;

A=[x;exp(x)];

fileID=fopen('exp.txt','w');

%創(chuàng)建并打開文本文件exp.txt

fprintf(fileID,'%6s%12s\n','x','exp(x)');%輸出標題文本

x

exp(x)到exp.txt

fprintf(fileID,'%6.2f%12.8f\n',A);%輸出變量A的值到exp.txt

fclose(fileID);

%關(guān)閉文本文件exp.txt運行該文件后,可以在命令行窗口通過type命令查看文件的內(nèi)容.>>typeexp.txtxexp(x)0.001.000000000.101.105170920.201.221402760.301.349858810.401.491824700.501.648721270.601.822118800.702.013752710.802.225540930.902.459603111.002.718281835.3程序結(jié)構(gòu)

MATLAB語言的程序結(jié)構(gòu)與其他高級語言是一致的,分為順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu).5.3.1順序結(jié)構(gòu)

順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),在編寫好程序后,系統(tǒng)依次按照程序的物理位置順序執(zhí)行程序的各條語句,因此,這種程序比較容易編寫.但是,由于程序結(jié)構(gòu)比較單一,實現(xiàn)的功能也比較有限.例5.10輸入x,y的值,并將它們的值互換后輸出.解clear

x=input('pleaseinputx:')

y=input('pleaseinputy:')

z=x;x=y;y=z;

disp(x)

disp(y)5.3.2分支結(jié)構(gòu)

分支結(jié)構(gòu)是根據(jù)一定條件選擇執(zhí)行不同的語句,有if分支結(jié)構(gòu)和switch分支結(jié)構(gòu).

1if分支結(jié)構(gòu)

分為以下三種情況.

格式一:單分支語句

if邏輯表達式

執(zhí)行語句

end

這種程序結(jié)構(gòu)比較簡單,它只有一個判斷語句,當表達式為真時就執(zhí)行if和end之間的語句,否則不執(zhí)行.格式二:雙分支語句if邏輯表達式

執(zhí)行語句1else

執(zhí)行語句2end如果邏輯表達式為真,就執(zhí)行語句1;否則,系統(tǒng)就執(zhí)行語句2.格式三:多分支語句if邏輯表達式1

執(zhí)行語句1elseif邏輯表達式2

執(zhí)行語句2elseif邏輯表達式3

執(zhí)行語句3……else

執(zhí)行語句nend

在這種形式中,當運行到程序的某一邏輯表達式為真時,則執(zhí)行與之有關(guān)的語句,此時系統(tǒng)將不再檢驗其他的邏輯表達式,即系統(tǒng)跳過其余的if-else-end結(jié)構(gòu).例5.11輸入一個百分制成績,要求輸出成績等級A、B、C、D、E.其中90分~100分為A,80分~89分為B,70分~79分為C,60分~69分以下為E.解命令如下:clears=input('pleaseinputthescore:')ifs>=90&s<=100rank='A';elseifs>=80&s<=89

rank='B';elseifs>=70&s<=79rank='C';elseifs>=60&s<=69rank='D';elseifs>0&s<=59rank='E';elserank='wrongscore'endrank例5.12已知函數(shù),求.解新建函數(shù)文件f.m文件,命令如下:functiony=f(x)ifx<0y=x^2;elseifx>=0&&x<2y=exp(x);elsey=log(x);end在命令行窗口分別運行y=f(-1),y=f(1),y=f(4),>>y=f(-1)y=1>>y=f(1)y=2.7183>>y=f(4)y=1.3863得到2switch分支結(jié)構(gòu)switch語句根據(jù)變量或表達式的取值不同,分別執(zhí)行不同的語句.格式為:switch表達式case值1

語句組1case值2

語句組2……case值m

語句組motherwise

語句組m+1end

其中分支條件可以是一個函數(shù)、變量或表達式.如果條件1與分支條件匹配就執(zhí)行語句1,退出循環(huán);否則,檢驗條件2,如果條件2與分支條件匹配執(zhí)行語句2,退出循環(huán);否則,檢驗條件3,…,當所有條件都不與分支條件匹配時就執(zhí)行最后的語句.注意otherwise是可以省略的.例5.13從鍵盤輸入一個數(shù)字,判斷它能否被5整除.解MATLAB命令如下:n=input('請輸入一個數(shù)字n=')switchmod(n,5)case0fprintf('n是5的倍數(shù)',n)otherwisefprintf('n不是5的倍數(shù)',n)end運行結(jié)果為:

請輸入一個數(shù)字n=36

n=

36

n不是5的倍數(shù)例5.14某商場對顧客所購買的商品實行打折銷售,標準如下(商品價格用x來表示):輸入所售商品的價格,求其實際銷售價格.解MATLAB命令如下:clearprice=input('請輸入商品價格:');switchfix(price/100)case{0,1}

rate=0;case{2,3,4}rate=3/100;case{5:20}rate=5/100;otherwiserate=10/100;endprice=price*(1-rate)運行結(jié)果為:請輸入商品價格:1800price=16205.3.3循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)重復執(zhí)行一組語句,是計算機解決問題的主要手段.1.for循環(huán)

for循環(huán)變量=初值:步長:終值

循環(huán)體

end例5.15求20!.解MATLAB命令如下:clear;r=1;fork=1:20r=r*k;endr運行結(jié)果為:r=2.4329e+18可得

例5.16作出分段函數(shù)

的圖形解MATLAB命令如下:y=[];forx=-4:0.1:4ifx<=0y=[y,sin(x)];endifx>0y=[y,exp(x)-1];endendx=-4:0.1:4;plot(x,y)運行后得到圖5-1.圖5-1分段函數(shù)圖形

2.while循環(huán)while(條件)循環(huán)體end注:while語句一般用于事先不能確定循環(huán)次數(shù)的情況.

例5.17求Fibonacci數(shù)列前100項和S.解MATLAB命令如下:clearF=[];F(1)=1;F(2)=1;i=3;s=F(1)+F(2); whilei<=100F(i)=F(i-1)+F(i-2);s=s+F(i);i=i+1;ends

運行結(jié)果為:s=9.2737e+20可得S=9.2737×1020.

例5.18計算.解MATLAB命令如下:clear

s=0;

forn=1:500

s=s+1/n;

end

s運行結(jié)果為:

s=

6.7928也可以利用while循環(huán)語句得到,命令如下:clear;s=0;n=1;whilen<=500s=s+1/n;n=n+1;ends可得

=6.7928.注:在使用循環(huán)語句時,如果不小心陷入了死循環(huán),可以使用快捷鍵Ctrl+C強行中斷.5.3.4程序優(yōu)化技術(shù)

MATLAB是解釋型語言,計算速度較慢,所以在編程時如何提高程序的運行速度是需要考慮的問題.優(yōu)化程序運行可采用以下辦法1.循環(huán)向量化

MATLAB是以矩陣為基礎(chǔ)的算法,因此有些循環(huán)可直接轉(zhuǎn)換成向量或矩陣運算,可提高程序的執(zhí)行速度;有些函數(shù)內(nèi)部已經(jīng)采用了向量化處理,使用這些向量化函數(shù),因而運行效率比較高.例5.19比較循環(huán)法和向量法求y=sin(x)在x=[0:.01:100]點處值所花的時間.解MATLAB命令如下:tic%啟動秒表計時器來測量性能,函數(shù)會記錄執(zhí)行

tic

命令時的內(nèi)部時間i=0;fort=0:.01:100i=i+1;y(i)=sin(t);%循環(huán)法endtoctict=0:.01:100;y=sin(t);%向量法toc%使用

toc

函數(shù)顯示已用時間

運行結(jié)果為:

歷時0.004141秒.

歷時0.001776秒.可見利用向量法可以節(jié)省時間.例5.20將例5.18使用向量化函數(shù)提高運行速度.解MATLAB命令如下:cleartic

s=0;

n=1:500;

s=sum(1./n)

toc運行結(jié)果為:歷時0.000284秒.利用向量化函數(shù)能夠提高運行速度.

2.預(yù)分配內(nèi)存

利用預(yù)分配可減少程序運行時間.一般在程序設(shè)計中,經(jīng)常會涉及到循環(huán)重復,每次循環(huán)至少會得到一個結(jié)果元素(比如y(k)).通過對y預(yù)分配,可免去每次增大y的操作,從而大大地減少計算時間.

例5.21預(yù)分配內(nèi)存舉例.解MATLAB命令如下:tici=0;y=zeros(1,10000);fort=0:.01:100i=i+1;y(i)=sin(t);endtoc運行結(jié)果為:歷時0.001706秒.可見利用預(yù)分配可以減少計算時間.

3.在語句后面加分號

MATLAB在運行m文件的時候,會不停地在命令窗口里面輸出沒有加分號語句返回的值,因為輸出結(jié)果也是需要消耗時間的,所以這樣會使運行的速度非常慢.為此在語句后面應(yīng)當加上分號.如果想查看結(jié)果的話,可以在程序運行最后添加結(jié)果輸出的語句.澡身浴德修業(yè)及時6.1線性方程組

設(shè)有

n個未知數(shù)m個方程的線性方程組可以寫成以向量x為未知元的向量方程

(6-1)

其中,

若b=0,則式(6.1)是齊次線性方程組;若b≠0,則式(6.1)是非齊次線性方程組.定理6.1

n元線性方程組(1)無解的充分必要條件是;(3)有無窮多解的充分必要條件是.

(2)有唯一解的充分必要條件是;

克拉默法則

若n元線性方程組

系數(shù)矩陣A是方陣,且

,則方程組有唯一解,且

,其中

是把系數(shù)矩陣A中第j列用方程組右端的常數(shù)項b代替后的矩陣.

在線性方程組求解的過程中,會用到行列式的介紹、方陣求逆、矩陣的秩和矩陣階梯化等問題.這些問題都可由MATLAB進行處理.6.1.1行列式的計算

在MATLAB中,det(A)可以計算方陣A的行列式.

例6.1

計算方陣

的行列式

.解>>clear

>>A=[31-1;-513;201];

>>det(A)

運行結(jié)果如下:

ans=

16可得

=16.

例6.2計算矩陣

的行列式

.解>>clear;>>symsabc>>A=[abc;aa+ba+b+c;a2*a+b3*a+2*b+c];>>det(A)ans=a^3可得

.6.1.2矩陣階梯化

在MATLAB中,rref(A)可以求矩陣A的行最簡形.例6.3已知矩陣

,求A的行最簡形.解>>formatrat>>A=[3102;1-12-1;13-44];>>rref(A)ans=101/21/401-3/25/40000可知矩陣A的行最簡形是6.1.3矩陣的秩

在MATLAB中,可以用rank(A)直接求矩陣A的秩,也可以用rref(A)間接求矩陣A的秩.例6.4求例6.3中A的秩.解

方法1利用rank法>>A=[3102;1-12-1;13-44];>>rank(A)ans=2

方法2利用rref法

已知例6.3中行最簡形B的非零行的行數(shù)是2,可知B的秩為2;因為A和B等價,可知A的秩也為2.6.1.4逆矩陣

在MATLAB中,可以用inv(A)直接求方陣A的逆矩陣,也可以用rref(A,E)求方陣A的逆矩陣,其中E是與A同階的單位矩陣.例6.5求例6.1的逆矩陣.解方法1利用inv法>>formatrat>>A=[31-1;-513;201];>>inv(A)ans=1/16-1/161/411/165/16-1/4-1/81/81/2方法2利用rref法>>B=[A,eye(3)];>>rref(B)>>ans=1001/16-1/161/401011/165/16-1/4001-1/81/81/2

可知矩陣A的逆矩陣存在,且謝謝澡身浴德修業(yè)及時6.2線性方程組求解

線性方程組包括齊次線性方程組和非齊次線性方程組.非齊次線性方程組的通解等于對應(yīng)的齊次方程的通解加上非齊次方程的一個特解.

在MATLAB中,可以用null(A)得到齊次線性方程組

的基礎(chǔ)解系;可以用inv、rank、null、左除(\)等命令求解非齊次線性方程組.例6.6

求解齊次線性方程組

.解方法1先求出系數(shù)矩陣A的行最簡形矩陣,再求解.>>clear>>A=[1221;21-2-2;1-1-4-3];>>formatrat>>B=rref(A)B=10-2-5/30124/30000即得與原方程組同解的方程組由此即得寫出向量形式,得到通解方法2先求出齊次線性方程組的基礎(chǔ)解系,再求解.>>clear>>A=[1221;21-2-2;1-1-4-3];>>null(A,'r')ans=25/3-2-4/31001即得方程組的基礎(chǔ)解系得到方程組的通解例6.7

求解方程組.解首先計算系數(shù)矩陣和增廣矩陣的秩,判斷方程組解的結(jié)構(gòu),>>clear;>>a=[1-11-1;-111-1;2-2-11];b=[1;1;-1];>>r1=rank(a)%系數(shù)矩陣的秩2>>r2=rank([a,b])

%增廣矩陣的秩2計算表明,系數(shù)矩陣和增廣矩陣的秩都為2,小于變量的個數(shù)4,說明原方程組有無窮組解.有幾種方法求原方程組的通解.方法1用rref命令化為行最簡形式求解.>>clear;>>a=[1-11-1;-111-1;2-2-11];b=[1;1;-1];>>rref([a,b])ans=

1

-1

0

0

0

0

0

1

-1

1

0

0

0

0

0由上述行最簡形式得到方程組

,即可知原方程組的通解為其中

為任意常數(shù).

方法2

由于非齊次方程的通解等于齊次方程的通解加非齊次方程的一個特解,可以用null命令求對應(yīng)的齊次方程組的一個基礎(chǔ)解系.>>clear;>>a=[1-11-1;-111-1;2-2-11];b=[1;1;-1];>>x0=a\b

%非齊次方程的一個特解>>x1=null(a,’r’)

%齊次方程的通解結(jié)果為x0=

0

0

1

0x1=101001

01原方程組的通解為其中

為任意常數(shù).例6.8

求解線性方程組

.

解該方程組的系數(shù)矩陣A是方陣,可以先計算|A|,>>A=[1-1-1;2-1-3;32-5];>>D=det(A)D=3.0000

可得系數(shù)行列式|A|=3,由克拉默法則可知方程組由唯一解;也可利用逆矩陣求解.方法1克拉默法則法>>formatrat>>b=[2;1;1];>>A1=[b,A(:,[23])];%b代替A中第1列>>A2=[A(:,1),b,A(:,3)];%b代替A中第2列>>A3=[A(:,[12]),b];%b代替A中第3列>>x1=det(A1)/Dx1=17/3>>x2=det(A2)/Dx2=1/3>>x3=det(A3)/Dx3=10/3方法2逆矩陣法>>x=inv(A)*bx=17/31/310/3可知方程組的解為.6.3矩陣的相似對角化定義設(shè)A為n階矩陣,如果存在n階可逆矩陣P,使得P-1AP=D為對角矩陣,則稱A可以相似對角化.6.3.1向量組的線性相關(guān)性

在MATLAB中,可以利用rank(A)判斷線性相關(guān)性,利用rref(A)求一個極大無關(guān)組.例6.9設(shè)向量組

,(1)求向量組的秩,判斷向量組的線性相關(guān)性;(2)求向量組的一個極大無關(guān)組,將向量組中其余向量用極大無關(guān)組線性表示.

解先將向量組構(gòu)造出一個矩陣(1)>>A=[11221;0215-1;203-13;1104-1]

>>rank(A)

ans=

3因為向量組的秩=矩陣A的秩=3<5,所以向量組線性相關(guān);(2)>>[B,j]=rref(A)B=100100103-1001-1100000j=123由

j

可知A中的第1、2和3列是一個極大無關(guān)組,即向量

是一個極大無關(guān)組.由B可知

,

.6.3.2特征值

工程技術(shù)中的一些問題,如振動問題和穩(wěn)定性問題,??蓺w結(jié)為求一個方陣的特征值和特征向量的問題.

在MATLAB中,eig(A)可以計算方陣A的特征值.例6.10求

的特征值和特征向量.解>>A=[73-2;34-1;-2-13]A=73-234-1-2-13>>[V,D]=eig(A)V=0.5774-0.0988-0.8105-0.57740.6525-0.49080.57740.75130.3197D=2.00000002.39440009.6056可知A的特征值是λ1=2,λ2=2.3944,λ3=9.6056.對應(yīng)于λ1,λ2,λ3的特征向量分別是:6.3.3方陣的相似對角化

定理6.2

n

階矩陣

A

能相似對角化的充分必要條件時

A

n

個線性無關(guān)的特征向量.

推論

如果n階矩陣A的n個特征值互不相等,則A能對角化.

根據(jù)定理和推論,判斷方陣A是否可以相似對角化可以由A的特征向量來判斷,在MATLAB中可以利用rank(A)和eig(A)進行判斷.例6.11判斷下列矩陣A是否可以相似對角化,若可以相似對角化,求出可逆矩陣P和對角矩陣D,使得P-1AP=D.解(1)>>A=[2-20;-21-2;0-20]

>>[V,D]=eig(A)

V=

-0.33330.6667-0.6667

-0.66670.33330.6667

-0.6667-0.6667-0.3333

D=

-2.000000

01.00000

004.0000

可知A有三個特征值互不相等,所以A能夠相似對角化.

矩陣V可逆,取P=V,使得P-1AP=D.(2)>>A=[-110;-430;102]

>>[V,D]=eig(A)

V=

00.40820.4082

00.81650.8165

1.0000-0.4082-0.4082

D=

200

010

001

>>rank(V)

ans=

2得到V的秩為2,可知3階矩陣A只有2個線性無關(guān)的特征向量,所以A不能相似對角化.

例6.12城市道路網(wǎng)中每條道路、每個交叉路口的車流量調(diào)查,是分析、評價及改善城市交通狀況的基礎(chǔ).根據(jù)實際車流量信息可以設(shè)計流量控制方案,必要時設(shè)置單行線,以免大量車輛長時間擁堵.圖6-1單行道4節(jié)點交通圖圖6-1是某城市的交通圖.

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論