MATLAB實用技巧精講之二_第1頁
MATLAB實用技巧精講之二_第2頁
MATLAB實用技巧精講之二_第3頁
MATLAB實用技巧精講之二_第4頁
MATLAB實用技巧精講之二_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章MATLAB的數(shù)值計算功能多項式的運算。MATLAB矢量化。MATLAB的符號計算功能。1MATLAB的數(shù)值計算功能:多項式運算多項式的表示方法例如:輸入多項式p(x)=x3-5x2+6x-33>>p=[1-56-33];>>poly2sym(p)ans=x^3-5*x^2+6*x-332MATLAB的數(shù)值計算功能:多項式運算求多項式的根用函數(shù)roots求解多項式的根例:求解方程p(x)=2x4-5x3+6x2-x+9的所有根>>p=[2-56-19];>>roots(p)ans=1.6024+1.2709i1.6024-1.2709i-0.3524+0.9755i-0.3524-0.9755i3MATLAB的數(shù)值計算功能:多項式運算多項式的四則運算(1)加法和減法

對于多項式的加法和減法,MATLAB不提供專用的函數(shù)。(2)乘法和除法乘法由函數(shù)conv來實現(xiàn),其使用格式為

c=conv(a,b)除法由deconv實現(xiàn),其使用格式為

d=deconv(a,b)4MATLAB的數(shù)值計算功能:多項式運算多項式的乘除運算乘法由函數(shù)conv來實現(xiàn)除法由deconv實現(xiàn)例:計算兩多項式的乘除法>>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>>d=[3-90-18];>>poly2sym(d)ans=3*x^2-90*x-18>>p1=deconv(pd,d)p1=2-56-195MATLAB的數(shù)值計算功能:多項式運算對多項式求導數(shù)采用函數(shù)polyder對多項式求導數(shù),polyder(p)例:>>p=[6-195432-4539-792-162];>>poly2sym(p)ans=6*x^6-195*x^5+432*x^4-453*x^3+9*x^2-792*x-162>>Dp=polyder(p)Dp=36-9751728-135918-792>>poly2sym(Dp)ans=36*x^5-975*x^4+1728*x^3-1359*x^2+18*x-7926MATLAB的數(shù)值計算功能:多項式運算多項式擬合多項式擬合用擬合函數(shù)polyfit實現(xiàn),調用格式polyfit(X,Y,n)X和Y為擬合數(shù)據,n為擬合多項式的階數(shù)例:用5階多項式對[0,π/2]上的正弦函數(shù)進行擬合,并圖示擬合情況。>>x=0:pi/20:pi/2;y=sin(x);>>a=polyfit(x,y,5);>>x1=0:pi/30:pi*2;y1=sin(x1);>>y2=a(1)*x1.^5+a(2)*x1.^4+a(3)*x1.^3+a(4)*x1.^2+a(5)*x1+a(6);>>plot(x1,y1,'b-',x1,y2,'r*');>>legend('原曲線','擬合曲線')>>axis([0,7,-1.2,4])7MATLAB的數(shù)值計算功能:保存與再用把Matlab工作空間中一些有用的數(shù)據長久保存下來的方法是生成mat數(shù)據文件

save——將工作空間中所有的變量存到matlab.mat文件中

savedata將工作空間中所有的變量存到data.mat文件中

savedataab將工作空間中a和b變量存到data.mat文件中

loaddata——將data.mat記錄的變量調入工作空間8MATLAB的數(shù)值計算功能:Matlab矢量化何為矢量化問題盡量使用矩陣表述避免出現(xiàn)太多(兩重或以上)的循環(huán)嵌套矢量化技術的目的在于改善程序的性能例1:有一200×400矩陣datafori=1:200,forj=1:400,ifdata(i,j)>0

data(i,j)=0;endendendcputime=0.0470data(data>0)=0;cputime=0.01609MATLAB的數(shù)值計算功能:Matlab矢量化例2:上萬個點的計算采用矢量化技術可以大幅度提高運算速度%一般循環(huán)編程i=0;fort=0:.01:10000,i=i+1;

y(i)=sin(t);end%矢量化編程t=0:.01:10000;y=sin(t);cputime>20秒cputime=0.2340秒10MATLAB的數(shù)值計算功能:Matlab矢量化使用向量作索引如果X和V都為向量X(V)就是[X(V(1)),X(V(2)),...,X(V(n))]例:X=[25811141720232629]V=[426]X(V)就是[X(4)X(2)X(6)],即[11517]11MATLAB的數(shù)值計算功能:Matlab矢量化創(chuàng)建和操作矩陣從向量構建矩陣例1:A=ones(5,5)*10;A=10;A=A(ones(5,5));例2:M=repmat([1:5]',[1,3]);M=

111

222

333

444

555怎樣用repmat生成5×5全10矩陣?乘法是不必要的A=

1010

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

10

12MATLAB的數(shù)值計算功能:Matlab矢量化排序、設置和計數(shù)max最大元素min最小元素sort遞增排序unique遞增排序并且去掉相同元素例1:找出向量中最大元,返回其下標>>a=[5278912752578];>>[Y,I]=max(a)Y=525I=713MATLAB的數(shù)值計算功能:Matlab矢量化排序、設置和計數(shù)例2:向量元素排序>>a=[5278912752578];>>sort(a)ans=2577127889525>>unique(a)ans=25712788952514MATLAB的符號計算功能1993年之前的符號計算語言:Maple、Mathematic和MathCAD等1993年Mathworks公司為了解決MATLAB用戶對符號計算的需求,從加拿大滑鐵盧大學購買了Maple的使用權,并在此基礎上開發(fā)了符號計算工具箱(SymbolicToolbox)至此Matlab

不僅具有數(shù)值運算功能,具有符號計算功能15MATLAB的符號計算功能本部分包含內容符號表達式、符號矩陣的創(chuàng)建符號線性代數(shù)因式分解、展開和簡化符號代數(shù)方程求解符號微積分符號微分方程16MATLAB的符號計算功能

符號運算與數(shù)值運算的區(qū)別數(shù)值運算中必須先對變量賦值,然后才能參與運算。符號運算無須事先對獨立變量賦值,運算結果以標準的符號形式表達。符號運算的特點:運算對象可以是沒賦值的符號變量可以獲得任意精度的解盡管MATLAB7的符號運算功能很強大,但是一門優(yōu)秀的語言應該能夠博采眾家之長。因此MATLAB7語言提供了和MAPLE語言的良好接口,通過maple.m和map.m兩個專用的M文件來實現(xiàn)。

17MATLAB符號變量和符號表達式的生成和使用定義基本符號對象的指令有兩個:sym,syms。它們的常用使用格式如下:f=sym(arg)

%把數(shù)字、字符串或表達式arg

轉換為符號對象f。syms(‘argv1’,‘argv2’,‘argvk’)%把字符arg1,arg2,argk定義為基本符號對象。symsargv1argv2argvk%上述格式的簡潔形式。18MATLAB符號變量和符號表達式的生成和使用【例】符號常數(shù)形成中的差異。>>a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)]a1=0.33330.44882.23615.3777>>a2=sym('[1/3,pi/7,sqrt(5),pi+sqrt(5)]')a2=[1/3,pi/7,sqrt(5),pi+sqrt(5)]>>a3=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)])a3=[1/3,pi/7,sqrt(5),6054707603575008*2^(-50)]>>a23=a2-a3a23=[0,0,0,pi+5^(1/2)-189209612611719/35184372088832]19MATLAB符號變量和符號表達式的生成和使用【例】使用sym函數(shù)定義符號表達式>>a=sym('a');b=sym('b');c=sym('c');x=sym('x');>>f=a*x^2+b*x+cf=a*x^2+b*x+c也可以采取整體定義法>>f=sym('a*x^2+b*x+c')f=a*x^2+b*x+c20MATLAB符號變量的生成和使用【例題】用符號計算驗證三角等式

>>symsfai1fai2>>y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))y=sin(fai1-fai2)>>clear>>y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))???Undefinedfunctionorvariable'fai1'.21符號表達式(符號函數(shù))的操作符號表達式的四則運算>>symsxyab>>fun1=sin(x)+cos(y);>>fun2=a+b;>>fun1+fun2ans=sin(x)+cos(y)+a+b>>fun1*fun2ans=(sin(x)+cos(y))*(a+b)>>fun1/fun2ans=(sin(x)+cos(y))/(a+b)22

MATLAB符號矩陣的創(chuàng)建

用Matlab函數(shù)sym創(chuàng)建矩陣命令格式:A=sym('[]')

※需用sym函數(shù)※需用''標識注意:數(shù)值矩陣A=[1,2;3,4]有效,A=[a,b;c,d]

則不識別!例:>>B=sym('[a,2*b;3*a,0]')B=

[a,2*b]

[3*a,0]這就完成了一個符號矩陣的創(chuàng)建。符號矩陣的每一行的兩端都有方括號,這是與Matlab數(shù)值矩陣的一個重要區(qū)別。23MATLAB符號矩陣的創(chuàng)建用生成子矩陣的方法生成符號矩陣命令格式:A=[‘[]’;‘[]’]

【例題】用生成子矩陣的方法生成符號矩陣>>h1=['[55,ttt]';'[44,1]']???Errorusing==>vertcatAllrowsinthebracketedexpressionmusthavethesamenumberofcolumns.>>h2=['[55,ttt]';'[44,1]']h2=[55,ttt][44,1]該方法不需要調用sym函數(shù),但是要保證同一列的元素具有相同的長度。當要輸入的字符串長度不一致時,可以在較短的字符串前邊或者后邊加上空格符補充24MATLAB符號矩陣的創(chuàng)建由數(shù)值矩陣轉換成符號矩陣將數(shù)值矩陣轉化為符號矩陣,函數(shù)調用格式:B=sym(A)例:>>A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000>>B=sym(A)B=[1/3,5/2][10/7,2/5]>>A+B=?ans=[2/3,5][20/7,4/5]25MATLAB符號矩陣及符號數(shù)組的運算符號矩陣的四則運算A+B和A-B命令可以實現(xiàn)符號陣列的加法和減法。A*B命令可以實現(xiàn)符號矩陣的乘法。A\B命令可以實現(xiàn)矩陣的左除法。

A\B為符號線性方程組A*X=B的解。B/A命令可以實現(xiàn)矩陣的右除法。

B/A為符號線性方程組X*A=B的解。26MATLAB符號矩陣及符號數(shù)組的運算【例】>>m=sym('[a,a^2,a*2,1/a]')m=[a,a^2,a*2,1/a]>>n=sym('[2*a,b,a,a^2]')n=[2*a,b,a,a^2]>>m+nans=[3*a,a^2+b,3*a,1/a+a^2]27MATLAB符號矩陣及符號數(shù)組的運算>>x=m\nx=[0,0,0,0][0,0,0,0][0,0,0,0][2*a^2,b*a,a^2,a^3]>>y=m/nInfWarning:Systemisinconsistent.Solutiondoesnotexist.y=Inf28MATLAB符號矩陣及符號數(shù)組的運算符號矩陣的逆和行列式運算

inv函數(shù)可以用來求方正的逆矩陣,命令為:inv(X);

det函數(shù)可以求方正的行列式,命令為:det(X)。

29MATLAB符號矩陣及符號數(shù)組的運算符號數(shù)組的四則運算A.*B命令用于符號數(shù)組的乘法。A.*B為按參量A與B對應的分量進行相乘。A.\B命令用于數(shù)組的左除法運算。A.\B為按對應的分量進行相除。A./B命令用于數(shù)組的右除法運算。A./B為按對應的分量進行相除。30MATLAB符號矩陣及符號數(shù)組的運算【例】符號數(shù)組的四則運算>>q=sym('[3,4,9,6;x,y,z,w;a,b,c,d]')

q=[3,4,9,6][x,y,z,w][a,b,c,d]>>p=sym('[x,1/x,x^2,x^3;a,b,c,d;5,2,3,6]')p=[x,1/x,x^2,x^3][a,b,c,d][5,2,3,6]>>r=q*p???Errorusing==>sym.mtimesInnermatrixdimensionsmustagree.31MATLAB符號矩陣及符號數(shù)組的運算>>q.*pans=[3*x,4/x,9*x^2,6*x^3][x*a,y*b,z*c,w*d][5*a,2*b,3*c,6*d]>>q.\p

ans=[1/3*x,1/4/x,1/9*x^2,1/6*x^3][a/x,b/y,c/z,d/w][5/a,2/b,3/c,6/d]>>q./pans=[3/x,4*x,9/x^2,6/x^3][x/a,y/b,z/c,w/d][1/5*a,1/2*b,1/3*c,1/6*d]32MATLAB符號極限符號極限limit(F,a)命令中設定變量為x,計算當時F的極限值。limit(F)命令中設定變量為x,計算當時F的極限值。limit(F,x,a,`right`)或limit(F,x,a,`left`)來計算符號函數(shù)F的單側極限:左極限或右極限。33MATLAB符號極限【例】使用limit函數(shù)來求符號極限。>>symsxath;>>limit(sin(x)/x)ans=1>>limit((x-2)/(x^2-4),2)ans=1/4>>limit(1/x,x,0,'right')ans=Inf>>limit(1/x,x,0,'left')ans=-Inf34MATLAB符號微積分符號微積分diff(f)——對缺省變量求一階導數(shù)diff(f,v)——對指定變量v求一階導數(shù)diff(f,v,n)——對指定變量v求n階導數(shù)int(f)——對f表達式的缺省變量求積分int(f,v)——對f表達式的v變量求積分int(f,v,a,b)——對f表達式的v變量在(a,b)區(qū)間求定積分int(‘被積表達式’,‘積分變量’,‘積分上限’,‘積分下限’)——定積分——缺省時為不定積分35符號微分和求導【例】求單個自變量時的微分>>symsx>>diff(x^3+2*x^2+4*x+6)

ans=3*x^2+4*x+4

>>diff(sin(x^3),4)

ans=81*sin(x^3)*x^8-324*cos(x^3)*x^5-180*sin(x^3)*x^236符號微分和求導【例】對多個自變量的函數(shù)中的某個自變量求導。>>symsxy>>diff(x*y+y^2+sin(x)+cos(y),y)ans=x+2*y-sin(y)>>diff(x*y+y^2+sin(x)+cos(y),y,3)ans=sin(y)37MATLAB的符號積分例:計算二重不定積分38MATLAB的符號積分例:計算二重不定積分>>symsxy>>F=int(int(x*exp(-x*y),x),y)

F=

1/y*exp(-x*y)39MATLAB符號積分變換Fourier變換及其逆變換

時域中的f(t)與它在頻域中的Fourier變換F(w)之間存在如下關系:

Fw=fourier(ft,t,w)%求時域函數(shù)ft的Fourier變換Fwft=ifourier(Fw,w,t)%求頻域函數(shù)Fw的Fourier反變換ft40MATLAB符號積分變換Fourier變換及其逆變換【例】求的Fourier變換。>>symstw>>ut=sym('Heaviside(t)')>>UT=fourier(ut)UT=pi*dirac(w)-i/w

>>vt=ifourier(UT,w,t)

vt=heaviside(t)41MATLAB符號積分變換Laplace變換及其逆變換的定義為:

Fs=laplace(ft,t,s)%求時域函數(shù)ft的Laplace變換Fsft=ilaplace(Fs,s,t)%求頻域函數(shù)Fs的Laplace反變換ft42MATLAB符號積分變換【例】求的Laplace變換。>>

symsts;>>

symsabpositive;>>

Dt=sym('Dirac(t-a)');>>

Ut=sym('Heaviside(t-b)');>>Mt=[Dt,Ut;exp(-a*t)*sin(b*t),t^2*exp(-t)];>>Ms=laplace(Mt,t,s)Ms=[exp(-s*a),exp(-s*b)/s][1/b/((s+a)^2/b^2+1),2/(s+1)^3]43

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

符號代數(shù)方程求解Matlab符號運算能夠解一般的線性方程、非線性方程及一般的代數(shù)方程、代數(shù)方程組。命令格式:solve(f)——求一個方程的解solve(f1,f2,…fn)——求n個方程的解solve(‘eq1’,‘eq2’,…,‘eqn’,‘v1’,‘v2’,…,‘vn’)——求方程組關于指定變量的解(推薦格式)。solve(exp1,exp2,….,expn,v1,v2,…,vn)——求方程組關于指定變量的解(推薦格式)。44

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

符號代數(shù)方程求解例1:f=ax2+bx+c求解>>f='a*x^2+b*x+c';>>solve(f)%對缺省變量x求解ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]計算機格式一般格式45MATLAB符號代數(shù)方程的求解符號代數(shù)方程求解>>solve(f,'b')%對指定變量b求解ans=-(a*x^2+c)/x例2:符號方程cos(x)=sin(x)求解>>f1=solve('cos(x)=sin(x)')f1=1/4*pi46MATLAB符號代數(shù)方程的求解符號代數(shù)方程求解例:解方程組>>g1='x+y+z=1';g2='x-y+z=2';g3='2*x-y-z=1';>>f=solve(g1,g2,g3)f=x:[1x1sym]

y:[1x1sym]z:[1x1sym]>>[f.x,f.y,f.z]ans=[2/3,-1/2,5/6]f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')[x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')x=2/3y=-1/2z=5/647MATLAB符號微分方程求解符號微分方程求解用一個函數(shù)可以方便地得到微分方程的符號解,求解指令:dsolve調用格式:dsolve(‘f’,‘g’)f微分方程,可多至12個微分方程的求解;g為初始條件默認自變量為'x',可任意指定

溫馨提示

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

評論

0/150

提交評論