MATLAB实用技巧精讲之二_第1页
MATLAB实用技巧精讲之二_第2页
MATLAB实用技巧精讲之二_第3页
MATLAB实用技巧精讲之二_第4页
MATLAB实用技巧精讲之二_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章MATLAB的数值计算功能多项式的运算。MATLAB矢量化。MATLAB的符号计算功能。1MATLAB的数值计算功能:多项式运算多项式的表示方法例如:输入多项式p(x)=x3-5x2+6x-33>>p=[1-56-33];>>poly2sym(p)ans=x^3-5*x^2+6*x-332MATLAB的数值计算功能:多项式运算求多项式的根用函数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的数值计算功能:多项式运算多项式的四则运算(1)加法和减法

对于多项式的加法和减法,MATLAB不提供专用的函数。(2)乘法和除法乘法由函数conv来实现,其使用格式为

c=conv(a,b)除法由deconv实现,其使用格式为

d=deconv(a,b)4MATLAB的数值计算功能:多项式运算多项式的乘除运算乘法由函数conv来实现除法由deconv实现例:计算两多项式的乘除法>>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的数值计算功能:多项式运算对多项式求导数采用函数polyder对多项式求导数,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的数值计算功能:多项式运算多项式拟合多项式拟合用拟合函数polyfit实现,调用格式polyfit(X,Y,n)X和Y为拟合数据,n为拟合多项式的阶数例:用5阶多项式对[0,π/2]上的正弦函数进行拟合,并图示拟合情况。>>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的数值计算功能:保存与再用把Matlab工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件

save——将工作空间中所有的变量存到matlab.mat文件中

savedata将工作空间中所有的变量存到data.mat文件中

savedataab将工作空间中a和b变量存到data.mat文件中

loaddata——将data.mat记录的变量调入工作空间8MATLAB的数值计算功能:Matlab矢量化何为矢量化问题尽量使用矩阵表述避免出现太多(两重或以上)的循环嵌套矢量化技术的目的在于改善程序的性能例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的数值计算功能:Matlab矢量化例2:上万个点的计算采用矢量化技术可以大幅度提高运算速度%一般循环编程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的数值计算功能: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的数值计算功能:Matlab矢量化创建和操作矩阵从向量构建矩阵例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的数值计算功能:Matlab矢量化排序、设置和计数max最大元素min最小元素sort递增排序unique递增排序并且去掉相同元素例1:找出向量中最大元,返回其下标>>a=[5278912752578];>>[Y,I]=max(a)Y=525I=713MATLAB的数值计算功能:Matlab矢量化排序、设置和计数例2:向量元素排序>>a=[5278912752578];>>sort(a)ans=2577127889525>>unique(a)ans=25712788952514MATLAB的符号计算功能1993年之前的符号计算语言:Maple、Mathematic和MathCAD等1993年Mathworks公司为了解决MATLAB用户对符号计算的需求,从加拿大滑铁卢大学购买了Maple的使用权,并在此基础上开发了符号计算工具箱(SymbolicToolbox)至此Matlab

不仅具有数值运算功能,具有符号计算功能15MATLAB的符号计算功能本部分包含内容符号表达式、符号矩阵的创建符号线性代数因式分解、展开和简化符号代数方程求解符号微积分符号微分方程16MATLAB的符号计算功能

符号运算与数值运算的区别数值运算中必须先对变量赋值,然后才能参与运算。符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。符号运算的特点:运算对象可以是没赋值的符号变量可以获得任意精度的解尽管MATLAB7的符号运算功能很强大,但是一门优秀的语言应该能够博采众家之长。因此MATLAB7语言提供了和MAPLE语言的良好接口,通过maple.m和map.m两个专用的M文件来实现。

17MATLAB符号变量和符号表达式的生成和使用定义基本符号对象的指令有两个:sym,syms。它们的常用使用格式如下:f=sym(arg)

%把数字、字符串或表达式arg

转换为符号对象f。syms(‘argv1’,‘argv2’,‘argvk’)%把字符arg1,arg2,argk定义为基本符号对象。symsargv1argv2argvk%上述格式的简洁形式。18MATLAB符号变量和符号表达式的生成和使用【例】符号常数形成中的差异。>>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函数定义符号表达式>>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符号表达式(符号函数)的操作符号表达式的四则运算>>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符号矩阵的创建

用Matlab函数sym创建矩阵命令格式:A=sym('[]')

※需用sym函数※需用''标识注意:数值矩阵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]这就完成了一个符号矩阵的创建。符号矩阵的每一行的两端都有方括号,这是与Matlab数值矩阵的一个重要区别。23MATLAB符号矩阵的创建用生成子矩阵的方法生成符号矩阵命令格式:A=[‘[]’;‘[]’]

【例题】用生成子矩阵的方法生成符号矩阵>>h1=['[55,ttt]';'[44,1]']???Errorusing==>vertcatAllrowsinthebracketedexpressionmusthavethesamenumberofcolumns.>>h2=['[55,ttt]';'[44,1]']h2=[55,ttt][44,1]该方法不需要调用sym函数,但是要保证同一列的元素具有相同的长度。当要输入的字符串长度不一致时,可以在较短的字符串前边或者后边加上空格符补充24MATLAB符号矩阵的创建由数值矩阵转换成符号矩阵将数值矩阵转化为符号矩阵,函数调用格式: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符号矩阵及符号数组的运算符号矩阵的四则运算A+B和A-B命令可以实现符号阵列的加法和减法。A*B命令可以实现符号矩阵的乘法。A\B命令可以实现矩阵的左除法。

A\B为符号线性方程组A*X=B的解。B/A命令可以实现矩阵的右除法。

B/A为符号线性方程组X*A=B的解。26MATLAB符号矩阵及符号数组的运算【例】>>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符号矩阵及符号数组的运算>>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符号矩阵及符号数组的运算符号矩阵的逆和行列式运算

inv函数可以用来求方正的逆矩阵,命令为:inv(X);

det函数可以求方正的行列式,命令为:det(X)。

29MATLAB符号矩阵及符号数组的运算符号数组的四则运算A.*B命令用于符号数组的乘法。A.*B为按参量A与B对应的分量进行相乘。A.\B命令用于数组的左除法运算。A.\B为按对应的分量进行相除。A./B命令用于数组的右除法运算。A./B为按对应的分量进行相除。30MATLAB符号矩阵及符号数组的运算【例】符号数组的四则运算>>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符号矩阵及符号数组的运算>>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`)来计算符号函数F的单侧极限:左极限或右极限。33MATLAB符号极限【例】使用limit函数来求符号极限。>>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)——对缺省变量求一阶导数diff(f,v)——对指定变量v求一阶导数diff(f,v,n)——对指定变量v求n阶导数int(f)——对f表达式的缺省变量求积分int(f,v)——对f表达式的v变量求积分int(f,v,a,b)——对f表达式的v变量在(a,b)区间求定积分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符号微分和求导【例】对多个自变量的函数中的某个自变量求导。>>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)%求时域函数ft的Fourier变换Fwft=ifourier(Fw,w,t)%求频域函数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)%求时域函数ft的Laplace变换Fsft=ilaplace(Fs,s,t)%求频域函数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符号代数方程的求解

符号代数方程求解Matlab符号运算能够解一般的线性方程、非线性方程及一般的代数方程、代数方程组。命令格式:solve(f)——求一个方程的解solve(f1,f2,…fn)——求n个方程的解solve(‘eq1’,‘eq2’,…,‘eqn’,‘v1’,‘v2’,…,‘vn’)——求方程组关于指定变量的解(推荐格式)。solve(exp1,exp2,….,expn,v1,v2,…,vn)——求方程组关于指定变量的解(推荐格式)。44

MATLAB符号代数方程的求解

符号代数方程求解例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符号代数方程的求解符号代数方程求解>>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符号代数方程的求解符号代数方程求解例:解方程组>>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符号微分方程求解符号微分方程求解用一个函数可以方便地得到微分方程的符号解,求解指令:dsolve调用格式:dsolve(‘f’,‘g’)f微分方程,可多至12个微分方程的求解;g为初始条件默认自变量为'x',可任意指定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论