资源描述
2.利用冒号表达式生成向量
冒号表达式的基本形式为x=x0:step:xn,其中x0、step、xn 分别为给定数值,x0 表示向量的首元素数值,xn 表示向量尾元素数值限,step表示从第二个元素开始,元素数值大小与前一个元素值大小的差值。
注意:这里强调xn 为尾元素数值限,而非尾元素值,当xn-x0 恰为step值的整数倍时,xn才能成为尾值。若x0<xn,则需step>0;若x0>xn 则需step<0;若x0=xn,则向量只有一个元素。若step=1,则可省略此项的输入,直接写成x=x0:xn。此时可以不用“[ ]”。
【例如】
>> a=1:2:12
a=
1 3 5 7 9 11
>> a=1:-2:12
a=
Empty matrix: 1-by-0
>> a=12:-2:1
a=
12 10 8 6 4 2
>> a=1:2:1
a=
1
>> a=1:6
a=
1 2 3 4 5 6
3.线性等分向量的生成
在MATLAB中提供了线性等分功能函数linspace,用来生成线性等分向量,其调用格式
如下:
y=linspace(x1,x2)生成100维的行向量,使得y(1)=x1,y(100)=x2;
y=linspace(x1,x2,n)生成n维的行向量,使得y(1)=x1,y(n)=x2。
【例如】
a1=linspace(1,100,6)
a1 =
1.0000 20.8000 40.6000 60.4000 80.2000 100.0000
说明 线性等分函数和冒号表达式都可生成等分向量。但前者是设定了向量的维数去生成等间隔向量,而后者是通过设定间隔来生成维数随之确定的等间隔向量。
4.对数等分向量的生成
在自动控制,数字信号处理中常常需要对数刻度坐标,MATLAB中还提供了对数等分功能函数,具体格式如下:
y=logspace(x1,x2)生成50维对数等分向量,使得y(1)=10x1,y(50)=10x2;
y=logspace(x1,x2,n)生成n维对数等分向量,使得y(1)=10x1,y(n)=10x2;
【例如】
>> a2=logspace(0,5,6)
a2 =
1 10 100 1000 10000 100000
另外,向量还可以从矩阵中提取,还可以把向量看成1×n阶(行向量)或n×1阶(列向量)的矩阵,以矩阵形式生成。由于在MATLAB中矩阵比向量重要得多,此类函数将在下节矩阵中详细介绍,专门对向量运算感兴趣的读者可参考下一节。
2.2.2 向量的基本运算
1.加(减)与数加(减)
【例如】
>> a1-1 %这里的a1即上页中生成的a1
ans =
0 19.8000 39.6000 59.4000 79.2000 99.0000
2.数乘
【例如】
>> a1*2
ans =
2.0000 41.6000 81.2000 120.8000 160.4000 200.0000
2.2.3 点积、叉积及混合积的实现
1.点积计算
在高等数学中,向量的点积是指两个向量在其中某一个向量方向上的投影的乘积,通常可以用来引申定义向量的模。
在MATLAB中,向量的点积可由函数dot来实现。
dot 向量点积函数
dot(a,b) 返回向量a和b的数量点积。a和b必须同维。当a和b都为列向量时,dot(a,b) 同于a.*b。
dot(a,b,dim) 返回a和b在维数为dim的点积。
【例2.4】 试计算向量a=(1,2 ,3)和向量b =(3,4,5)的点积。
>> a=[1 2 3];
>> b=[3,4,5];
>> dot(a,b)
ans =
26
还可以用另一种方法计算向量的点积。
>> sum(a.*b)
ans =
26
2.叉积
在数学上,向量的叉积表示过两相交向量的交点的垂直于两向量所在平面的向量。在MATLAB中,向量的叉积由函数cross来实现。
cross 向量叉积函数
c = cross(a,b)返回向量a和b的叉积向量。即C = a×b。a和b必须为三维向量。
c = cross(a,b)返回向量a和b的前3位的叉积。
c = cross(a,b,dim)当a和b为n维数组时,则返回a和b的dim维向量的叉积。a和b必须有相同的维数。且size(a,dim)和size(a,dim)必须为3。
【例2.5】 计算垂直于向量a =(1,2,3)和b =(3,4,5)的向量。
a=[1 2 3];
b=[3,4,5];
c=cross(a,b)
c=
-2 4 -2
得到同时垂直a、b的向量为±(-2,4,-2)。
3.混合积
向量的混合积由以上两个函数实现。
【例2.6】 计算上面向量a、b、c的混合积。
>> dot(a,cross(b,c))
ans =
24
注意 函数的顺序不可颠倒,否则将出错。
2.3 矩阵及其运算
MATLAB原意为矩阵实验室,而且MATLAB的所有的数值功能都是以(复)矩阵为基本单元进行的,因此,MATLAB中矩阵的运算功能可谓最全面、最强大。本节将对矩阵及其运算进行详细的阐述。
2.3.1 矩阵的生成
1.直接输入小矩阵
从键盘上直接输入矩阵是最方便、最常用和最好的创建数值矩阵的方法,尤其适合较小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点。
输入矩阵时要以“[ ]”为其标识,即矩阵的元素应在“[ ]”内部,此时MATLAB才将其识别为矩阵。矩阵的同行元素之间可由空格或“,”分隔,行与行之间要用“;”或回车符分隔。
l 矩阵大小可不预先定义。
l 矩阵元素可为运算表达式。
l 若不想获得中间结果,可以“;”结束。
l 无任何元素的空矩阵亦合法。
【例2.7】 创建一简单数值矩阵。
>> a=[1 2 3;1 1 1;4 5 6]
a=
1 2 3
1 1 1
4 5 6
【例2.8】 创建一带有运算表达式的矩阵。
>> b=[sin(pi/3),cos(pi/4);log(9),tanh(6)];
此时矩阵已经建立并存储在内存中,只是没有显示在屏幕上而已。若用户想查看此矩阵,只需键入矩阵名。
2.创建M文件输入大矩阵
M文件是一种可以在MATLAB环境下运行的文本文件。它可以分为命令式文件和函数式文件两种。在此处主要用到的是命令式M文件,用它的最简单形式来创建大型矩阵。更加详细的内容将在第5章中讨论。当矩阵的规模比较大,直接输入法就显得笨拙,出现差错也不易修改。为了解决此问题,可以利用M文件的特点将所要输入的矩阵按格式先写入一文本文件中,并将此文件以m为其扩展名,即为M文件。在MATLAB命令窗中输入此M文件名,则所要输入的大型矩阵就被输入到内存中。
【例如】编制一名为example.m的M文件,内容如下。
%example.m
%创建一M文件输入矩阵的示例文件
exm=[456 468 873 2 579 55
21,687,54 488 8 13
65 4656 88 98 021 5
475 68,4596 654 5 987
5488 10 9 6 33 77 ]
在MATLAB命令窗中输入:
>> example;
>> size(exm)
ans =
5 6
说明
l 在M文件中%符号后面的内容只起注释作用,将不被执行。
l 例中的size函数为求矩阵的维数函数,结果表明矩阵为5×6阶的矩阵。
l 在实际应用中,用来输入矩阵的M文件通常是用C语言或其他高级语言生成的已存在的数据文件。
在通常的使用中,上例中的矩阵还不算是“大型”矩阵,此处只是借例说明而已。矩阵的输入方式还有很多种,其他的方法将在后面的章节中逐步介绍。
2.3.2 矩阵的基本数学运算
矩阵的基本数学运算包括矩阵的四则运算、与常数的运算、逆运算、行列式运算、幂运算、指数运算、对数运算和开方运算等。下面将一一进行讨论。
1.矩阵的四则运算
在前面介绍过,MATLAB是以(复)矩阵为基本运算单元的,因此,矩阵的四则运算格式与2.1节中讲的数字的运算是相同的,不过对具体的运算还有一些具体的要求。
(1)矩阵的加和减
矩阵的加减法使用“+”、“-”运算符,格式与数字运算完全相同,但要求加减的两矩阵是同阶的。
【例如】
>> a=[1 2 3;2 3 4;3 4 5 ];
>> b=[1 1 1;2 2 2;3 3 3];
>> c=a+b
c=
2 3 4
4 5 6
6 7 8
(2)矩阵的乘法
矩阵的乘法使用运算符“*”,要求相乘的双方要有相邻公共维,即若A为i×j阶,则B必须为j×k阶时,A和B才可以相乘。
【例如】
>> e=[b,[5 5 5]']
e=
1 1 1 5
2 2 2 5
3 3 3 5
>> f=a*e
f=
14 14 14 30
20 20 20 45
26 26 26 60
(3)矩阵的除法
矩阵的除法可以有两种形式:左除“\”和右除“/”,在传统的MATLAB算法中,右除是要先计算矩阵的逆再做矩阵的乘法,而左除则不需要计算矩阵的逆而直接进行除运算。通常右除要快一点,但左除可以避免被除矩阵的奇异性所带来的麻烦。在MATLAB 6.0中两者的区别不太大。
通常用矩阵的除法来求解方程组的解。对于方程组Ax=b,其中A是一个(n×m)阶的矩阵,则:
当n=m且非奇异时,此方程称为恰定方程;
当n>m时,此方程称为超定方程;
当n<m时,此方程称为欠定方程。
这3种方程都可以用矩阵的除法求解。
【例2.9】 比较用左除和右除法分别求解恰定方程的解。
为了比较这两种方法的区别,先构造一个系数矩阵条件数很大的高阶恰定方程。
>> rand('seed',12);
>> a=rand(100)+1.e8;
>> x=ones(100,1);
>> b=a*x;
其条件数为:
>> cond(a)
ans =
5.0482e+011
可见其条件数是足够大的,病态很严重。首先用右除法计算此方程。
>> tic;x1=b'/a;t1=toc
计算时间为:
t1 =
0.1100
计算解与精确解之间的误差为:
>> er1=norm(x-x1')
er1 =
139.8326
解的相对残差为:
>> re1=norm(a*x1'-b)/norm(b)
re1 =
4.3095e-009
用左除法解方程:
>> tic;x1=a\b;t1=toc
t1 =
0
切换到长型形式格式:
>> tic;x1=a\b;t1=toc
t1 =
0.05000000000000
与真实解之间的误差为:
>> er2=norm(x-x1)
er2 =
5.228819204329127e-005
相对残差为:
>> re1=norm(a*x1-b)/norm(b)
re1 =
4.900067335093966e-016
从此例可以看出,右除比左除计算的速度要慢,且精度也差很多。但这种情况只是在条件数很大时才表现得如此明显,对于一般的矩阵,两者几乎没有差别。
在MATLAB中求解超定方程是采用最小二乘法来求解的,这也是曲线拟合的基本方法。
【例2.10】 用矩阵的除法求解超定方程。看下面的方程。
若考虑线性方程标准型Ax'=β',则A =(x2 ,1)可以看成为矩阵的系数,x =(a,b)'是未知数,y=β。这样建立超定方程如下:
>> x=[19 25 31 38 44]';
>> y=[19 32.3 49 73.3 97.8]';
>> a=[x.^2,ones(5,1)]
a=
361 1
625 1
961 1
1444 1
1936 1
>> b=y;
>> ab=a\b
ab =
0.05003512421916
0.97257865690678
>> x1=19:0.1:44;
>> y1=ab(2)+x1.^2*ab(1);
%或y1=polyvar(ab,x1);
>> plot(x,y,'o');
>> hold;
>> plot(x1,y1)
结果如图2.2。
图2.2 解超定方程拟和
欠定方程的解是不惟一的,在MATLAB中用除法解方程时所得的解是所有解中范数最小的一个。
【例2.11】 对例2.10中的矩阵用除法解一个欠定方程。
>> a=a'
a=
361 625 961 1444 1936
1 1 1 1 1
>> b=[1;1];
>> x=a\b
x=
1.22857142857143
0
0
0
-0.22857142857143
用户若有兴趣可以验证此解的范数约为1.25,任何其他的方程解的范数都比此值大。
2.矩阵与常数间运算
常数与矩阵的运算即是同此矩阵的各元素之间进行运算,如数加是指每个元素都加上此常数,数乘即是每个元素都与此数相乘。需要注意的是,当进行数除时,常数通常只能做除数。
3.矩阵的逆运算
矩阵的逆运算是矩阵运算中很重要的一种运算。它在线性代数及计算方法中都有很多的论述。而在MATLAB中,众多的复杂理论只变成了一个简单的命令inv。
【例2.12】 求下面A矩阵的逆。
解:
>> a=[2 1 -3 -1;3 1 0 7;-1 2 4 -2;1 0 -1 5];
>> inv(a)
ans =
-0.04705882352941 0.58823529411765 -0.27058823529412 -0.94117647058824
0.38823529411765 -0.35294117647059 0.48235294117647 0.76470588235294
-0.22352941176471 0.29411764705882 -0.03529411764706 -0.47058823529412
-0.03529411764706 -0.05882352941176 0.04705882352941 0.29411764705882
4.矩阵的行列式运算
矩阵的行列式的值可由det函数计算得出。
【例2.13】 求上例中的A矩阵及其逆的行列式之积。
>> a1=det(a);
>> a2=det(inv(a));
>> a1*a2
ans =
1
5.矩阵的幂运算
矩阵的幂运算的形式同数字的幂运算的形式相同,即用算符“^”来表示。矩阵的幂运算在计算过程中与矩阵的某种分解有关,计算所得值并非是矩阵每个元素的幂值。这一点是值得读者注意的!
6.矩阵的指数运算
矩阵的指数运算的最常用的命令为expm,其他的命令还有expm1、expm2和expm3。其中expm1是由Pade近似计算矩阵指数,expm2是由Taylor级数计算矩阵指数,expm3是由特征值法计算矩阵指数。而expm函数使用的方法与expm1相同。
【例2.14】 计算矩阵的指数,并比较不同函数的结果。
>> b=magic(3);
>> expm(b)
ans =
1.0e+006 *
1.08975825103465 1.08959533283740 1.08966378860004
1.08962271514245 1.08971717757707 1.08967747975257
1.08963640629498 1.08970486205763 1.08967610411948
>> expm1(b)
ans =
1.0e+006 *
1.08975825103465 1.08959533283740 1.08966378860004
1.08962271514245 1.08971717757707 1.08967747975257
1.08963640629498 1.08970486205763 1.08967610411948
>> expm2(b)
ans =
1.0e+006 *
1.08975825103466 1.08959533283740 1.08966378860005
1.08962271514246 1.08971717757708 1.08967747975257
1.08963640629499 1.08970486205763 1.08967610411949
>> expm3(b)
ans =
1.0e+006 *
1.08975825103468 1.08959533283742 1.08966378860007
1.08962271514248 1.08971717757710 1.08967747975259
1.08963640629501 1.08970486205765 1.08967610411951
说明
expm的计算结果同于expm1。几个函数的计算结果是有差别的,但差别很小。
7.矩阵的对数运算
矩阵的对数运算由函数logm实现。
【例2.15】 对例2.14中的矩阵求其对数。
>> logm(b)
ans =
Columns 1 through 2
1.96203467715006+0.08528517857520i 0.37300776197608+ 0.75895105456357i
0.37300776197608+0.11767613948263i 1.96203467715005+ 1.04719755119660i
0.37300776197608-0.20296131805783i 0.37300776197608- 1.80614860576016i
Column 3
0.37300776197608 - 0.84423623313876i
0.37300776197608 - 1.16487369067923i
1.96203467715005 + 2.00910992381800i
8.矩阵的开方运算
矩阵的开方运算函数为sqrtm。
2.3.3 矩阵的基本函数运算
矩阵的函数运算是矩阵运算中最实用的部分,它主要包括特征值的计算、奇异值的计算条件数、各类范数、矩阵的秩与迹的计算和矩阵的空间运算等。
1.特征值函数
矩阵的特征值可以由两个函数eig和eigs计算得出。其中函数eig可以给出特征值和特征向量的值,而函数eigs则是使用迭代法求解特征值和特征向量的函数,具体调用形式请查看help eigs。这里只用到它的求解特征值的部分。
【例2.16】 计算如下矩阵的特征值和特征向量。
解:
>> A=[7 3 -2;3 4 -1;-2 -1 3];
>> [x,y]=eig(A)
x=
5.773502691896260e-001 9.878369738279814e-002 -8.104988882151846e-001
-5.773502691896265e-001 -6.525207782419939e-001 -4.907986355208505e-001
5.773502691896246e-001 -7.513044756247937e-001 3.197002526943342e-001
y=
2.000000000000000e+000 0 0
0 2.394448724536010e+000 0
0 0 9.605551275463988e+000
说明 其中x为特征向量矩阵,y为特征值矩阵。
2.奇异值函数
同样,矩阵的奇异值函数也有两种形式svd和svds,它们所使用的方法相同,只是计算值略有差别。
3.条件数函数
条件数的值是判断矩阵“病态”程度的量度,因此,它在理论分析中有着重要的应用。
在MATLAB中可由如下3个函数实现条件数的计算。
l cond 计算矩阵的条件数的值。
l condest 计算矩阵的1范数条件数的估计值。
l rcond 计算矩阵的条件数的倒数值。
【例2.17】 计算9阶Hilbert矩阵的各条件数的值。
>> h=hilb(9);
>> cond(h)
ans =
4.931532141187868e+011
>> rcond(h)
ans =
1.237264927935885e-012
>> condest(h)
ans =
1.099650993366049e+012
可见虽然各条件数的计算数值并不相同,但结论是一致的,即此矩阵是严重病态的。
4.特征值的条件数
在求解矩阵的特征值时也会遇到“病态”问题,此时就需要引入特征值的条件数,其具体求解算法可参见参考资料【3】。在MATLAB中有专门用于求解特征值条件数的函数
condeig。 其调用形式为:
condeig(A)或[V,D,s] = condeig(A)其中[V,D,s] = condeig(A)等同于[V,D] = eig(A) 和s = condeig(A)。其中V是特征向量组成的矩阵,其列向量是特征向量,D的对角元素是对应的特征值,s是对应的特征值条件数。
【例2.18】 计算下面矩阵的特征值条件数。
>> a=[-149 -50 -154;537 180 546;-27 -9 -25]
a=
-149 -50 -154
537 180 546
-27 -9 -25
>> [V,D,s] = condeig(a)
V=
0.3162 0.4041 0.1391
-0.9487 -0.9091 -0.9740
0.0000 -0.1010 0.1789
D=
1.0000 0 0
0 2.0000 0
0 0 3.0000
s=
603.6390
395.2366
219.2920
5.范数函数
矩阵(向量)的范数是矩阵(向量)的一种量度,它可分为1范数、2范数、无穷范数和F范数等。其中最常用的是2范数,也即平方和范数。范数的计算可由函数norm和normest实现,其中norm的调用格式为cond(X,P),P的取值可以是1、2、inf或fro;而normest只能计算矩阵2范数的估计值。
6.秩函数
矩阵的秩的求解可由函数rank实现。
【例如】
e=
1 1 1 5
2 2 2 5
3 3 3 5
>> rank(e)
ans =
2
7.迹函数
矩阵所有对角线上元素的和称为矩阵的迹,在MATLAB中可由trace函数计算得出。
【例2.19】 求前面例中由M文件建立的矩阵的迹。
>> example
exm =
456 468 873 2 579 55
21 687 54 488 8 13
65 4656 88 98 21 5
475 68 4596 654 5 987
5488 10 9 6 33 77
>> trace(exm)
ans =
1918
8.零空间函数
求一矩阵的零空间矩阵的函数为null,看下面的例子。
A=
1 2 3
1 2 3
1 2 3
>> null(A)
ans =
-0.1690 -0.9487
0.8452 0.0000
-0.5071 0.3162
>> null(A,'r')
ans =
-2 -3
1 0
0 1
9.正交空间函数
函数orth用来求矩阵的一组正交基。下面求前面的exm矩阵的正交矩阵。
>> orth(exm)
ans =
0.1374 0.1554 -0.0398 0.9192 -0.3322
0.0241 0.1156 0.0910 -0.3530 -0.9237
0.1069 0.6777 0.7060 -0.0379 0.1717
0.3602 0.6180 -0.6758 -0.1584 0.0807
0.9162 -0.3484 0.1869 -0.0619 0.0224
10.伪逆函数
矩阵的伪逆函数在求解系数矩阵为严重“病态”的问题时可避免“伪解”的产生。矩阵的伪逆由函数pinv实现。
【例如】
>> a=magic(4) %生成4阶的魔方阵
a=
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> inv(a) %常规方法求逆
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.567374e-017.
ans =
1.0e+014 *
0.93824992236885 2.81474976710656 -2.81474976710656 -0.93824992236885
2.81474976710656 8.44424930131968 -8.44424930131968 -2.81474976710656
-2.81474976710656 -8.44424930131968 8.44424930131968 2.81474976710656
-0.93824992236885 -2.81474976710656 2.81474976710656 0.93824992236885
>> pinv(a) %伪逆
ans =
0.10110294117647 -0.07389705882353 -0.06139705882353 0.06360294117647
-0.03639705882353 0.03860294117647 0.02610294117647 0.00110294117647
0.01360294117647 -0.01139705882353 -0.02389705882353 0.05110294117647
-0.04889705882353 0.07610294117647 0.08860294117647 -0.08639705882
ans =
0
8
0
0
>> pinv(a)*b
ans =
1.00000000000000
1.00000000000000
1.00000000000000
1.00000000000000
11.通用函数形式
以上所介绍的针对矩阵的函数形式在实际运算中是远远不够的,对常用的其他运算,如三角函数运算和双曲函数运算等,需要一种能够使用这些通用函数的形式。在MATLAB中使用通用函数的格式为funm(A,'funname'),其中A为输入矩阵变量,funname为调用的函数名。如funm(b,'log'),其作用同于logm(b),而funm(b,'sqrt')同于sqrtm(b)。因此,需要对常用的函数有个全面的了解,见表2.6和表2.7。
表2.6 基本函数表
表2.7 特殊函数表
2.3.4 矩阵分解函数
1.特征值分解
矩阵的特征值分解也调用函数eig,为了分解,还要在调用时作一些形式上的变化,如:
l [V,D] = eig(X)此函数得到矩阵X的特征值对角矩阵D和其列为对应特征值的特征向量矩阵V,于是矩阵的特征值分解为X×V = V×D。
l [V,D] = eig(X,'nobalance')此形式为关闭平衡算法的求解方法。平衡算法对于某些问题可以得到更高的准确度。
l [V,D] = eig(A,B)对矩阵A和B作广义特征值分解,即A×V = B×V×D
【例2.20】 矩阵的特征值分解演示。
l 单矩阵的特征值分解
>> a=[-149 -50 -154;537 180 546;-27 -9 -25];
>> [v,d]=eig(a)
v=
0.3162 0.4041 0.1391
-0.9487 -0.9091 -0.9740
0.0000 -0.1010 0.1789
d=
1.0000 0 0
0 2.0000 0
0 0 3.0000
l 双矩阵的广义特征值分解
>> b=[2 10 2;10 5 -8;2 -8 11];
>> [v,d]=eig(a,b)
v=
0.8211 -0.3138 -0.0191
-0.3452 0.9495 -0.9441
-0.4546 -0.0044 0.3290
d=
12.9030 0 0
0 -0.0045 0
0 0 0.0706
2.复数特征值对角阵与实数块特征值对角阵的转化
即使是对于实阵,其特征值也可能出现复数。而在实际使用中,常需要把这些共轭复数特征值转化为实数块。为此,MATLAB提供了两个进行此项转化的函数cdf2rdf和rsf2csf。
[V,D] = cdf2rdf(V,D)将复数对角型转化成实数块对角型。
[U,T] = rsf2csf(U,T)将实数块转化成复数对角型。
【例2.21】 复实特征值对角阵的转化演示。
>> a=[1 -3;2 2/3];
>> [v,d]=eig(a)
v=
-0.7728 + 0.0527i -0.7728 - 0.0527i
0 + 0.6325i 0 - 0.6325i
d=
0.8333 + 2.4438i 0
0 0.8333 - 2.4438i
>> [vs,ds]=cdf2rdf(v,d)
vs =
-0.7728 0.0527
0 0.6325
ds =
0.8333 2.4438
-2.4438 0.8333
>> vs*ds/vs
ans =
1.0000 -3.0000
2.0000 0.6667
由此可见此值等于a矩阵。
2.4.1 基本数组运算
为了对比矩阵运算和数组运算的不同,本节完全按照上一节的顺序,读者可以对照来看,这样更能领会到矩阵运算和数组运算的异同。
1.数组的四则运算
在旧版本的数组四则运算中,加减运算与矩阵运算中的几乎完全相同,同样要求运算双方维数相同,所得结果为对应元素的加减,只不过是数组运算中的运算符多了一个小圆点,即“.+”和“.-”,但在MATLAB的新版本中,这两个命令不再存在,从而使矩阵的加减法和数组的加减法完全统一。而在乘除法中由于数组的对应元素间的运算的特点,使数组运算中的乘除法与矩阵的乘除法有相当大的区别。数组的乘除法是指两同维数组间对应元素之间的乘除法,它们的运算符为“.*”和“./”或“.\”。
【例如】
>> a1=[1 2 3;2 3 4;3 4 5 ];
>> b1=[1 1 1;2 2 2;3 3 3];
>> a1.\b1
ans =
1.0000 0.5000 0.3333
1.0000 0.6667 0.5000
1.0000 0.7500 0.6000
2.数组与常数间运算
数组与常数之间的数加和数减运算还存在,在算符上可以加“.”,也可以不加“.”,但要注意加“.”时要把常数写在前面。
【例如】
>> 3.+b1
ans =
4 4 4
5 5 5
6 6 6
数组与常数之间的数乘运算即为数组元素分别与此常数进行相乘,此时加不加“.”都一样,看下面的例子:
>> 3.*a1
ans =
3 6 9
6 9 12
9 12 15
在矩阵的运算中,与常数之间的除法是有限制的,常数只能做除数。在数组运算中,由于有了“对应关系”的规定,因此与常数之间进行除法运算时形式上没有任何限制。
【例如】
>> b1.\9
ans =
9.0000 9.0000 9.0000
4.5000 4.5000 4.5000
3.0000 3.0000 3.0000
3.数组的
展开阅读全文