第二章 MATLAB 语言程序设计基础.docx

上传人:b****7 文档编号:10793660 上传时间:2023-02-22 格式:DOCX 页数:55 大小:186.77KB
下载 相关 举报
第二章 MATLAB 语言程序设计基础.docx_第1页
第1页 / 共55页
第二章 MATLAB 语言程序设计基础.docx_第2页
第2页 / 共55页
第二章 MATLAB 语言程序设计基础.docx_第3页
第3页 / 共55页
第二章 MATLAB 语言程序设计基础.docx_第4页
第4页 / 共55页
第二章 MATLAB 语言程序设计基础.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

第二章 MATLAB 语言程序设计基础.docx

《第二章 MATLAB 语言程序设计基础.docx》由会员分享,可在线阅读,更多相关《第二章 MATLAB 语言程序设计基础.docx(55页珍藏版)》请在冰豆网上搜索。

第二章 MATLAB 语言程序设计基础.docx

第二章MATLAB语言程序设计基础

第二章MATLAB语言程序设计基础

•MATLAB语言的简洁高效性

•MATLAB语言的科学运算功能

•MATLAB语言的绘图功能

•MATLAB庞大的工具箱与模块集

•MATLAB强大的动态系统仿真功能

本章主要内容

•MATLAB程序设计语言基础

•基本数学运算

•MATLAB语言流程控制

•MATLAB函数的编写

•二维图形绘制

•三维图形绘制

2.1MATLAB程序设计语言基础

•MATLAB语言的变量命名规则是:

(1)变量名必须是不含空格的单个词;

(2)变量名区分大小写;

(3)变量名最多不超过19个字符;

(4)变量名必须以字母打头,之后可以是

任意字母、数字或下划线,变量名中

不允许使用标点符号

MATLAB的保留常量

常数

返回值

ans

默认变量名,保存最近的结果。

如果不给表达式指定一个输出变量,MATLAB会自动将结果保存到ans变量中

eps

浮点相对精度。

是MATLAB用于计算的容限,值为2.2204e-16

realmax

计算机可以表示的最大浮点数

realmin

计算机可以表示的最小浮点数

pi

圆周率

i,j

虚数单位

inf

无限值。

类似n/0的表达式生成的结果为inf,其中n为非0实数

NaN

表示不合法的数值值,非数值。

类似0/0和inf/inf的表达式生成的结果,与NaN有关的算术运算结果,以及n/0,n为复数时的计算结果都是NaN

computer

计算机类型

version

MATLAB版本字符串

nans和空矩阵在matlab中作特殊处理。

例:

>>a=[12naninfnan]

a=

12naninfnan

>>b=2*a

b=

24naninfnan

>>d=(a==nan)

d=

00000

>>f=(a~=nan)

f=11111

>>size([])

ans=

00

>>x=(1:

5)-3

x=

-2-1012

>>y=find(x>2)

y=

[]

>>isempty(y)

ans=

1

>>a=(y==0)

a=

0

>>x=(-3:

3)/3

x=

-1.0000-0.6667-0.333300.33330.66671.0000

>>sin(x)./x

ans=

0.84150.92760.9816NaN0.98160.92760.8415

>>x=x+(x==0)*eps;

>>sin(x)./x

ans=

0.84150.92760.98161.00000.98160.92760.8415

数学运算符号及标点符号

+

加法运算,适用于两个数或两个同阶矩阵相加

-

减法运算

*

乘法运算

.*

点乘运算

/

除法运算

./

点除运算

^

乘幂运算

.^

点幂运算

\

反斜杠表示左除

(1)MATLAB的每条命令后,若为逗号或无标点符号,

则显示命令的结果;若命令后为分号,则禁止显示结果.

(2)“%”后面所有文字为注释.

(3)“...”表示续行.

•双精度数值变量

–IEEE标准,64位(占8字节),11指数位,53数值位和一个符号位

–double()函数的转换

•其他数据类型

–uint8,无符号8位整形数据类型,值域为0至255,常用于图像表示和处理。

(节省存储空间,提高处理速度)

–int8(),int16(),int32(),uint16(),uint32()

数字显示的8种格式

MATLAB命令

显示形式

说明

Formatlong

3.14159264358979

16位十进制

Formatshorte

3.1416e+000

5位十进制加指数

Formatlonge

3.14159264358979e+000

16位十进制加指数

Formathex

400921fb54442d18

16位十六进制

Formatbank

3.14

两位小数

Format+

+

正、负、零

Formatrat

355/113

分数

Formatshort(默认)

3.1416

四位小数

>>pi

ans=

3.1416

>>formatlong

>>pi

ans=

3.141592653589793

>>formatshorte

>>pi

ans=

3.1416e+000

>>formatlonge

>>pi

ans=

3.141592653589793e+000

•符号型,sym(A),常用于公式推导、解析解法

–符号变量声明

•symsvar_listvar_props

•例:

symsabreal

•symscpositive

–符号型数值可采用变精度函数求值

•vpa(A),或vpa(A,n)

>>vpa(pi)

ans=

3.1415926535897932384626433832795

>>vpa(pi,60)

ans=

3.14159265358979323846264338327950288419716939937510582097494

•需要注意的是vpa的结果是符号数值,可以用于初等运算,不可用于关系运算。

>>a=vpa(pi)

a=

3.1415926535897932384626433832795

>>a+1

ans=

4.1415926535897932384626433832795

>>a>1

?

?

?

Undefinedfunctionormethod'gt'forinputargumentsoftype'sym'.

MATLAB支持的其他数据类型

•字符串型数据:

用单引号括起来。

•多维数组:

是矩阵的直接扩展,多个下标。

•单元数组:

将不同类型数据集成到一个变量名下面,用[]表示;例:

用A[i,j]可表示单元数组A的第i行,第j列的内容。

•类与对象:

允许用户自己编写包含各种复杂详细的变量,可以定义传递函数。

MATLAB的基本语句结构

•直接赋值语句

赋值变量=赋值表达式

例:

>>a=pi^2

a=

9.8696

例:

表示矩阵

>>B=[1+9i,2+8i,3+7j;4+6j,5+5i,6+4i;7+3i,8+2j,1i]

B=

1.0000+9.0000i2.0000+8.0000i3.0000+7.0000i

4.0000+6.0000i5.0000+5.0000i6.0000+4.0000i

7.0000+3.0000i8.0000+2.0000i0+1.0000i

•函数调用语句

[返回变量列表]=函数名(输入变量列表)

例:

[a,b,c]=my_fun(d,e,f,g)

•冒号表达式

v=s1:

s2:

s3

该函数生成一个行向量v,其中s1是起始值,s2是步长(若省略步长为1),s3是最大值。

例:

用不同的步距生成(0,π)间向量。

>>v1=0:

0.2:

pi

v1=

Columns1through9

00.20000.40000.60000.80001.00001.20001.40001.6000

Columns10through16

1.80002.00002.20002.40002.60002.80003.0000

>>v2=0:

-0.1:

pi%步距为负不能生成向量,得出空矩阵

v2=

Emptymatrix:

1-by-0

>>v3=0:

pi

v3=

0123

>>v4=pi:

-1:

0%逆序排列构成新向量

v4=

3.14162.14161.14160.1416

>>v5=[0:

0.4:

pi,pi]%扩充向量

v5=

00.40000.80001.20001.60002.00002.40002.80003.1416

Linspace函数

Linspace(初值,终值,点数)

>>theta=linspace(0,2*pi,9)

theta=

00.78541.57082.35623.14163.92704.71245.49786.2832

Logspace函数

>>w=logspace(0,1,11)

w=

1.00001.25891.5849…..6.30967.943310.0000

即从10的0次幂到1次幂之间按幂等分为11个点。

子矩阵提取

•基本语句格式B=A(v1,v2)

v1、v2分别表示提取行(列)号构成的向量。

例:

>>A=[1,2,3,4;3,4,5,6;5,6,7,8;7,8,9,0]

A=

1234

3456

5678

7890

>>B1=A(1:

2:

end,:

)%提取全部奇数行、所有列。

B1=

1234

5678

>>B2=A([3,2,1],[2,3,4])%提取3,2,1行、2,3,4列构成子矩阵。

A=

B2=1234

6783456

4565678

2347890

>>B3=A(:

end:

-1:

1)%将A矩阵左右翻转,即最后一列排在最前面。

B3=

4321

6543

8765

0987

>>A(5,:

)=[3,2,6,8]

A=

1234

3456

5678

7890

3268

>>A(6,2)=3

A=

1234

3456

5678

7890

3268

0300

>>A(6,:

)=[]

A=

1234

3456

5678

7890

3268

>>A(12)=0

A=

1234

3406

5678

7890

3268

聚合矩阵

E=ones(2,5)*6;%2×5的矩阵,元素为6

F=rand(3,5);%3×5的矩阵,元素为随机数

G=[E;F]%垂向聚合E和F

G=

6.00006.00006.00006.00006.0000

6.00006.00006.00006.00006.0000

0.81470.91340.27850.96490.9572

0.90580.63240.54690.15760.4854

0.12700.09750.95750.97060.8003

2.2基本数学运算

•矩阵的代数运算

•矩阵表示

A矩阵为n*m矩阵

•矩阵转置

–数学表示(若A有复数元素,先转置再取各元素共轭复数值)

>>z=[1+2i,3+4i;5+6i,7+8i]%也可z=[1,3;5,7]+[2,4;6,8]i

z=

1.0000+2.0000i3.0000+4.0000i

5.0000+6.0000i7.0000+8.0000i

>>w=z’%共轭转置

w=

1.0000-2.0000i5.0000-6.0000i

3.0000-4.0000i7.0000-8.0000i

>>u=conj(z)%共轭

u=

1.0000-2.0000i3.0000-4.0000i

5.0000-6.0000i7.0000-8.0000

>>v=conj(z)’%转置

v=

1.0000+2.0000i5.0000+6.0000i

3.0000+4.0000i7.0000+8.0000i

矩阵的四则运算

•数组和矩阵的加减运算使用加号和减号,即“+”和“-”。

•矩阵相乘使用“*”运算符。

•如果只是将两个矩阵中相同位置的元素相乘,使用“.*”运算符。

•矩阵除法有左除和右除的区别,分别使用“\”和“/”运算符。

•与“\”和“/”运算符相对应,也有“.\”和“./”运算符,分别用于将两个矩阵中的对应元素相除。

•矩阵与常数的代数运算,可以直接使用上面的各种运算符。

•矩阵加减法

C=A+BD=A-B

–注意维数是否相等

–注意其一为标量的情形

•矩阵乘法

–数学表示

C=AB

–MATLAB表示

C=A*B

–注意相容性

•矩阵除法

–矩阵左除:

AX=B,求X

–MATLAB求解:

X=A\B

•若A为非奇异方阵,则X=A-1B

•最小二乘解(若A不是方阵)

在线性代数中,没有除法,只有逆矩阵。

对于任意n*n阶方阵A,如果能找到一个同阶的矩阵V,使AV=I,I为单位矩阵,则V为A的逆阵。

即V=A-1

在matlab中写成V=inv(A)。

上面式子中:

inv(A)*A*X=inv(A)*B

X=inv(A)*B

在matlab中表示为

X=A\B(左除)

–矩阵右除:

XA=B,求X

–MATLAB求解:

X=B/A

•若A为非奇异方阵,则X=BA-1

•最小二乘解(若A不是方阵)

X*A*inv(A)=B*inv(A)

则:

X=B*inv(A)

在matlab中表示为:

X=B/A(右除)

>>A=[1,2,3;4,5,6],B=[2,4,0;1,3,5];

>>D=[1,4,7;8,5,2;3,6,0];

>>A*B

?

?

?

Errorusing==>*Innermatrixdimensionsmustagree.

>>A’*B

ans=

61620

92325

123030

>>A*B’

ans=

1022

2849

>>D\A

?

?

?

Errorusing==>*Innermatrixdimensionsmustagree.

>>D\A’

ans=

-0.03700.0000

0.51851.0000

-0.14810.0000

>>A/D

ans=

0.40740.07410.0000

0.74070.40740.0000

矩阵除法解线性方程组

6x1+3x2+4x3=3

-2x1+5x2+7x3=-4

8x1-4x2-3x3=-7

此式可写成矩阵形式Ax=B,

A=[6,3,4;-2,5,7;8,-4,-3],B=[3;-4;-7];

x=A\B

得出x=0.6000

7.0000

-5.4000

•矩阵翻转

–左右翻转B=fliplr(A)

–上下翻转C=flipud(A)

–旋转90o(逆时针)D=rot90(A)

–如何旋转180o?

>>D=rot180(A)

?

?

?

Undefinedfunctionorvariable'rot180'.

>>D=rot90(rot90(A))

矩阵乘方

–A为方阵,求

–MATLAB实现:

F=A^x

•点运算--矩阵对应元素的直接运算

数学表示:

MATLAB实现:

C=A.*B

例:

>>A=[1,2,3;4,5,6;7,8,0];

>>B=A.^A

B=

1427

256312546656

823543167772161

>>C=A.*A

C=

149

162536

49640

例:

s=[1,2;3,4],D=[1,4,7;8,5,2;3,6,0]

求:

D^2,2.^D,D^s,u1=sqrtm(s),u2=sqrt(s),v1=expm(s),

V2=exp(s),logm(D),log(D)

X=[1,2,3],Y=[4,5,6]

求:

Z=X.*Y,Z=X.\Y,Z=X.^Y,Z=X.^2,Z=2.^[XY]

思考:

X*Y能成立吗?

数组运算有没有左除右除之分?

X^Y能成立吗?

X^2能成立吗?

(注:

expm(),logm(),sqrtm()都是把矩阵当作一个整体看待。

矩阵的逻辑运算

•逻辑变量:

–当前版本有逻辑变量

–对double变量来说,非0表示逻辑1

•逻辑运算(相应元素间的运算)

–与运算A&C

–或运算A|C

–非运算~A

–异或运算xor(A,C)

•各种允许的比较关系

>,>=,<,<=,==,~=,find(),all(),any()

•例:

>>A

A=

123

456

780

>>find(A>=5),%大于或等于5元素的下标

ans=

3568

>>[i,j]=find(A>=5);[i,j]%显示行标,列标

ans=

31

22

32

23

>>all(A>=5)%某列元素全大于或等于5时,相应元素为1,否则为0。

ans=

000

>>any(A>=5)%某列元素中含有大于或等于5时,相应元素为1,否则为0。

ans=

111

解析结果的化简与变换

MATLAB实现:

s1=simple(s)从各种方法中自动选择最简格式[s1,how]=simple(s)化简并返回实际采用的化简方法

其中,s为原始表达式,s1为化简后表达式,how为采用的化简方法。

•其他常用化简函数(信息与格式可用help命令得出)

collect()合并同类项

expand()展开多项式

factor()因式分解

numden()提取多项式的分子和分母

例:

>>[n,d]=numden(sym(4/5))

n=4

d=5

>>[n,d]=numden(x/y+y/x)

n=x^2+y^2

d=x*y

例:

>>symss;%定义一个符号变量

>>P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)

P=

(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)

>>simple(P)%一系列化简尝试,得出计算机认为的最简形式

ans=

(s+3)^2*(s+2)*(s+1)*(s+4)^3

>>[a,m]=simple(P)%返回化简方法为因式分解方法,用factor()函数将得同样结果

a=

(s+3)^2*(s+2)*(s+1)*(s+4)^3

m=

factor

>>expand(P)

ans=

s^7+21*s^6+185*s^5+883*s^4+2454*s^3+3944*s^2+3360*s+1152

•变量替换

f1=subs(f,x1,x1*)

f1=subs(f,{x1,x2,……,xn},{x1*,x2*,……,xn*})

其中,f为原表达式,用x*替换x得出新的。

例:

求函数值

f(t)=cos(at+b)+sin(ct)*sin(dt)

>>symsabcdt;%假设这些变量均为符号变量

>>f=cos(a*t+b)+sin(c*t)*sin(d*t);%定义给定函数f(t)

>>f1=subs(f,{a,b,c,d,t},{0.5*pi,pi,0.25*pi,0.125*pi,4})

f1=

-1.0000

解方程

符号数学函数可用于解方程、方程组和微分方程。

solve(f)求符号方程f的符号变量解。

如果f是一个符号表达式,则求f=0的符号变量解。

如果有多个变量,优先求解x。

solve(f1,f2,……,fn)求由f1,f2,……,fn表示的方程组的解。

solve(f,’y’)求符号方程关于变量y的解。

例:

eq1=sym(‘x-3=4’);

eq2=sym(‘x^2-x-6’);

eq3=sym(‘x^2+2*x+4=0’);

eq4=sym(‘3*x+2*y-z=10’);

eq5=sym(‘-x+3*y+2*z=5’);

eq6=sym(‘x-y-z=-1’);

求:

solve(eq1),solve(eq2),solve(eq3),solve(eq4),

solve(eq4,y),solve(eq4,eq5,eq6)

微分

diff()函数用于求一个符号表达式的符号导数。

diff(f)返回f关于缺省的自变量的导数

diff(f,’t’)返回f关于自变量t的导数

diff(f,n)返回f关于缺省自变量的n阶导数

diff(f,‘t’,n)返回f关于自变量t的n阶导数

例:

s1=sym(‘6*x^3-4*x^2+b*x-5’);

s2=sym(‘sin(a)’);

s3=sym(‘(1-t^3)/(1+t^4)’);

求:

diff(s1),diff(s2,2),diff(s1,’b’),diff(s2),diff(s3)

积分

int()函数用于求表达式的积分。

int(f)返回f关于缺省自变量的积分

int(f,’t’)返回f关于自变量t的积分

int(f,a,b)返回f关于缺省自变量在区间[a,b]的积分

int(f,’t’,a,b)返回f关于自变量t在区间[a,b]的积分

int(f,’m’,’n’)返回f关于缺省自变量在区间[m,n]的积分,这里m,n为符号表达式。

例:

s1=sym(‘6*x^3-4*x^2+b*x-5’);

s2=sym(‘sin(a)’);

s3=sym(‘sqrt(x)’);

求:

int(s1),int(s2),int(s3),int(s3,‘a’,’b’),

int(s3,0.5,0.6)

优先级

运算

1

括号

2

乘方运算,从左到右

3

乘法和除法运算,从左到右

4

加法和减法运算,从左到右

基本数论运算

基本数学函数包括一些

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

当前位置:首页 > 成人教育 > 电大

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

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