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.点积计算
在高等数学中,向量的点积是指两个向量在其中某一个向量方向上的投影的乘积,通常可以用来引申定义向量的模。
linspace函数调用的格式为在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才将其识别为矩阵。矩阵的同行元素之间可由空格或“,”分隔,行与行之间要用“;”或回车符分隔。
● 矩阵大小可不预先定义。
● 矩阵元素可为运算表达式。
● 若不想获得中间结果,可以“;”结束。
● 无任何元素的空矩阵亦合法。
【例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
说明
● 在M文件中%符号后面的内容只起注释作用,将不被执行。
● 例中的size函数为求矩阵的维数函数,结果表明矩阵为5×6阶的矩阵。
● 在实际应用中,用来输入矩阵的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】 比较用左除和右除法分别求解恰定方程的解。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论