年數(shù)學(xué)建模培訓(xùn)課件第1講入門2015matlab_第1頁
年數(shù)學(xué)建模培訓(xùn)課件第1講入門2015matlab_第2頁
年數(shù)學(xué)建模培訓(xùn)課件第1講入門2015matlab_第3頁
年數(shù)學(xué)建模培訓(xùn)課件第1講入門2015matlab_第4頁
年數(shù)學(xué)建模培訓(xùn)課件第1講入門2015matlab_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

為MATLAB定義新函數(shù),必須編寫函數(shù)文件.函數(shù)文件是文件名后綴為M的文件,這類文件的第一行必須是一特殊字符function開始,格式為:

function因變量名=函數(shù)名(自變量名)函數(shù)值的獲得必須通過具體的運算實現(xiàn),并賦給因變量.一、M文件M文件建立方法:1.在Matlab中,點:File->New->M-file2.在編輯窗口中輸入程序內(nèi)容

3.點:File->Save,存盤,M文件名最好與函數(shù)名一致。Matlab的應(yīng)用程序也以M文件保存。例:定義函數(shù)f(x1,x2)=100(x2-x12)2+(1-x1)2functionf=fun(x)f=100*(x(2)-x(1)^2)^2+(1-x(1))^21.建立M文件:fun.m2.可以直接使用函數(shù)fun.m例如:計算f(1,2),只需在Matlab命令窗口鍵入命令:x=[12]fun(x)Matlab的運算事實上是以數(shù)組

(array)及矩陣

(matrix)方式在做運算。

?x=[12345678];%一維1x8陣列

?x=[12345678;4567891011];%二維2x8矩陣,以;表示分行

二、數(shù)組2.1創(chuàng)建簡單的數(shù)組x=[abcdef]創(chuàng)建包含指定元素的行向量2

.2

建立數(shù)組上面的方法只適用于元素不多的情況,但是當元素很多的時候,則須采用以下的方式:x=first:last

創(chuàng)建從first開始,加1計數(shù),到last結(jié)束的行向量x=first:increment:last

創(chuàng)建始于first,步長increment,終于last的向量x=linspace(first,last,n)創(chuàng)建從first開始,到last結(jié)束,有n個元素的行向量

產(chǎn)生列向量有兩種方法:直接產(chǎn)生例c=[1;2;3;4]

轉(zhuǎn)置產(chǎn)生例b=[1234];c=b’

說明:以空格或逗號分隔的元素指定的是不同列的元素,而以分號分隔的元素指定了不同行的元素.

2.3數(shù)組的運算(1)標量-數(shù)組運算數(shù)組對標量的加、減、乘、除、乘方是數(shù)組的每個元素對該標量施加相應(yīng)的加、減、乘、除、乘方運算.

設(shè):a=[a1,a2,…,an],c=標量則:a+c=[a1+c,a2+c,…,an+c]a.*c=[a1*c,a2*c,…,an*c]a./c=[a1/c,a2/c,…,an/c](右除)

a.\c=[c/a1,c/a2,…,c/an](左除)

a.^c=[a1^c,a2^c,…,an^c]c.^a=[c^a1,c^a2,…,c^an](2)數(shù)組-數(shù)組運算

當兩個數(shù)組有相同維數(shù)時,加、減、乘、除、冪運算可按元素對元素方式進行的,不同大小或維數(shù)的數(shù)組是不能進行運算的.

設(shè):a=[a1,a2,…,an],b=[b1,b2,…,bn]則:a+b=[a1+b1,a2+b2,…,an+bn]a.*b=[a1*b1,a2*b2,…,an*bn]a./b=[a1/b1,a2/b2,…,an/bn]a.\b=[b1/a1,b2/a2,…,bn/an]a.^b=[a1^b1,a2^b2,…,an^bn](1)輸入矩陣時要以“[]”為其標識,即矩陣的元素應(yīng)在“[]”內(nèi)部;(2)同行元素之間可由空格或“,”分隔,行與行間用“;”或回車符分隔;(3)矩陣元素可為運算表達式;(4)如不想獲得中間結(jié)果,可以“;”結(jié)束。1、一般矩陣的生成:三、矩陣例1:輸入矩陣解:B=[1+9i2+8i3+7i;4+6j5+5j6+4i;7+3i8+2i0+j]輸入命令在Matlab環(huán)境中定義了兩個記號i

和j

,可以用來直接輸入復(fù)數(shù)矩陣2、特殊矩陣的生成:(1)生成單位矩陣eye(n)

生成n階單位陣eye(m,n)

生成階單位陣eye(size(A))

生成與矩陣A大小相同的單位陣(2)生成全1矩陣ones(n)

生成n階全1矩陣ones(m,n)

生成階全1矩陣ones(size(A))

生成與矩陣A大小相同的全1矩陣(3)生成全0矩陣zeros(n)

生成n階全0矩陣zeros(m,n)

生成階全0矩陣zeros(size(A))

生成與矩陣A大小相同的全0矩陣例3:已知矩陣試生成與矩陣A大小相同的單位陣,全0陣及全1陣;解:輸入命令A(yù)=[123;456;789];B1=eye(size(A))B2=zeros(size(A))B3=ones(size(A))(4)生成隨機矩陣rand(n)

生成n階隨機陣rand(m,n)

生成階均勻分布隨機數(shù)矩陣randn(m,n)

生成階正態(tài)分布隨機數(shù)矩陣rand(size(A))

生成與矩陣A大小相同的隨機陣(5)生成對角矩陣生成第k

個對角線由向量v組成的對角陣,k可以是正數(shù),零或負數(shù)。當k是零時指主對角線(可簡記為A=diag(v)),k是負數(shù)時v在對角線下,k是正數(shù)時v在對角線上。生成的對角矩陣的Matlab調(diào)用格式為:A=diag(v,k)(6)幻方矩陣(魔陣)即每行每列和對角線上元素之和相等命令:magic(n)(7)Vandermonde矩陣生成的Vandermonde矩陣的Matlat調(diào)用格式為:V=vander(C)(8)希爾伯特(Hilbert)

矩陣希爾伯特矩陣其元素為1/(i+j-1),i,j分別為其行標和列標。[1,1/2,1/3,……,1/n;1/2,1/3,1/4,……,1/(n+1);

1/3,1/4,1/5,……,1/(n+2);

……

1/n,1/(n+1),1/(n+2),……,1/(2n-1)]希爾伯特矩陣是一種數(shù)學(xué)變換矩陣,正定,且高度病態(tài)(即,任何一個元素發(fā)生一點變動,整個矩陣的值和逆矩陣都會發(fā)生巨大變化),病態(tài)程度和階數(shù)相關(guān)。命令:hilb(n)生成n階希爾伯特矩陣3、符號矩陣的生成:如果已經(jīng)建立起數(shù)值矩陣A,則可以由B=sym(A)語句將其轉(zhuǎn)化成符號矩陣。這樣,所有數(shù)值矩陣均可以通過這樣的形式轉(zhuǎn)換成符號矩陣,可以利用符號運算工具箱獲得更高精度的解。值得注意的是,不管原來的數(shù)值矩陣是以分數(shù)形式給出,還是以小數(shù)形式給出,轉(zhuǎn)換成符號矩陣后都將以最接近于原數(shù)的有理形式給出。3、矩陣的修改冒號表達式是Matlab中很有用的表達式,在向量生成、子矩陣提取等方面都特別重要。冒號表達式的原型為該函數(shù)生成一個行向量v,其中s1為向量的起始值,s2

為步距,該向量從s1出發(fā),每隔步距s2取一個點,直至不超過s3的最大值就可以構(gòu)成一個向量。若省略s2,則步距的默認值為1。(1).冒號表達式(2).子矩陣的提取[1]提取子矩陣在Matlab是經(jīng)常需要處理的事。提取子矩陣的具體方法是:其中向量v1

表示子矩陣要包含的行號構(gòu)成的向量,v2

表示子矩陣要包含的列號構(gòu)成的向量。若v1為:,則表示要提取所有的行,v2亦有相應(yīng)的處理結(jié)果。關(guān)鍵詞end表示最后一行(或列,取決于其位置)。例:解:設(shè)(1)提取矩陣A全部奇數(shù)行,所有列;(2)提取矩陣A的3,2,1行,2,3,4列;(3)將矩陣A左右翻轉(zhuǎn),即最后一列排在最前面;分別輸入命令A(yù)=[1436;2795;5766];B1=A(1:2:end,:)B2=A([3,2,1],[2,3,4])B3=A(:,end:-1:1)

diag(A,k)[2]一些特殊子矩陣的提取表示將矩陣A的第k個對角線的元素提取組成列向量,若k省略等價于k=0,表示主對角線元素。

tril(A,k)與tril(A)表示提取矩陣A的下三角部分,未提取部分用0補齊。

triu(A,k)與triu(A)表示提取矩陣A的上三角部分,未提取部分用0補齊。

rot90(A)表示將矩陣A逆時針旋轉(zhuǎn)900

fliplr(A)表示將矩陣A左右翻轉(zhuǎn)

flipud(A)表示將矩陣A上下翻轉(zhuǎn)[3].矩陣的擴充和部分元素的刪除a矩陣的擴充可用“[]”將小矩陣擴充成大矩陣。可用命令D=[AB]構(gòu)造矩陣D,其中A和B必須有相同的行??捎妹頓=[A;BC]構(gòu)造矩陣D,其中B和C必須有相同的行,B和C的列數(shù)之和必須等于A的列數(shù)。b也可用直接賦值的辦法對超出矩陣維數(shù)的元素賦值來擴充矩陣。A(1:3,1:3)=eye(3)命令A(yù)(1:3,1:3)=ones(3)A(1:3,1:3)=zeros(3)類似A(i,j)=k命令A(yù)(:,j)=[]或A(i,:)=[]命令A(yù)(:,[ij])=A(:,[ji])命令A(yù)([ij],:)=A([ji],:)命令基本矩陣的運算符運算符含義運算符含義A+BA-BA*BA.*BA\BA/BA./Bk*A加法減法乘法對應(yīng)元素相乘左除右除A的元素被B的對應(yīng)元素除數(shù)乘A^nA.^nA.^Bexp(A)log(A)sqrt(A)det(A)inv(A)A’A為方陣時,自乘n次A的各元素n次方A,B兩矩陣對應(yīng)元素乘方A的所有元素取以e為底的指數(shù)對A的各元素取e為底的對數(shù)對A的各元素求平方根求A的行列式求A的逆矩陣求A轉(zhuǎn)置4、矩陣的運算按升序重新排序函數(shù)

sort功能把輸入?yún)⒘恐械脑匕磸男〉酱蟮姆较蛑匦屡帕懈袷紹=sort(A)%沿著輸入?yún)⒘緼的不同維的方向、從小到大重新排列A中的元素。A可以是字符串的、實數(shù)的、復(fù)數(shù)的單元數(shù)組。對于A中完全相同的元素,則按它們在A中的先后位置排列在一塊;若A為復(fù)數(shù)的,則按元素幅值的從小到大排列,若有幅值相同的復(fù)數(shù)元素,則再按它們在區(qū)間[-π,π]的幅角從小到大排列;若A中有元素為NaN,則將它們排到最后。若A為向量,則返回從小到大的向量,若A為二維矩陣,則按列的方向進行排列;若A為多維數(shù)組,sort(A)把沿著第一非單元集的元素象向量一樣進行處理。B=sort(A,dim)%沿著矩陣A(向量的、矩陣的或多維的)中指定維數(shù)dim方向重新排列A中的元素。[B,INDEX]=sort(A,…)%輸出參量B的結(jié)果如同上面的情形,輸出INDEX是一等于size(A)的數(shù)組,它的每一列是與A中列向量的元素相對應(yīng)的置換向量。若A中有重復(fù)出現(xiàn)的相同的值,則返回保存原來相對位置的索引。例A=[-1.9,-2,3.1415926,5.6,7.0,2.4+3.6i];[B1,INDEX]=sort(A)M=magic(4);B2=sort(M)%逐列從小到大給出排序計算結(jié)果為:

B1=Columns1through4-0.2000-1.90003.14162.4000+3.6000iColumns5through65.60007.0000INDEX=213645B2=423157689111012(1).方陣的行列式:det(A)(2).方陣的逆: inv(A)(3).矩陣的跡: trace(A)(4).矩陣的秩:rank(A)(5).矩陣和向量的范數(shù):norm(A);%歐幾里德范數(shù);

norm(x,inf);%無窮范數(shù)(6)向量p的最大元素:max(p);(7)矩陣A的最大元素:max(max(A));

矩陣的運算命令

矩陣的運算與分解(1)LU分解: [L,U]=lu(X)%滿足LU=X U為上三角陣,L為下三角陣或其變換形式;(2)QR分解: [Q,R]=qr(A)

求得正交矩陣Q和上三角陣R,Q和R滿足:QR=A;(3)特征值分解 [V,D]=eig(A)

計算A的特征值對角陣D和特征向量V,使AV=VD成立;(4)SVD分解:[U,S,V]=svd(A)

在分解式A=U*S*V中,S是一個對角矩陣 ;矩陣分解設(shè)A=[3214;2557;1559;4791];求下列各式的結(jié)果;A1=sqrt(A);%對矩陣A各元素開方A2=det(A);

%求A的行列式A3=inv(A);%求A的逆矩陣a1=trace(A);%求A的跡[V,D]=eig(A);

%求A的特征向量與特征根;a2=norm(A);%求A的正規(guī)范數(shù)a3=norm(A(:));%求A拉成一列時的范數(shù)矩陣運算練習(xí)3.2.3矩陣的分解練習(xí)clearA=rand(5)

%產(chǎn)生5階隨機矩陣A[U,S,V]=svd(A);

%對A做奇異值分解A8=U*U’;

%驗證U為正交矩陣A9=V*V’;

%驗證V為正交矩陣[L,U]=lu(A);%對A作LU分解[Q,R]=qr(A);

%對A作QR分解B1=Q*Q’;

%驗證U為正交矩陣A10=hilb(6);%生成6階HILB矩陣[V,D]=eig(A10);%求A10特征向量與根B2=V*V’;%驗證V是否是正交矩陣六Matlab命令系統(tǒng)命令含義help在線幫助helpwin在線幫助窗口helpdesk在線幫助工作臺demo運行演示程序ver版本信息readme顯示Readme文件who顯示當前變量whos顯示當前變量的詳細信息clear清空工作間的變量和函數(shù)pack整理工作間的內(nèi)存load把文件調(diào)入變量到工作間save把變量存入文件中quit/exit退出Matlabwhat顯示指定的Matlab文件lookfor在HELP里搜索關(guān)鍵字which定位函數(shù)或文件path獲取或設(shè)置搜索路徑echo命令回顯cd改變當前的工作目錄pwd顯示當前的工作目錄dir顯示目錄內(nèi)容unix執(zhí)行unix命令dos執(zhí)行dos命令!執(zhí)行操作系統(tǒng)命令computer顯示計算機類型可查閱在線幫助helpwin中Matlab\general或helpgeneral。七Matlab語言中的關(guān)系與邏輯運算

關(guān)系運算

指令含義<

小于<=

小于等于>

大于>=

大于等于==

等于~=

不等于

邏輯運算指令

含義

&

邏輯and

|

邏輯or

~

邏輯not

指令含義

xor(A,B)

不相同就取1,否則取0any(A)只要有非0就取1,否則取0all(A)全為1取1,否則為0isnan(A)為數(shù)NaN取1,否則為0Isinf(A)為數(shù)inf取1,否則為0isfinite(A)有限大小元素取1,否則為0ischar(A)是字符串取1,否則為0isequal(A,B)相等取1,否則取0ismember(A,B)

兩個矩陣是屬于關(guān)系取1,否則取0isempty(A)矩陣為空取1,否則取0isletter(A)是字母取1,否則取0(可以是字符串)isstudent(A)學(xué)生版取1isprime(A)質(zhì)數(shù)取1,否則取0isreal(A)實數(shù)取1,否則取0isspace(A)空格位置取1,否則取0

邏輯關(guān)系函數(shù)Matlab提供如下幾種控制流結(jié)構(gòu):For循環(huán),While循環(huán),If-Else-End結(jié)構(gòu)和switch-case-end結(jié)構(gòu)。

八Matlab編程這些結(jié)構(gòu)經(jīng)常包含大量的MATLAB命令,故經(jīng)常出現(xiàn)在MATLAB程序中,而不是直接加在Matlab提示符下.1.IF-ELSE-END結(jié)構(gòu)很多情況下,命令的序列必須根據(jù)關(guān)系的檢驗有條件地執(zhí)行。在編程語言里,這種邏輯由某種If-Else-End結(jié)構(gòu)來提供。如果在表達式1中的所有元素為真(非零),那么就執(zhí)行if和end語言之間的 語句1。最簡單的If-Else-End結(jié)構(gòu)是:

if表達式1

語句1 end假如有兩個選擇,If-Else-End結(jié)構(gòu)是:

if表達式1

語句1else

語句2end在這里,如果表達式1為真,則執(zhí)行語句1;如果表達式是假,則執(zhí)行語句2。當有三個或更多的選擇時,If-Else-End結(jié)構(gòu)采用形式if表達式1

語句1elseif表達式2

語句2elseif表達式3

語句3elseif表達式4

語句4elseif……

else

語句

end設(shè)A=[cos(100),cos(200),cos(300),cos(400),cos(500)],

把A中的正數(shù)和負數(shù)分別放入兩個矩陣中,并記錄原來的位置.

clearn=length(A)

%求出A的長度t1=0;t2=0;fork=1:nifA(k)>0

t1=t1+1;B1(1,t1)=A(k);B1(2,t1)=k;else

t2=t2+1;B2(1,t2)=A(k);B2(2,t2)=k;endenddisp(‘A中的正數(shù)及位置是’),B1disp(‘A中的負數(shù)及位置是’),B2

解執(zhí)行右邊程序可得:B1=0.86230.48721.00002.0000B2=-0.0221-0.5253-0.88383.00004.00005.0000

For循環(huán)允許一條語句或一組語句被重復(fù)執(zhí)行預(yù)先指定的次數(shù)。For循環(huán)的一般形式是:

fork=n1:d:n2%以d為步長;g(k+1)=f(k);%循環(huán)主體,;end%結(jié)束符;2.For循環(huán)在for和end語句之間的語句按數(shù)組中的每一列執(zhí)行一次。在每一次迭代中,x被指定為數(shù)組的下一列,即在第n次循環(huán)中,x=array(:,n)。在For循環(huán)內(nèi)接受任何有效的Matlab數(shù)組;For循環(huán)可按需要嵌套;當有一個等效的數(shù)組方法來解給定的問題時,應(yīng)避免用For循環(huán)。注意:%求調(diào)和級數(shù)前100項之和SS=0;%初始化賦值;fork=1:100S=S+1/k;%循環(huán)主體語句;enddisp(‘調(diào)和級數(shù)前100項之和S等于’),S運行結(jié)果輸出:調(diào)和級數(shù)前100項之和S等于S=5.1874生成如下矩陣是A=10000000001100000000121000000013310000001464100000151010510000161520156100017213535217100182856705628810193684126126843691clearA=zeros(10);%初始化AA(1:10,1)=1;A(1,2:10)=0;fork1=2:10fork2=2:k1A(k1,k2)=A(k1-1,k2)+A(k1-1,k2-1);endenddisp(’按公式計算結(jié)果生成的矩陣是’),A與For循環(huán)以固定次數(shù)求一組命令的值相反,While循環(huán)以不定的次數(shù)重復(fù)執(zhí)行一組語句。While循環(huán)的一般形式是:

whilef(x,n)<Sg(k+1)=f(k);%循環(huán)主體;end%結(jié)束符;3.While循環(huán)只要表達式1里的所有元素為真,就執(zhí)行while和end之間的語句1,否則,就結(jié)束循環(huán)。

例求1至100的偶數(shù)和。clearx=0;sum=0;whilex<101sum=sum+x;x=x+2;endsum%顯示結(jié)果

隨機函數(shù)rand與randn功能生成元素均勻分布于(0,1)上的數(shù)值與陣列用法Y=rand(n)%返回n*n階的方陣Y,其元素均勻分布于區(qū)間(0,1)。若n不是一標量,則顯示一出錯信息。Y=rand(m,n)、Y=rand([mn])

%返回階數(shù)為m*n的,元素均勻分布于區(qū)間(0,1)上矩陣Y。Y=rand(m,n,p,…)、Y=rand([mnp…])%生成階數(shù)m*n*p*…的元素服從均勻分布的多維隨機陣列Y。3.4.1隨機函數(shù)rand計算結(jié)果可能為:R1=0.66550.05630.26560.53710.67970.32780.44020.92930.54570.61290.63250.44120.93430.93940.39400.53950.65010.56480.70840.2206Y=rand(size(A))%生成一與陣列A同型的隨機均勻陣列Yrand%該命令在每次單獨使用時,都返回一隨機數(shù)(服從均勻分布)。s=rand(‘state’)

%返回一有35元素的列向量s,其中包含均勻分布生成器的當前狀態(tài)。該改變生成器的當前的狀態(tài)。例R1=rand(4,5)例:

R1=rand(4,5)

R2=0.6+sqrt(0.1)*randn(5)計算結(jié)果為:R1=0.27780.26810.55520.51670.88210.27450.37100.19160.33850.58230.91240.51290.41640.29930.05500.41250.26970.15080.93700.5878R2= 0.46320.97660.54100.63600.69310.07330.97600.82950.93730.17750.63960.58810.41400.61870.82590.69100.70351.29040.56981.11340.23750.65520.55690.33680.3812運行程序后輸出結(jié)果:R2=33.683519.821636.943649.628946.467918.516434.259715.366331.054949.037719.002637.100633.604639.536113.933612.464112.980435.542023.291646.830428.523848.741849.084313.051210.9265例

a=10;b=50;R2=a+(b-a)*rand(5)%經(jīng)過線性變換后生成元素均勻分布于(10,50)上的矩陣;隨機函數(shù)randn功能生成元素服從正態(tài)分布(N(0,1))的數(shù)值與陣列格式Y(jié)=randn(n)%返回n*n階的方陣Y,其元素服從正態(tài)分布N(0,1)。若n不是一標量,則顯示一出錯信息.Y=randn(m,n)、Y=randn([mn])%返回階數(shù)為m*n的,元素均勻分布于區(qū)間(0,1)上矩陣Y。Y=randn(m,n,p,…)、Y=randn([mnp…])%生成階數(shù)m*n*p*…的,元素服從正態(tài)分布的多維隨機陣列Y。Y=randn(size(A))%生成一與陣列

溫馨提示

  • 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

提交評論