MATLAB教程.docx

上传人:b****7 文档编号:8951737 上传时间:2023-02-02 格式:DOCX 页数:43 大小:38.46KB
下载 相关 举报
MATLAB教程.docx_第1页
第1页 / 共43页
MATLAB教程.docx_第2页
第2页 / 共43页
MATLAB教程.docx_第3页
第3页 / 共43页
MATLAB教程.docx_第4页
第4页 / 共43页
MATLAB教程.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

MATLAB教程.docx

《MATLAB教程.docx》由会员分享,可在线阅读,更多相关《MATLAB教程.docx(43页珍藏版)》请在冰豆网上搜索。

MATLAB教程.docx

MATLAB教程

2可变精度算术运算

 因为数值的精度受每次操作所保留的数位的限制,所以数值的任何运算都会引入舍入误差,重复的多次数值运算会造成累积误差。

而对符号表达式的运算是非常准确的,因为它们不需要进行数值运算,所以无舍入误差。

对符号运算结果用函数eval或numeric,仅在结果转换时会引入舍入误差。

MATLAB对数的处理完全依靠计算机的浮点算术运算,显然在内存中进行运算,又快又好,只是浮点运算受到所支持字长的限制,每次操作会引入舍入误差,所以不能产生精确的结果。

MATLAB中各个算术运算的相对精度大约是16位。

相反,Maple的符号处理能力可以实现任何数位的运算。

当缺省的数位增加时,每次计算就需要附加时间和计算机内存。

Maple缺省为16位的精度。

函数digits返回全局Digits参数的当前值。

Maple缺省准确度可以由digits(n)来改变,其中n是所期望的准确度数位。

用这种方法增加准确度的副作用是,每个Maple函数随后进行的计算都以新的准确度为准,增加了计算时间。

结果的显示不会改变,只有所用的Maple函数的缺省准确度受到影响。

另外有一个函数,它可以任何精度实行单个计算,而使全局的Digits参数不变。

即:

可变精度的算术或函数vpa,它以缺省的精度或任何指定的精度对单个符号表达式进行计算,并以同样的精度来显示结果。

>>formatlong%let'sseealltheusualdigits

>>pi%howabout

tonumericaccuracy

ans=

3.14159265358979

>>digits%displaythedefault'Digits'value

Digits=16

>>vpa('pi')%howabout

to'Digits'value

ans=

3.141592653589793

>>digits(18)%changethedefaultto18digits

>>vpa('pi')%howabout

to'Digits'accuracy

ans=

3.14159265358979324

>>vpa('pi',20)%howabout

to20digits

ans=

3.1415926535897932385

>>vpa('pi',50)%howabout

to50digits

ans=

3.1415926535897932384626433832795028841971693993751

>>vpa('2^(1/3)',200)%thecuberootof2to200digits

ans=

1.2599210498948731647672106072782283505702514647015079800819751121552996765

139********39656243625509415431025603561566525939900240406137372284591103042

693552469606426166250009774745265654803068671854055

将函数vpa作用于符号矩阵,对它的每一个元素进行计算也同样达到所指定的位数。

>>A=sym('[1/4,log(sqrt

(2));exp

(1),3/7]')

A=

[1/4,log(sqrt

(2))]

[exp

(1),3/7)]

>>vpa(A,20)%evaluateto20digits

ans=

[.2500000000000000000,.34657359027997265471]

[2.7182818284590452354,.42857142857142857143]

3线性代数和矩阵

在本节中,我们将介绍符号矩阵和MATLAB提供的工具,它用线性代数求解问题。

符号矩阵

符号矩阵和向量是数组,其元素为符号表达式,可用函数sym来产生。

>>A=sym('[a,b,c;b,c,a;c,a,b]')

A=

[a,b,c]

[b,c,a]

[c,a,b]

>>G=sym('[cos(t),sin(t);-sin(t),cos(t)]')

G=

[cos(t),sin(t)]

[-sin(t),cos(t)]

函数sym也可以扩展成定义各元素的公式。

注意,只有在这种情况下,i,j分别表示行列的位置;且不影响i,j的缺省值(它代表

)。

下面的例子建立了3×3的矩阵,其元素依赖于行和列的位置。

>>S=sym(3,3,'(i+j)+(i-j+s)')%createamatrixusingaformula

S=

[2/s,3/(-1+s),4/(-2+s)]

[1/(1+s),4/s,s/(-1+s)]

[4/(2+s),5/(1+s),6/s]

>>S=sym(3,3,'m','n','(m-n)/(m-n-t)')%usemandninanotherformula

S=

[0,-1/(-1-t),-2/(-2-t)]

[1/(1-t),0,-1/(-1-t)]

[2/(2-t),1/(1-t),0]

函数sym也可以把数值矩阵转换成符号形式

>>M=[1.1,1.2,1.3;2.1,2.2,2.3;3.1,3.2,3.3]%anumericmatrix

M=

1.10001.20001.3000

2.10002.20002.3000

3.10003.20003.3000

>>S=sym(M)%converttosymbolicform

S=

[11/10,6/5,13/10]

[21/10,11/5,23/10]

[31/10,16/5,33/10]

如果数值矩阵的元素可以指定为小的整数之比,则函数sym将采用有理分式表示。

如果元素是无理数,则在符号形式中sym将用符号浮点数表示元素。

>>E=[exp

(1)sqrt

(2)]

E=

2.71831.4142

>>sym(E)

ans=

[3060513257434036*2^(-50),3184525836262886*2^(-51)]

用函数symsize可以得到符号矩阵的大小(行,列数)。

函数返回数值或向量,而不是符号表达式。

symsize的四种形式说明如下:

>>S=sym('[a,b,c;d,e,f]')%createasymbolicmatrix

S=

[a,b,c]

[d,e,f]

>>d=symsize(S)%returnthesizeofSasthe2-elementvectord

d=

23

>>[m,n]=symsize(S)%returnthenumberofrowsinm,andcolumninn

m=

2

n=

3

>>m=symsize(S,1)%returnthenumberofrows

m=

2

>>n=symsize(S,2)%returnthenumberofcolumns

n=

3

数值数组用N(m,n)形式来访问单个元素,但符号数组元素必须用函数如sym(S,m,n)来获取。

若能用相同的句法当然好,但MATLAB符号表达式的表示不方便。

在内部,符号数组表示成一个字符串数组;而S(m,n)返回单个字母。

所以,符号数组的各个元素,必须由符号函数,如sym,来指定,而不是直接指定。

>>G=sym('[ab,cd;ef,gh]')%createa2-by-2symbolicmatrix

G=

[ab,cd]

[ef,gh]

>>G(1,2)%thisisthesecondcharacterofthefirstrowofG

ans=

a

>>r=sym(G,1,2)%thisisthesecondexpressinoninthefirstrowofG

r=

cd

记住,在上例中的符号矩阵G,实际是以2×7字符数组存储在计算机中。

第一行为'[ab,cd]',所以第二个元素是'a'。

最后,sym可以用于改变符号数组的一个元素。

>>sym(G,2,2,'pq')%changethe(2,2)elementinGfrom'gh'to'pq'

ans=

[ab,cd]

[ef,pq]

代数运算

用函数symadd,symsub,symmul和symdiv,对符号矩阵可以执行许多通用的代数运算,用sympow可计算乘幂,用transpose计算符号矩阵的转置。

>>G=sym('[cos(t),sin(t0;-sin(t0,cos(t)]')%createasymbolicmatrix

G=

[cos(t),sin(t)]

[-sin(t),cos(t)]

>>symadd(G,'t')%add't'toeachelement

ans=

[cos(t)+t,sin(t)+t]

[-sin(t)+t,cos(t)+t]

>>symmul(G,G)%multiplyGbyG;Synpow(G,2)doesthesamething

ans=

[cos(t)^2-sint(t)^2,2*cos(t)*sin(t)]

[-2*cos(t)*sin(t),cos(t)^2-sin(t)^2]

>>simple(G)%trytosimplify

ans=

[cos(2*t),sin(2*t)]

[-sin(2*t),cos(2*t)]

下面通过证明G的转置是它的逆来证明G是正交阵。

>>I=symmul(G,transpose(G))%multiplyGbyitstranspose

I=

[cos(t)^2+sin(t)^2,0]

[0,cos(t)^2+sin(t)^2]

>>simplify(I)%thereappearstobeatrigidentityhere

ans=

[1,0]

[0,1]

正如所期望的那样,这是单位阵。

线性代数运算

用函数inverse和determ,可计算符号矩阵的逆阵以及行列式。

>>H=sym(hilb(3))%thesymbolicformofthenumeric3-by-3Hilbertmatrix

H=

[1,1/2,1/3]

[1/2,1/3,1/4]

[1/3,1/4,1/5]

>>determ(H)%dindthedeterminantofH

ans=

1/2160

>>J=inverse(H)%findtheinverseofH

J=

[9,-36,30]

[-36,192,-180]

[30,-180,180]

>>determ(J)%findthedeterminantoftheinverse

ans=

2160

用函数linsolve求解齐次线性方程;这是等价于基本的MATLAB的逆斜杠\算子的符号,linsolve(A,B)对X方阵求解矩阵方程A*X=B。

回到以前的硬币问题:

黛安娜想去看电影,她从小猪存钱罐倒出硬币并清点,她发现:

10美分的硬币数加上5美分的硬币总数的一半等于25美分的硬币数。

1美分的硬币数比5美分、10美分以及25美分的硬币总数多10。

25美分和10美分的硬币总数等于1美分的硬币数加上1/4的5美分的硬币数

25美分的硬币数和1美分的硬币数比5美分的硬币数加上8倍的10美分的硬币数多1。

象上次所做的那样,列出线性方程组,令p,n,d和q分别为1美分,5美分,10美分,和25美分的硬币数

重新以p,n,d,q的顺序排列表达式

p/2+n/2+d-q=0p-n-d-q=-10-p-n/4+d+q=0

p-n-8d+q=1

接下来,列出方程系数的符号数组。

>>A=sym('[1/2,1/2,1,-1;1,-1,-1,-1;-1,-1/4,1,1;1,-1,-8,1]')

A=

[1/2,1/2,1,-1]

[1,-1,-1,-1]

[-1,-1/4,1,1]

[1,-1,-8,1]

>>B=sym('[0;-10;0;-1]')%CreatethesymbolicvectorB

B=

[0]

[-10]

[0]

[-1]

>>X=linsolve(A,B)%solvethesymbolicsystemA'X=Bforx

x=

[16]

[8]

[3]

[15]

结果是相同的,黛安娜有16枚1美分的硬币,8枚5美分的硬币,3枚10美分的硬币,15枚25美分的硬币。

其他特性

symop将其参量串接起来,并计算所得到的表达式。

>>f='cos(x)'%createanexpression

f=

cos(x)

>>symop('atan(',f,'+',a,')','^2')

ans=

atan(cos(x)+a)^2

在用函数symop时,若将数组和标量混合应慎重。

例如:

>>M=sym('[ab;cd]')

M=

[a,b]

[c,d]

>>symop(M,'+','t')

ans=

[a+t,b]

[c,d+t]

是把t加到M的对角线上。

函数charpoly求解矩阵的特征多项式。

>>G=sym('[1,1/2;1/3,1/4]')%createasymbolicmatrix

G=

[1,1/2]

[1/3,1/4]

>>charpoly(G)%findthecharacteristicpolynomialofG

ans=

x'2-5/4*x+1/12

用函数eigensys可以求得符号矩阵的特征根和特征向量

>>F=sym('[1/2,1/4;1/4,1/2]')%createasymbolicmatrix

F=

[1/2,1/4]

[1/4,1/2]

>>eigensys(F)%findtheeigenvaluesofF

ans=

[3/4]

[1/4]

>>[V,E]=eigensys(F)%findeigenvaluesEandeigenvectorsv

V=

[-1,1]

[1,1]

E=

[1/4]

[3/4]

矩阵的约当(Jordan)标准型是特征值的对角矩阵;转换矩阵的列是特征向量。

对于给定的矩阵A,jordan(A)求出非奇异的矩阵V,使得inv(V)*A*V成为约当标准型,函数jordan有两种形式

>>jordan(F)%findtheJordanformofF,above

ans=

[1/4,0]

[0,3/4]

>>[V,J]=jordan(F)%findtheJordanformandeigenvectors

V=

[1/2,1/2]

[-1/2,1/2]

J=

[1/4,0]

[0,3/4]

标准形和特征向V的列是某些F可能的特征向量。

因为F是非奇异的,F的零空间的基是空矩阵,而列空间的基是单位阵。

>>F=sym('[1/2,1/4;1/4,1/2]')%recreateF

F=

[1/2,1/4]

[1/4,1/2]

>>nullspace(F)%thenullspaceofFistheemptymatrix

ans=

[]

>>colspace(F)%findthecolumnspaceofF

ans=

[1,0]

[0,1]

 

用函数singvals可求解矩阵奇异值。

>>A=sym(magic(3))%Generatea3-by-3matrix

A=

[8,1,6]

[3,5,7]

[4,9,2]

>>singvals(A)%findthesingularexpressions

ans=

[15.00000000000000]

[6.928203230275511]

[3.464101615137752]

 

函数jacobian(w,v)可相对于v求解w的雅可比(Jacobia)值。

其结果的第(i,j)项是df(i)/dv(j)。

注意,当f是标量时,f的雅可比值是f的梯度。

>>jacobian('u*exp(v)',sym('u,v'))

ans=

[exp(v,u*exp(v)]

3.10小结

下列各表(表22.2-表22.8)综合了符号数学工具箱的特性:

表22.2

符号表达式的运算

numeric

符号到数值的转换

pretty

显示悦目的符号输出

subs

替代子表达式

sym

建立符号矩阵或表达式

symadd

符号加法

symdiv

符号除法

symmul

符号乘法

symop

符号运算

sympow

符号表达式的幂运算

symrat

有理近似

symsub

符号减法

symvar

求符号变量

表22.3

符号表达式的简化

collect

合并同类项

expand

展开

factor

因式

simple

求解最简形式

simplify

简化

symsum

和级数

表22.4

符号多项式

charpoly

特征多项式

horner

嵌套多项式表示

numden

分子或分母的提取

poly2sym

多项式向量到符号的转换

sym2poly

符号到多项式向量的转换

表22.5

符号微积分

diff

微分

int

积分

jordan

约当标准形

taylor

泰勒级数展开

表22.6

符号可变精度算术

digits

设置可变精度

vpa

可变精度计算

表22.7

求解符号方程

compose

函数的复合

dsolve

微分方程的求解

finverse

函数逆

linsolve

齐次线性方程组的求解

solve

代数方程的求解

表22.8

符号线性代数

charploy

特征多项式

determ

矩阵行列式的值

eigensys

特征值和特征向量

inverse

矩阵逆

jordan

约当标准形

linsolve

齐次线性方程组的解

transpose

矩阵的转置

4MATLAB变量——标量,向量,矩阵

MATLAB以NM×的形式保存了大量的矩阵,其中M是行数,N是列数。

一个1×1矩阵是一个标量;1×N矩阵是一个行向量,,M×1矩阵是一个列向量。

矩阵的全部元素可以是实数,也可以是复数;如果用户没有重新定义,那么1−可以写作“i”或“j”。

方括号“[]”表示一个矩阵,空格把相邻列元素分开,分号把相邻行分开。

例如,考虑如下对变量x的赋值

实数量>>x=5

复数量>>x=5+10j(或者>>x=5+10i)

行向量>>x=[123](或者x=[1,2,3])

列向量>>x=[1;2;3]

3×3矩阵>>x=[123;456;789]

有几点需要说明的地方。

矩阵的复数元素不能打空格,比如“-1+2j”可以作为一个矩阵元素,而“-1+2j”就不行。

还有,“-1+2j”可以正确地解释,然而“-1+j2”就不行。

(MATLAB把“j2”解释为一个变量名。

你可以写成“-1+j*2”。

4.1复数运算

下面说明了一些重要的复数运算:

复数量>>x=3+4j

x的实部>>real(x)3⇒

x的虚部>>imag(x)4⇒

x的幅值>>abs(x)5⇒

x的相角>>angle(x)9273.0⇒

x的共扼>>conj(x)i43−⇒

4.2生成向量

向量可以用“:

”命令生成。

比如,以增量0.5生成一个从0到10的向量x,下列命令生成了一个1×21矩阵

>>x=[0:

0.5:

10];

其他生成向量的命令有“linspace”和“logspace”,前者通过指定第一个值、最后一个值和它们之间的值的个数来生成向量,后者的方法一样,但第一个值和最后一个值之间的项数以对数空间排列。

4.3访问向量元素

向量元素可以通过指定行和列来访问。

比如在矩阵]987;654;321[=A中,第一行第三列的元素可以这样访问本文档的修订版会放置在6.003的课程主页上

4

1

>>x=A(1,3),结果是3

整个第二行这样访问

>>y=A(2,:

),结果是[456]

其中“:

”的意思是“取该栏的所有项”。

由第1行、第2行和全部3列组成的A的一个子矩阵这样来生成

>>z=A(1:

2,1:

3),结果是[123;456]

5矩阵运算

MATLAB对矩阵的运算包括算术运算,关系运算和逻辑运算。

5.1算术矩阵运算

矩阵的基本算术运算(当然标量是矩阵的特殊情况)有:

+加法,-减法,*乘法,/右除,\左除,^取幂(幂),转置

如果矩阵大小对于运算不合适,就会出现错误信息。

除法定义如下:

如果A可逆且矩阵大小合适,则的解是bxA=*bAx\=,bAx=*的解是Abx/=。

加法和减法涉及的是元素对元素的运算;而乘除法不是。

但是MATLAB提供了元素对元素的运算,要在运算符前面加“.”,如下:

.*乘法./右除.\左除.^取幂(幂).’转置(不共扼)

矩阵乘法和元素对元素乘法的不同可以通过下面的例子看到:

>>A=[12;34]

A=

12

34

>>B=A*A

B=

710

1522

>>C=A.*A

C=

14

916

5.2关系运算

关系运算定义如下:

<小于,<=小于或等于,>大于,>=大于或等于==等于,~=不等于,

这些都是元素对元素的运算,它返回一个1和0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1