MATLAB简明教程.docx
《MATLAB简明教程.docx》由会员分享,可在线阅读,更多相关《MATLAB简明教程.docx(44页珍藏版)》请在冰豆网上搜索。
MATLAB简明教程
一、初识MATLAB
二、MATLAB入门
●基本算术运算
1.加+
2.减-
3.乘*
4.除\或/
5.幂次方^
******
1.求
的算术运算结果
●变量
1.对字母大小写敏感
2.第一个字符必须是英文,6.5版本不超过63个
3.不包含空格、标点,但包含下划线
4.不与系统预定义变量相同
ans,eps,Inf或inf,i或j,pi,NaN或nan,nargin,nargout,realmax,realmin等
●标点符号
1.,输入量和输入量的分隔,数组元素的分隔,显示计算结果的指令与后面的指令分隔
2.;不显示计算结果指令的“结尾”标志,不显示计算结果指令与与后面的指令分隔,数组行的分隔
3.:
生成一维数组,单下标引用表全部元素,多下标引用表本维全部
4.%注释
5.[]输入数组引用,函数输出宗量表示
6.‘’字符串记述
●常用函数
abs(x),sqrt(x),exp(x),sin(x),cos(x),asin(x),acos(x),tan(x),atan(x),log(x),log10(x),lcm(x,y),gcd(x,y),imag(x),real(x),conj(x)
******
1.计算
●表达式
1.由变量名、运算符和函数名组成
2.按常规相同的优先级自左向右运算
3.括号优先
4.赋值符“=”和运算符两侧允许有空格
******
1.复数
,计算
●常用控制指令
clf清除图形框
clc清除指令框
clear清除工作空间
exit关闭/退出matlab
quit关闭/退出matlab
who查看工作区变量
whos查看工作区变量及详细情况
●数值显示格式(P.3自学)
formatshort短格式
formatshore短格式科学格式
formatlong长格式
formatlonge长格式科学格式
formatrat有理格式
formatbank银行格式
******
用MATLAB计算
能得到–2吗?
答:
不能!
第二章矩阵与多项式
●多项式的创建
1.表示方式
多项式降幂排列
,用系数行向量表示
2.创建方法
(1)直接输入法
(2)指令P=poly(AR)
若AR是方阵,多项式P是该方阵的特征多项式
若AR=[a1,a2,…,an-1,an],则AR的元素认为是多项式P的根
●多项式的计算
多项式的四则运算
1.多项式的加减运算
求多项式x4+8x3-10与多项式2x2-x+3的和
2.多项式乘法运算
函数conv(P1,P2)用于求多项式P1和P2的乘积。
这里,P1、P2是两个多项式系数向量。
求多项式x4+8x3-10与多项式2x2-x+3的乘积
3.多项式除法
函数[Q,r]=deconv(P1,P2)用于对多项式P1和P2作除法运算。
其中Q返回多项式P1除以P2的商式,r返回P1除以P2的余式。
这里,Q和r仍是多项式系数向量。
deconv是conv的逆函数,即有P1=conv(P2,Q)+r。
求多项式x4+8x3-10除以多项式2x2-x+3的结果
多项式的导函数
p=polyder(P):
求多项式P的导函数
p=polyder(P,Q):
求P·Q的导函数
[p,q]=polyder(P,Q):
求P/Q的导函数,导函数的分子存入p,分母存入q。
上述函数中,参数P,Q是多项式的向量表示,结果p,q也是多项式的向量表示。
求多项式x4+8x3-10导函数
多项式的求值
MATLAB提供了两种求多项式值的函数:
polyval与polyvalm,它们的输入参数均为多项式系数向量P和自变量x。
两者的区别在于前者是代数多项式求值,而后者是矩阵多项式求值。
已知多项式x4+8x3-10,分别取x=1.2和一个2×3矩阵为自变量计算该多项式的值
多项式求根
n次多项式具有n个根,当然这些根可能是实根,也可能含有若干对共轭复根。
MATLAB提供的roots函数用于求多项式的全部根,其调用格式为:
x=roots(P),其中P为多项式的系数向量,求得的根赋给向量x,即x
(1),x
(2),…,x(n)分别代表多项式的n个根。
求多项式x4+8x3-10的根
已知f(x),
(1)计算f(x)=0的全部根。
(2)由方程f(x)=0的根构造一个多项式g(x),并与f(x)进行对比。
●矩阵的创建
1.直接输入法
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。
具体方法如下:
将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。
a=2.7358;b=33/79;
C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]
2.利用冒号表达式建立一个向量
冒号表达式可以产生一个行向量,一般格式是:
e1:
e2:
e3,其中e1为初始值,e2为步长,e3为终止值。
在MATLAB中,还可以用linspace函数产生行向量。
其调用格式为:
linspace(a,b,n),其中a和b是生成向量的第一个和最后一个元素,n是元素总数。
显然,linspace(a,b,n)与a:
(b-a)/(n-1):
b等价。
3.利用M文件建立矩阵
对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。
特殊矩阵
1.通用的特殊矩阵
zeros:
产生全0矩阵(零矩阵)。
ones:
产生全1矩阵(幺矩阵)。
eye:
产生单位矩阵。
rand:
产生0~1间均匀分布的随机矩阵。
randn:
产生均值为0,方差为1的标准正态分布随机矩阵。
******
1.分别建立3×3、3×2和与矩阵A同样大小的零矩阵
(1)建立一个3×3零矩阵。
zeros(3)
(2)建立一个3×2零矩阵。
zeros(3,2)
(3)设A为2×3矩阵,则可以用zeros(size(A))建立一个与矩阵A同样大小零矩阵。
A=[123;456];%产生一个2×3阶矩阵A
zeros(size(A))%产生一个与矩阵A同样大小的零矩阵
2.建立随机矩阵:
(建立在矩阵与数值计算规则上)
(1)在区间[20,50]内均匀分布的5阶随机矩阵。
(2)均值为0.6、方差为0.1的5阶正态分布随机矩阵。
命令如下:
x=20+(50-20)*rand(5)
y=0.6+sqrt(0.1)*randn(5)
2.用于专门学科的特殊矩阵
魔方矩阵、范得蒙矩阵、希尔伯特矩阵、托普利兹矩阵、伴随矩阵、帕斯卡矩阵
●矩阵元素
1.通过下标引用矩阵的元素
A=[1,2,3;4,5,6];
A(1,2)(A(m,n)表示第m行第n列)
ans=
2
2.通过序号引用矩阵的元素
A(3)序号一列一列算
ans=
2
序号(Index)与下标(Subscript)是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。
其相互转换关系也可利用sub2ind和ind2sub函数求得。
●矩阵运算
算术运算
1.基本算术运算
矩阵加减运算
假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。
运算规则是:
若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。
如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。
矩阵乘法
假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则C=A*B为m×p矩阵。
矩阵除法
在MATLAB中,有两种矩阵除法运算:
\和/,分别表示左除和右除。
如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。
A\B等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。
对于含有标量的运算,两种除法运算的结果相同,如3/4和4\3有相同的值,都等于0.75。
又如,设a=[10.5,25],则a/5=5\a=[2.10005.0000]。
对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。
对于矩阵运算,一般A\B≠B/A。
矩阵的乘方
一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。
2.点运算
在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。
点运算符有.*、./、.\和.^。
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。
3.关系运算
MATLAB提供了6种关系运算符:
<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)
关系运算符的运算法则为:
(1)当两个比较量是标量时,直接比较两数的大小。
若关系成立,关系表达式结果为1,否则为0。
(2)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。
最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
(3)当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。
最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
逻辑运算
MATLAB提供了3种逻辑运算符:
&(与)、|(或)和~(非)。
逻辑运算的运算法则为:
(1)在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示。
(2)设参与逻辑运算的是两个标量a和b,那么:
a&ba,b全为非零时,运算结果为1,否则为0。
a|ba,b中只要有一个非零,运算结果为1。
~a当a是零时,运算结果为1;当a非零时,运算结果为0。
(3)若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。
最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成。
(4)若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。
最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成。
(5)逻辑非是单目运算符,也服从矩阵运算规则。
(6)在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
矩阵的转置与旋转
1.矩阵的转置
转置运算符是单撇号(‘)。
2.矩阵的旋转
利用函数rot90(A,k)将矩阵A逆时针旋转90º的k倍,当k为1时可省略。
矩阵的逆与伪逆
1.矩阵的逆
对于一个方阵A,如果存在一个与其同阶的方阵B,使得:
A·B=B·A=I(I为单位矩阵),则称B为A的逆矩阵,当然,A也是B的逆矩阵。
在MATLAB中,求一个矩阵的逆非常容易。
求方阵A的逆矩阵可调用函数inv(A)。
2.矩阵的伪逆
如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A‘同型的矩阵B,使得:
A·B·A=A,B·A·B=B,此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。
在MATLAB中,求一个矩阵伪逆的函数是pinv(A)。
方阵的行列式
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。
在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。
矩阵的秩与迹
1.矩阵的秩
矩阵线性无关的行数与列数称为矩阵的秩。
在MATLAB中,求矩阵秩的函数是rank(A)。
2.矩阵的迹
矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。
在MATLAB中,求矩阵的迹的函数是trace(A)。
矩阵的特征值与特征向量
在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:
(1)E=eig(A):
求矩阵A的全部特征值,构成向量E。
(2)[V,D]=eig(A):
求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
(3)[V,D]=eig(A,‘nobalance’):
与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
第3章符号运算
●符号对象
1.建立符号对象
(1)建立符号变量和符号常量
sym函数
sym函数用来建立单个符号量,一般调用格式为:
符号量名=sym('符号字符串')
该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。
a=sym('hello'),b=sym('a')
syms函数
sym一次只能定义一个符号变量,使用不方便。
MATLAB提供了另一个函数syms,一次可以定义多个符号变量。
syms函数的一般调用格式为:
syms符号变量名1符号变量名2…符号变量名n
用这种格式定义符号变量时不要在变量名上加字符串分界符(‘),变量间用空格而不要用逗号分隔。
symsabcd
(2)建立符号表达式
含有符号对象的表达式称为符号表达式。
建立符号表达式有以下3种方法:
利用单引号来生成符号表达式。
f='a*x^n+b*t'
用sym函数建立符号表达式。
c=sym('(1+sqrt(5))/2')
使用已经定义的符号变量组成符号表达式。
symsxn,f=x^n
2.符号表达式运算
(1)符号表达式的四则运算
符号表达式的加、减、乘、除运算可分别由函数symadd、symsub、symmul和symdiv来实现。
f='a*x^n+b*t',c='(1+sqrt(5))/2';
symadd(f,c)
(2)符号表达式的提取分子和分母运算
如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。
其一般调用格式为:
[n,d]=numden(s)
该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。
symsxy
[n,d]=numden(x/y+y/x)
(3)符号表达式的因式分解与展开
MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为:
factor(s):
对符号表达式s分解因式。
symsax;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
expand(s):
对符号表达式s进行展开。
symsx;
expand((x+1)^3)
collect(s):
对符号表达式s合并同类项。
collect(s,v):
对符号表达式s按变量v合并同类项。
EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
expr1=collect(EXPR)
expr2=collect(EXPR,'exp(-t)')
(4)符号表达式的化简
MATLAB提供的对符号表达式化简的函数有:
simplify(s):
应用函数规则对s进行化简。
symsx;ff=cos(x)+sqrt(-sin(x)^2);
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)
simple(s):
调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。
symsx;f=(1/x^3+6/x^2+12/x+8)^(1/3);
g1=simple(f),
(5)符号表达式与数值表达式之间的转换
利用函数sym可以将数值表达式变换成它的符号表达式。
函数numeric或eval可以将符号表达式变换成数值表达式。
phi=sym((1+sqrt(5))/2)
numeric(phi)
3.符号表达式中变量的确定
MATLAB中的符号可以表示符号变量和符号常量。
findsym可以帮助用户查找一个符号表达式中的的符号变量。
该函数的调用格式为:
findsym(s,n)
函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。
symsabxXY;k=sym('3');z=sym('c*sqrt(delta)+y*sin(theta)');
EXPR=a*z*X+(b*x^2+k)*Y;
findsym(EXPR)
findsym(EXPR,1)
4.符号矩阵
符号矩阵也是一种符号表达式,所以前面介绍的符号表达式运算都可以在矩阵意义下进行。
但应注意这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。
由于符号矩阵是一个矩阵,所以符号矩阵还能进行有关矩阵的运算。
MATLAB还有一些专用于符号矩阵的函数,这些函数作用于单个的数据无意义。
例如
transpose(s):
返回s矩阵的转置矩阵。
determ(s):
返回s矩阵的行列式值。
diag、triu、tril、inv、det、rank、eig等,也可直接应用于符号矩阵。
symsa11a12a21a22;A=[a11,a12;a21,a22]
DA=det(A),IA=inv(A),EA=eig(A)
●符号微积分
1.符号极限
limit函数的调用格式为:
(1)limit(f,x,a):
求符号函数f(x)的极限值。
即计算当变量x趋近于常数a时,f(x)函数的极限值。
(2)limit(f,a):
求符号函数f(x)的极限值。
由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。
(3)limit(f):
求符号函数f(x)的极限值。
符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。
(4)limit(f,x,a,'right'):
求符号函数f的极限值。
'right'表示变量x从右边趋近于a。
(5)limit(f,x,a,‘left’):
求符号函数f的极限值。
‘left’表示变量x从左边趋近于a。
******
求下列极限
极限1:
symsamx;
f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);
limit(f,x,a)
极限2:
symsxt;
limit((1+2*t/x)^(3*x),x,inf)
极限3:
symsx;
f=x*(sqrt(x^2+1)-x);
limit(f,x,inf,'left')
极限4:
symsx;
f=(sqrt(x)-sqrt
(2)-sqrt(x-2))/sqrt(x*x-4);
limit(f,x,2,'right')
2.符号导数
diff函数用于对符号表达式求导数。
该函数的一般调用格式为:
diff(s)。
没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。
diff(s,'v'):
以v为自变量,对符号表达式s求一阶导数。
(''加不加都一样)
diff(s,n):
按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。
diff(s,'v',n):
以v为自变量,对符号表达式s求n阶导数。
symsx;
f=x*(sqrt(x^2+1)-x);
diff(f)
3.符号积分
符号积分由函数int来实现。
该函数的一般调用格式为:
int(s)。
没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分。
int(s,v):
以v为自变量,对被积函数或符号表达式s求不定积分。
int(s,v,a,b):
求定积分运算。
a,b分别表示定积分的下限和上限。
该函数求被积函数在区间[a,b]上的定积分。
a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。
当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。
当a,b中有一个是inf时,函数返回一个广义积分。
当a,b中有一个符号表达式时,函数返回一个符号函数。
F1=int('1/log(t)','t',0,'x')
4.积分变换
常见的积分变换有傅立叶变换、拉普拉斯变换和Z变换。
(1)傅立叶(Fourier)变换
在MATLAB中,进行傅立叶变换的函数是:
fourier(f,x,t):
求函数f(x)的傅立叶像函数F(t)。
ifourier(F,t,x):
求傅立叶像函数F(t)的原函数f(x)。
求
的Fourier变换
symstw;ut=sym('Heaviside(t)');
UT=fourier(ut)
UTC=maple('convert',UT,'piecewise','w')
UTS=simple(UT)
(2)拉普拉斯(Laplace)变换
在MATLAB中,进行拉普拉斯变换的函数是:
laplace(fx,x,t):
求函数f(x)的拉普拉斯像函数F(t)。
ilaplace(Fw,t,x):
求拉普拉斯像函数F(t)的原函数f(x)。
求
的Laplace变换
symsts;symsabpositiveDt=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)
(3)Z变换
当函数f(x)呈现为一个离散的数列f(n)时,对数列f(n)进行z变换的MATLAB函数是:
ztrans(fn,n,z):
求fn的Z变换像函数F(z)。
iztrans(Fz,z,n):
求Fz的z变换原函数f(n)。
求序列
的Z变换
symsz;fn=2*Delta+6*(1-(1/2)^n);FZ=simple(ztrans(fn,n,z));
disp('FZ=');pretty(FZ),FZ_n=iztrans(FZ,z,n)
5.级数
(1)级数符号求和
求无穷级数的和需要符号表达式求和函数symsum,其调用格式为:
symsum(s,v,n,m)
其中s表示一个级数的通项,是一个符号表达式。
v是求和变量,v省略时使用系统的默认变量。
n和m是求和的开始项和末项。
symsk
symsum(k^2,0,10)
(2)函数的泰勒级数
MATLAB提供了taylor函数将函数展开为幂级数,其调用格式为:
taylor(f,v,n,a)
该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。
v的缺省值与diff函数相同。
参数a指定将函数f在自变量v=a处展开,a的缺省值是0。
计算表达式
的5阶泰勒级数展开
symsx
f=1/(5+cos(*x));
r=taylor(f)
●符号方程求解
1.符号代数方程求解
在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:
solve(s):
求解符号表达式s的代数方程,求解变量为默认变量。
solve(s,v):
求解符号表达式s的代数方程,求解