当前位置:文档之家› 第三讲 MATLAB编程

第三讲 MATLAB编程

第三讲 MATLAB编程
第三讲 MATLAB编程

第三讲 MATLAB编程

编程的基本原理:

数据输入(Input) 数据处理(算法) 数据输出(Output)

1.1 MATLAB数据类型

MATLAB的主要数据类型是数组类型,其中的每一种类型都以数组为基础,都是从数组派生出来的,MATLAB实际上把每种类型的数据作为数组处理。一般把二维数组称为矩阵,1╳n和n╳1数组称为向量,1╳1数组称为数值。

数据类型

char numeric cell struc 其它

double single int,uint

sparse

help datatypes

Data types and structures.

Data types (classes)

double - Convert to double precision.

char - Create character array (string).

logical - Convert numeric values to logical.

cell - Create cell array.

struct - Create or convert to structure array.

single - Convert to single precision.

uint8 - Convert to unsigned 8-bit integer.

uint16 - Convert to unsigned 16-bit integer.

uint32 - Convert to unsigned 32-bit integer.

uint64 - Convert to unsigned 64-bit integer.

int8 - Convert to signed 8-bit integer.

int16 - Convert to signed 16-bit integer.

int32 - Convert to signed 32-bit integer.

int64 - Convert to signed 64-bit integer.

inline - Construct INLINE object.

function_handle - Function handle array.

javaArray - Construct a Java array.

javaMethod - Invoke a Java method.

javaObject - Invoke a Java object constructor.

1.2数组输入与寻访

1 一维数组的创建和寻访

(1)逐个元素输入法

这是最简单,但又最通用的构造方法。以下指令就是一例。

x=[2 pi/2 sqrt(3) 3+5i]

x =

2.0000 1.5708 1.7321

3.0000 + 5.0000i

(2)冒号生成法

这是通过“步长“设定,生成一维“行“数组的方法。该方法的通用格式是;

x=a:inc:b

[说明]

●a是数组的第一个元素,inc是采样点之间的间隔,即步长。若(b-a)是inc的整数倍,

则所生成的数组的最后一个元素等于b,否则小于b。

●inc,b之间必须用冒号“;“分隔。注意:该冒号必须在英文状态下产生。中文状态下的

冒号将导致MATLAB操作错误!

●inc可以省略。省略时,默认其取值为1,即认为inc=1。

●inc可以取正数或负数。但要注意:inc取正时,要保证a

a>b。

x=1:3:11

x =

1 4 7 10

(3)定数线性采样法

该法在设定的“总点数“下,均匀采样生成一维“行“数组。该法的通用格式是:

x=linspace(a,b,n)

[说明]

●a,b分别是生成数组的第一个和最后一个元素。n是采样总点数。该指令生成数组。

●该指令的作用与x=a:(b-a)/(n-1):b相同。

x=linspace(1,11,4)

x =

1.0000 4.3333 7.6667 11.0000

(4)定数对数采样法

该法在设定的“总点数“下,经“常用对数“采样生成一维“行“数组。通用格式是:

x=logspace(a,b,n)

[说明]

●生成数组的第一个元素值为10a,最后一个元素值是10b。n是采样总点数。该指令生成(1

×n)数组。

●在信号处理和控制学科中,常用该指令去产生频率响应的频率自变量采样点。

x=logspace(1,4,4)

x =

10 100 1000 10000

一维数组的子数组寻访和赋值

例1 子数组的寻访(Address)。

rand('state',0) %把均匀分布伪随机发生器置为0状态

x=rand(1,5) %产生

)5

1(

的均布随机数组

x =

0.9501 0.2311 0.6068 0.4860 0.8913

x(3) %寻访数组x的第三个元素。

ans =

0.6068

x([1 2 5]) %寻访数组x的第一、二、五个元素组成的子数组。

ans =

0.9501 0.2311 0.8913

x(1:3) %寻访前三个元素组成的子数组

ans =

0.9501 0.2311 0.6068

x(3:end) %寻访除前2个元素外的全部其他元素。end是最后一个元素的下标。

ans =

0.6068 0.4860 0.8913x(3:-1:1) %由前三个元素倒排构成的子数组

ans =

0.6068 0.2311 0.9501

x(find(x>0.5)) %由大于0.5的元素构成的子数组

ans =

0.9501 0.6068 0.8913

x([1 2 3 4 4 3 2 1]) %对元素可以重复寻访,使所得数组长度允许大于原数组。

ans =

Columns 1 through 7

0.9501 0.2311 0.6068 0.4860 0.4860 0.6068 0.2311

Column 8

0.9501

[说明]

●寻访什么样的子数组,取决于数组X(index)中下标index。

●下标index本身可以是单个正整数或正整数数组,但index中的每个元素的取值必须在闭

区间内[1,end]。在此,end是指一维数组的长度,即最大下标。end的这种用法是MATLAB 5.x版新增的。

例2 子数组的赋值(Assign)。

x(3) = 0 %把上例中的第三个元素重新赋值为0

x =

0.9501 0.2311 0 0.4860 0.8913

x([1 4])=[1 1] %把当前x数组的第一、四个元素都赋值为1。

x =

1.0000 0.2311 0 1.0000 0.8913

[说明]

要保证被重新赋值的子数组的长度与送入的数组长度相同。

2 二维数组的创建

二维数组是由实数或复数排列成矩形而构成的。从数据结构上看,矩阵和二维数组没有什么区别。当二维数组带有线性变换含义时,该二维数组就是矩阵。

(1)直接输入法

例3 在MATLAB环境下,用下面三条指令创建二维数组C。

a=2.7358; b=33/79; %这两条指令分别给变量 a ,b 赋值。

C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]

%这指令用于创建二维数组C

C =

1.0000 5.4716 + 0.4177i 0.6909

0.7071 4.8244 3.5000 + 1.0000i

[说明]

●分号“;“在“[]“方括号内时,它是数组行间的分隔符。

●分号“;“作为指令后的结束符时,将不在屏幕上显示该指令执行后的结果。

例4 复数数组的另一种输入方式。

M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]

CN=M_r+i*M_i %由实部、虚部数组构成复数数组

M_r =

1 2 3

4 5 6

M_i =

11 12 13

14 15 16

CN =

1.0000 +11.0000i

2.0000 +12.0000i

3.0000 +13.0000i

4.0000 +14.0000i

5.0000 +15.0000i

6.0000 +16.0000i

[说明]

●在“[]“方括号中,逗号“,“是元素与元素间的分隔符。

●逗号“,“用于指令后时,该指令执行后的赋值结果将被显示在屏幕上。

(2)利用M文件创建和保存数组

对于今后经常需要调用的数组,尤其是比较大而复杂的数组,为它专门建立一个M文件是值得的。下面通过一个简单例子来说明这种M文件的创建过程。

例5 创建和保存数组 AM的 MyMatrix.m 文件。

●打开文件编辑调试器,并在空白填写框中输入以下内容。

●保存此文件,并且文件起名为MyMatrix.m文件

●以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组AM就会自动生成于MATLAB内

存中。

(3)利用Array Editor数组编辑器输入数组

●在指令窗,向一个新变量赋“空”矩阵。x=[];

●在内存浏览器中,双击该变量,打开数组编辑器。

●在数组编辑器左上方的行和列栏中定义行和列的大小。

●在数组元素格输入数据。

3数据的保存与获取

●生成mat数据文件

把MATLAB工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件。

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

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

>>save data a b —将工作空间中a和b变量存到data.mat文件中。

●调用已生成的mat文件

下次运行MATLAB时即可用load指令调用已生成的mat文件。

>>load —打开matlab.mat文件。

>>load data —打开data.mat文件。

>>load data a b —打开data.mat文件中的a,b变量。

mat文件是标准的二进制文件,还可以ASCII码形式保存

4 二维数组元素的标识

前面采用算例方式介绍了一维子数组的寻访和赋值。在介绍二维或更高维数组中子数组的寻访赋值之前,首先要阐述单个元素标识和寻访的三种方式。 (1)“全下标”标识

经典数学教科书所引述具体矩阵元素时,采用“全下标“标识法,即指出是“第几行 第几列“的元素。这种标识方法的优点是:几何概念清楚,引述简单。它在MATLAB 的寻访和赋值中最为常用。

对于二维数组来说,“全下标“标识由两个下标组成:行下标,列下标。如A (3,5)就表示在二维数组A 的“第三行第5列“的元素。 (2)“单下标”标识

顾名思义,“单下标“标识就是“只用一个下标来指明元素在数组中的位置“。当然这样做,首先要对二维数组的所有元素进行“一维编号“。所谓“一维编号“是:先设想把二维数组的所有列,按先左后右的次序、首尾相接排成“一维长列“。然后,自上往下对元素位置进行编号。

“单下标“与“全下标“的转换关系:以(m ×n )的二维数组A 为例,若“全下标“元素位置是“第r 行,第c 列“,那么相应的“单下标“为l=(c-l)×m+r 。MATLAB 有两个指令可以实现以上标识方法间的转换。 sun2ind 据全下标换算出单下标 ind2sub 据单下标换算出全下标 (3)“逻辑1”标识

在实际使用中,常会遇到诸如寻找数组中所有大于某值的元素的问题。此时,“逻辑1“标识法就特别得心应手。 例6找出数组??

?

???----=

5311342024A 中所有绝对值大于3的元素。 A=zeros(2,5); %预生成一个(2*5)全零数组 A(:)=-4:5 %运用“全元素”赋值法获得A L=abs(A)>3 %产生与A 同维的“0-1”逻辑值数组

islogical(L) %判断L 是否逻辑值数组。输出若为1,则是。 X=A(L) %把L 中逻辑值1对应的A 元素取出 A =

-4 -2 0 2 4 -3 -1 1 3 5 L =

1 0 0 0 1 0 0 0 0 1 ans = 1 X = -4 4 5 [说明]

L 的元素或是0或是1,它是“逻辑数组“。这种逻辑数组是一种特殊的数据类型。

●所谓“逻辑1“标识法是:通过与A同样的大小的逻辑值数组L中“逻辑值1“所在的位

置,指示A中元素的位置。

例7 演示逻辑数组与一般双精度数值数组的关系和区别。

●逻辑数组与双精度数组的相同之处

Num=[1,0,0,0,1;0,0,0,0,1]; %产生与L数组外表完全相同的“双精度数组”

N_L=Num==L %假如Num与L数值相等,则应得 1 。

c_N=class(Num) %用class指令检查Num的类属

c_L=class(L) %用class指令检查L的类属

N_L =

1 1 1 1 1

1 1 1 1 1

c_N =

double

c_L =

double

●逻辑数组与一般双精度数组的差别

islogical(Num) %检查Num是否属于逻辑数组类

Y=A(Num) %试探Num能否象L一样具有标识作用

ans =

??? Index into matrix is negative or zero. See release notes on changes to logical indices.

[说明]

●该例表明:逻辑数组一方面具有双精度特性,另一方面又区别于一般的双精度数组。

●逻辑数组产生于逻辑函数或逻辑运算,它具有“逻辑标识“能力。

●从本质上说,逻辑数组是双精度数组的子类。它继承了双精度类型数据的全部性质,又

有自己特定的属性和能力。这是应用面向对象编程技术的结果。

5 二维数组的子数组寻访和赋值

明白了前一节的元素标识,就容易理解和掌握二维数组的子数组寻访和赋值,常用的相关指令形式见表。

子数组寻访和赋值格式汇总表

例8不同赋值方式示例。

2( 的全零数组

A=zeros(2,4) %创建)4

A =

0 0 0 0

0 0 0 0

A(:)=1:8 %全元素赋值方式

A =

1 3 5 7

2 4 6 8

s=[2 3 5]; %产生单下标数组行数组

A(s) %由“单下标行数组”寻访产生A元素组成的行数组

Sa=[10 20 30]' %Sa是长度为3的“列数组”

A(s)=Sa %单下标方式赋值

ans =

2 3 5

Sa =

10

20

30

A =

1 20 30 7

10 4 6 8

A(:,[2 3])=ones(2) %双下标赋值方式:把A的第2、3列元素全赋为1

A =

1 1 1 7

10 1 1 8

1.3 数值数组及运算

数值数组(Numeric Array)和数组运算(Array Operation)始终是MATLAB的核心内容。由于MATLAB 5.x版以上突出了其“面向对象“的特征,这种数值数组(以下简称为数组)就成了MATLAB最重要的一种内建数据类型(Built –in Data Type),而数组运算就是定义在这种数据结构上的方法(Method)。数组是指由一组实数或复数排成的长方阵列(Array)。它可以是一维的“行“或列,它可以是二维的“矩形“,也可以是三维的“若干同维矩形的堆叠“,甚至更高的维数。数组运算是指无论在数组上施加什么运算(加减乘除或函数),总认定那种运算对被运算数组中的每个元素(Element)平等地实施同样的操作。MATLAB精心设计数

组和数组运算的目的在于:(1)使计算程序简单、易读,使程序指令更接近于教科书上的数学计算公式:(2)提高程序的向量化程度,提高计算效率,节省计算机开销。 例9绘制函数

x xe y -=在10≤≤x 时的曲线。

x=0:0.1:1 %定义自变量的采样点取值数组

y=x.*exp(-x) %利用数组运算计算各自变量采样点上的函数值 plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)') %绘图 x =

Columns 1 through 7

0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 11

0.7000 0.8000 0.9000 1.0000 y =

Columns 1 through 7

0 0.0905 0.1637 0.2222 0.2681 0.3033 0.3293 Columns 8 through 11

0.3476 0.3595 0.3659 0.3679

图3.1-1

● 第一句指令定义自变量采样数组:以0为起点,每隔0.1取一个采样点,直到1为止。该数组是“长度“为11的“行数组“,或说成(1×11)的数组。

第二句指令中,指数函数exp (X )数组x 每个元素求函数值,结果exp (X )数组也是一个(1×11)的数组。而指令中的运算符“.*“,实施数组x 和数组exp (X )对应元素之间相乘。因此,所得结果y 也是(1×11)的数组。由此,读者可以看到数组运算避免了烦冗而效率低下的循环运算。 ● 指令plot ,则根据所得的x 数组和y 数组,绘制曲线。

另外还要说明一点:对于定义在连续区间(或域)上的函数,进行数值计算时必须对此给定的连续区间进行适当的采样,得到一个采样值数组。数值计算都是关于这种采样数组进行的。

1 数组运算的常用函数

上面已经概括地给出了数组运算的定义。下面将更清晰地描述常用函数的数组运算本质,更系统地列出具备数组运算能力的函数名称。为叙述方便又兼顾一般性,表述时以二维数组为例。但本节所列函数对任意维数组都适用。 (1) 函数数组运算规则的定义:

(2) 执行数组运算的常用函数

三角函数和双曲函数

指数函数

复数函数

圆整函数和求余函数

坐标变换函数

是指:的数组运算规则

函数=数组对于(n m ij n m ij mn m m n n x f X f f x x x x x x x

x ??=?=??

?

?

?

?

?

???)]([)()(,][x x X n)m 2

122221

11211

其他特殊函数

例10 演示pow2的数组运算性质。 A=[1:4;5:8] %生成)42(?数组 A =

1 2 3 4 5 6 7 8

pow2(A) %计算]

[22ij a A

=的结果也是)42(?数组

ans =

2 4 8 16

32 64 128 256 2 数组运算和矩阵运算

从外观形状和数据结构上看,二维数组和(数学中的)矩阵没有区别。但是,矩阵作为一种变换或映射算子的体现,矩阵运算有着明确而严格的数学规则。而数组运算是MATLAB 软件所定义的规则,其目的是为了数据管理方便、操作简单指令形式自然和执行计算的有效。两者运算有根本区别。

数组运算和矩阵运算指令对照汇总

例21 两种不同转置的比较

clear;A=zeros(2,3);

A(:)=1:6; %全元素赋值法

A=A*(1+i) %运用标量与数组乘产生复数矩阵

A_A=A.' %数组转置,即非共轭转置

A_M=A' %矩阵转置,即共轭转置

A =

1.0000 + 1.0000i 3.0000 + 3.0000i 5.0000 + 5.0000i

2.0000 + 2.0000i 4.0000 + 4.0000i 6.0000 + 6.0000i A_A =

1.0000 + 1.0000i

2.0000 + 2.0000i

3.0000 + 3.0000i

4.0000 + 4.0000i

5.0000 + 5.0000i

6.0000 + 6.0000i

A_M =

1.0000 - 1.0000i

2.0000 - 2.0000i

3.0000 - 3.0000i

4.0000 - 4.0000i

5.0000 - 5.0000i

6.0000 - 6.0000i

矩阵加减和数组加减(相同)

a=[1 2 3 ;4 5 6;7 8 9];

b=[1 4 7;8 9 10;11 12 13];

c=a+b

c =

2 6 10

12 14 16

18 20 22

矩阵与标量的加减(无数组运算)

d=c-1

d =

1 5 9

11 13 15

17 19 21

矩阵乘和数组乘

x=[2 3 4 5;1 2 2 1];

y=[0 1 1;1 1 0;0 0 1;1 0 0];

z=x*y

z =

8 5 6

3 3 3

A=[11 12 13 14 15;16 17 18 19 20];

B=[1 2 3 4 5;6 7 8 9 10];

C=A.*B

C =

11 24 39 56 75

96 119 144 171 200

矩阵的数乘和数组的数乘(相同)

a=[2 3 4 5

1 2 2 1];

b=a*2

b =

4 6 8 10

2 4 4 2

矩阵除和数组除

有两种除法运算:左除(\)和右除(/)

a\b=inv(a)*b

b/a=b*inv(a)

a=[1 2 3 ;4 2 6;7 4 9];

b=[4;1;2];

x=a\b

x =

-1.5000

2.0000

0.5000

x=[1 2 3];

y=[4 5 6];

z1=x.\y

z2=x./y

z1 =

4.0000 2.5000 2.0000

z2 =

0.2500 0.4000 0.5000

矩阵乘方和数组乘方

矩阵乘方分几种情况:

●当 A为方阵,p为大于1的整数时

●当 A为方阵,p为非整数时,若有特征值分解AV=VD,定义A^p=VD.^PV-1 A=[1 2 3;4 5 6;7 8 9];

Ap=A^0.3

Ap =

0.6962 + 0.6032i 0.4358 + 0.1636i 0.1755 - 0.2759i

0.6325 + 0.0666i 0.7309 + 0.0181i 0.8292 - 0.0305i

0.5688 - 0.4700i 1.0259 - 0.1275i 1.4830 + 0.2150i

[V,D]=eig(A)

AAp=V*diag([D(1,1)^0.3,D(2,2)^0.3,D(3,3)^0.3])/V

V =

0.2320 0.7858 0.4082

0.5253 0.0868 -0.8165 0.8187 -0.6123 0.4082 D =

16.1168 0 0 0 -1.1168 0 0 0 -0.0000 AAp =

0.6962 + 0.6032i 0.4358 + 0.1636i 0.1755 - 0.2759i 0.6325 + 0.0666i 0.7309 + 0.0181i 0.8292 - 0.0305i 0.5688 - 0.4700i 1.0259 - 0.1275i 1.4830 + 0.2150i Aap=A.^0.3 Aap =

1.0000 1.2311 1.3904 1.5157 1.6207 1.7118 1.7928 1.8661 1.9332 标量的矩阵乘方和标量的数组乘方 特征值分解AV=VD

pA=(0.3)^A

pA =

2.9342 0.4175 -1.0993 -0.0278 0.7495 -0.4731 -1.9898 -0.9184 1.1531

paA=0.3.^A paA =

0.3000 0.0900 0.0270 0.0081 0.0024 0.0007 0.0002 0.0001 0.0000 3 数组的关系运算

关系运算符: = = ~= > < >= <= A=[1 2 3;4 5 6;7 8 9]; x=5;

X=5*ones(3) Ax=x>=A AX=X>=A X =

5 5 5 5 5 5 5 5 5 Ax =

1 1 1 1 1 0

1

11...-????

??????=V

p p V p dnn d A

0 0 0

AX =

1 1 1

1 1 0

0 0 0

4 数组逻辑运算

逻辑运算符 & | ~

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

B=[-1, 0, 0;0, 0.5, 0];

AandB=A&B

AorB=A|B

notB=~B

AandB =

1 0 0

0 1 0

AorB =

1 1 1

1 1 1

notB =

0 1 1

1 0 1

a=1&0+3

a =

1

b=3>4&1

b =

5 特殊运算符

冒号(:)

●冒号可以用来输入行向量

a=1:-1/4:1/16

a =1.0000 0.7500 0.5000 0.2500

●冒号能够从向量、矩阵中挑选指定的元素、行和列

a(:) 将a的全部元素按列拉长生成一个列向量

a(:,j) 得到a的第j列

a(i,:) 得到a的第I列

a(:,j:k) 得到[a(: j);a(: j+1);…;a(: k)]

a(j:k) 得到[a( j);a( j+1);…;a( k)],即拉长后列向量的元素a=[1 2;3 4;5 6]

b=a(:)

a =

1 2

3 4

5 6

b =

1

3

5

2

4

6

a(:)=11:16

a =

11 14

12 15

13 16

a=[1 2 3;4 5 6;7 8 9];

c=a(:,2)

d=a(3,:)

c = 2

5

8

d = 7 8 9

e=a(2:3,1:2)

f=a(1:2,:)

e = 4 5

7 8

f = 1 2 3

4 5 6

g=a(3:7)

g = 7 2 5 8 3

分号(;)

●在方括号内,表示分隔矩阵的行

●作语句结束符,以分号结束的语句在执行时,不显示运行结果

逗号(,)

●在方括号内,表示分隔矩阵的列

a=[1,2,3;4,5,6;7 8 9]

a =

1 2 3

4 5 6

7 8 9

●用于矩阵下标变量时,可分隔元素的下标,如a(2,3)

●用于函数定义或函数调用时,分隔函数的形参或实参

●MATLAB的程序可以一行多个语句,语句之间以逗号相隔

圆括号()

●作为一个运算符,()中表达式可优先运算

●()出现在函数中,括号中放置函数参数

●生成向量的非直接下标

a=[3 6 9 2 4 8 9];

b=[2 6 4];

a(b)

ans = 6 8 2

●生成矩阵的非直接下标

A=[1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

16 17 18 19 20

21 22 23 24 25];

v=[4 2];

w=[2 4];

B=A(v,w)

A([1 5],:)=A([5 1],:)

B =

17 19

7 9

A =

21 22 23 24 25

6 7 8 9 10

11 12 13 14 15

16 17 18 19 20

1 2 3 4 5

方括号

●用于构成向量和矩阵

●用于构成空阵

X =[ ]

A=[1 2 3 4 5 6;7 8 9 10 11 12;13 14 15 16 17 18];

A(:,[2 5])=[ ]

A =

1 3 4 6

7 9 10 12

13 15 16 18

●当“[”和“]”出现在赋值号“=”左边时,表示函数返回多项结果

a=[1 2 3;4 5 6;7 8 9];

[v,d]=eig(a)

v =

0.2320 0.7858 0.4082

0.5253 0.0868 -0.8165

0.8187 -0.6123 0.4082

d =

16.1168 0 0

0 -1.1168 0

0 0 -0.0000

省略号…用于语句行尾端表示该行未完

b=1+1/2+1/4+1/8+1/16+1/32+1/64+1/128+...

+1/256+1/512+1/1024

b =1.9990

6 常用矩阵的生成

单位阵eye(n) eye(m,n)

全一阵ones(n) ones(m,n)

全零阵zeros(n) zeros(m,n)

均匀分布随机阵rand(n) rand(m,n)

正态分布随机阵 randn(n) randn(m,n)

rand(3,4)

ans =

0.3497 0.6207 0.1469 0.1169

0.3424 0.4310 0.5918 0.7986

0.2149 0.0334 0.0916 0.5366

rand('seed',0) %将随机发生器状态设为初始状态

X=rand(1,10000);

N05=sum(X<=0.5)

N05 = 4957

7 特殊矩阵的生成

compan 伴随阵 diag 对角阵

gallery 试验矩阵 hadamand Hadamand 阵

hankel Hankel阵 hilb Hilbert阵

invhilb 逆Hilbert阵 kron Kronecker张量积magic 魔方阵 pascal Pascal三角阵 a=pascal(6)

a =

1 1 1 1 1 1

1 2 3 4 5 6

1 3 6 10 15 21

1 4 10 20 35 56

1 5 15 35 70 126

1 6 21 56 126 252

b=magic(6)

b =

35 1 6 26 19 24

3 32 7 21 23 25

31 9 2 22 27 20

8 28 33 17 10 15

30 5 34 12 14 16

4 36 29 13 18 11

8 矩阵结构变换(旋转、变维、抽取等)

fliplr(x) 将x左右翻转

flipup(x) 将x上下翻转

rot90(x) 将x逆时针方向旋转90度

reshape(x,m,n) 将矩阵x变成维数m×n的矩阵

v=diag(A) 返回A的主对角线元素

v=diag(A,k) 返回A的第k条对角线元素

A=diag(v) 构成由向量v放在主对角线上的矩阵

A=diag(v,k)

L=tril(A) 返回A的下三角部分

L=tril(A,k)

U=triu(A) 返回A的上三角部分

U=triu(A,k)

k=0时即为主对角线,k为正值时为上方第k条对角线,k为负值时为下方第k条对角线

A=[1 2 3 4 ;5 6 7 8;9 10 11 12]

B1=rot90(A)

BT=A'

A = 1 2 3 4

5 6 7 8

9 10 11 12

B1 =

4 8 12

3 7 11

2 6 10

1 5 9

BT =

1 5 9

2 6 10

3 7 11

4 8 12

B=reshape(A,2,6)

C=zeros(2,6)

C( : )=A(: )

B =

1 9 6 3 11 8

5 2 10 7 4 12

C =

0 0 0 0 0 0

0 0 0 0 0 0

C =

1 9 6 3 11 8

5 2 10 7 4 12

A=[1 2 3 4 ;5 6 7 8;9 10 11 12]

LA=tril(A,-1)

UA=tril(A,1)

V=diag(v)

A =

1 2 3 4

5 6 7 8

9 10 11 12

v =

1

6

11

LA =

0 0 0 0

5 0 0 0

9 10 0 0

UA = 1 2 0 0

5 6 7 0

9 10 11 12

V = 1 0 0

0 6 0

0 0 11

1.4 字符串数组及运算

1 字符串是单引号括起来的一行字符序列。

字符串是字符的ASCII码值构成的矩阵(字符数组),每个字符占2字节。

其中空格也是字符

s='Good Morning'

size(s)

s =Good Morning

ans =1 12

字符串为具有特殊属性的数组,当然可以按照通常数组那样对其进行操作。

字符串中可有单引号,但必须写成两个。

v='I can''t find the book'

字符串可以直接拼接

u='Good ';

v='Morning';

w =[u v]

w =Good Morning

2 字符串的操作函数

abs 将字符串变成ASCII码值

blanks(n) 创建n个空格字符串

char 把ASCII码及其它非数值类型数据转换成字符串 delblanks 移去字符串尾部的空格字符

dec2hex 将十进制数变为十六进制字符串

double 将字符串转换为双精度数值

eval 运行含有MATLAB表达式的字符串

findstr 从一个字符串中寻找是否包含另一个字符串

hex2dec 将十六进制字符串变为十进制整数

相关主题
文本预览
相关文档 最新文档