Matlab中的向量运算

上传人:平*** 文档编号:15583805 上传时间:2017-11-05 格式:DOC 页数:35 大小:436.76KB
返回 下载 相关 举报
Matlab中的向量运算_第1页
第1页 / 共35页
Matlab中的向量运算_第2页
第2页 / 共35页
Matlab中的向量运算_第3页
第3页 / 共35页
Matlab中的向量运算_第4页
第4页 / 共35页
Matlab中的向量运算_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《Matlab中的向量运算》由会员分享,可在线阅读,更多相关《Matlab中的向量运算(35页珍藏版)》请在金锄头文库上搜索。

1、2利用冒号表达式生成向量冒号表达式的基本形式为 x=x0:step:xn,其中 x0、 step、xn 分别为给定数值,x0 表示向量的首元素数值,xn 表示向量尾元素数值限,step 表示从第二个元素开始,元素数值大小与前一个元素值大小的差值。注意:这里强调 xn 为尾元素数值限,而非尾元素值,当 xn-x0 恰为 step 值的整数倍时,xn 才能成为尾值。若 x00;若 x0xn 则需 step a=1:2:12a=1 3 5 7 9 11 a=1:-2:12a=Empty matrix: 1-by-0 a=12:-2:1a=12 10 8 6 4 2 a=1:2:1a=1 a=1:6a

2、=1 2 3 4 5 63线性等分向量的生成在 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说明 线性等分函数和冒号表达式都可生成等分向量。但前者是设定了向量的维数去生成等间隔向量,而后者是

3、通过设定间隔来生成维数随之确定的等间隔向量。4对数等分向量的生成在自动控制,数字信号处理中常常需要对数刻度坐标,MATLAB 中还提供了对数等分功能函数,具体格式如下:y=logspace(x1,x2)生成 50 维对数等分向量,使得 y(1 )=10 x1,y(50)=10 x2;y=logspace(x1,x2,n)生成 n 维对数等分向量,使得 y(1)=10 x1,y (n )=10 x2;【例如】 a2=logspace(0 ,5,6 )a2 =1 10 100 1000 10000 100000另外,向量还可以从矩阵中提取,还可以把向量看成 1n 阶(行向量)或 n1阶(列向量)的

4、矩阵,以矩阵形式生成。由于在 MATLAB 中矩阵比向量重要得多,此类函数将在下节矩阵中详细介绍,专门对向量运算感兴趣的读者可参考下一节。2.2.2 向量的基本运算1加(减)与数加(减)【例如】 a1-1 %这里的 a1 即上页中生成的 a1ans =0 19.8000 39.6000 59.4000 79.2000 99.00002数乘【例如】 a1*2ans =2.0000 41.6000 81.2000 120.8000 160.4000 200.00002.2.3 点积、叉积及混合积的实现1点积计算在高等数学中,向量的点积是指两个向量在其中某一个向量方向上的投影的乘积,通常可以用来引申

5、定义向量的模。在 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 =262叉积在数学上,向量的叉积表示过两相交向量的交点的垂直于两向量所在平面的向量。

6、在 MATLAB 中,向量的叉积由函数 cross 来实现。cross 向量叉积函数c = cross(a,b)返回向量 a 和 b 的叉积向量。即 C = ab。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=cro

7、ss(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直接输入小矩阵从键盘上直接输入矩阵是最方便、最常用和最好的创建数值矩阵的方法,尤其适合较

8、小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点。输入矩阵时要以“ ”为其标识,即矩阵的元素应在“ ”内部,此时 MATLAB才将其识别为矩阵。矩阵的同行元素之间可由空格或“, ”分隔,行与行之间要用“;”或回车符分隔。 矩阵大小可不预先定义。 矩阵元素可为运算表达式。 若不想获得中间结果,可以“;”结束。 无任何元素的空矩阵亦合法。【例 2.7】 创建一简单数值矩阵。 a=1 2 3;1 1 1;4 5 6a=1 2 31 1 14 5 6【例 2.8】 创建一带有运算表达式的矩阵。 b=sin(pi/3) ,cos(pi/4);log (9) ,tanh(6) ;此时矩阵已经建立并存储

9、在内存中,只是没有显示在屏幕上而已。若用户想查看此矩阵,只需键入矩阵名。2创建 M 文件输入大矩阵M 文件是一种可以在 MATLAB 环境下运行的文本文件。它可以分为命令式文件和函数式文件两种。在此处主要用到的是命令式 M 文件,用它的最简单形式来创建大型矩阵。更加详细的内容将在第 5 章中讨论。当矩阵的规模比较大,直接输入法就显得笨拙,出现差错也不易修改。为了解决此问题,可以利用 M 文件的特点将所要输入的矩阵按格式先写入一文本文件中,并将此文件以 m 为其扩展名,即为 M 文件。在MATLAB 命令窗中输入此 M 文件名,则所要输入的大型矩阵就被输入到内存中。【例如】编制一名为 examp

10、le.m 的 M 文件,内容如下。%example.m%创建一 M 文件输入矩阵的示例文件exm=456 468 873 2 579 5521,687,54 488 8 1365 4656 88 98 021 5475 68,4596 654 5 9875488 10 9 6 33 77 在 MATLAB 命令窗中输入: example; size(exm)ans =5 6说明 在 M 文件中 %符号后面的内容只起注释作用,将不被执行。 例中的 size 函数为求矩阵的维数函数,结果表明矩阵为 56 阶的矩阵。 在实际应用中,用来输入矩阵的 M 文件通常是用 C 语言或其他高级语言生成的已存在

11、的数据文件。在通常的使用中,上例中的矩阵还不算是“大型”矩阵,此处只是借例说明而已。矩阵的输入方式还有很多种,其他的方法将在后面的章节中逐步介绍。2.3.2 矩阵的基本数学运算矩阵的基本数学运算包括矩阵的四则运算、与常数的运算、逆运算、行列式运算、幂运算、指数运算、对数运算和开方运算等。下面将一一进行讨论。1矩阵的四则运算在前面介绍过,MATLAB 是以(复)矩阵为基本运算单元的,因此,矩阵的四则运算格式与 2.1 节中讲的数字的运算是相同的,不过对具体的运算还有一些具体的要求。(1)矩阵的加和减矩阵的加减法使用“+” 、 “-”运算符,格式与数字运算完全相同,但要求加减的两矩阵是同阶的。【例

12、如】 a=1 2 3;2 3 4;3 4 5 ; b=1 1 1;2 2 2;3 3 3; c=a+bc=2 3 44 5 66 7 8(2)矩阵的乘法矩阵的乘法使用运算符“*” ,要求相乘的双方要有相邻公共维,即若 A 为 ij 阶,则 B 必须为 jk 阶时,A 和 B 才可以相乘。【例如】 e=b,5 5 5e=1 1 1 52 2 2 53 3 3 5 f=a*ef=14 14 14 3020 20 20 4526 26 26 60(3)矩阵的除法矩阵的除法可以有两种形式:左除“”和右除“/ ”,在传统的 MATLAB 算法中,右除是要先计算矩阵的逆再做矩阵的乘法,而左除则不需要计算矩

13、阵的逆而直接进行除运算。通常右除要快一点,但左除可以避免被除矩阵的奇异性所带来的麻烦。在MATLAB 6.0 中两者的区别不太大。通常用矩阵的除法来求解方程组的解。对于方程组 Ax=b,其中 A 是一个(n m)阶的矩阵,则:当 n=m 且非奇异时,此方程称为恰定方程;当 nm 时,此方程称为超定方程;当 n 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 =

14、0.1100计算解与精确解之间的误差为: er1=norm(x-x1)er1 =139.8326解的相对残差为: re1=norm(a*x1-b)/norm(b)re1 =4.3095e-009用左除法解方程: tic;x1=ab;t1=toct1 = 0切换到长型形式格式: tic;x1=ab;t1=toct1 =0.05000000000000与真实解之间的误差为: er2=norm(x-x1)er2 =5.228819204329127e-005相对残差为: re1=norm(a*x1-b)/norm(b)re1 =4.900067335093966e-016从此例可以看出,右除比左除计

15、算的速度要慢,且精度也差很多。但这种情况只是在条件数很大时才表现得如此明显,对于一般的矩阵,两者几乎没有差别。在 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 1625 1961 11444 1 1936 1 b=y; ab=abab =0.050035124219160.97257865690678 x1=19:0.1:44; y1=ab(2)+x1.2*ab(1);%或 y1=polyvar(ab,x1); plot(x ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号