




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Basic Matrix Operations一、实验目的1、掌握向量和矩阵的创建方法;2、掌握向量和矩阵元素的索引方法;3、掌握向量和矩阵的基本操作;4、 利用MATLAB编写程序进行矩阵运算。二、基础知识 1、常见数学函数函 数 名数 学 计 算 功 能函 数 名数 学 计 算 功 能Abs(x) 实数的绝对值或复数的幅值 floor(x) 对x朝-方向取整 Acos(x) 反余弦arcsinx gcd(m,n)求正整数m和n的最大公约数 acosh(x) 反双曲余弦arccoshx imag(x) 求复数x的虚部 angle(x) 在四象限内求复数 x 的相角lcm(m,n)求正整数m和n的最小公倍数 asin(x) 反正弦arcsinx log(x) 自然对数(以e为底数) asinh(x) 反双曲正弦arcsinhx log10(x)常用对数(以10为底数) atan(x) 反正切arctanx real(x) 求复数x的实部 atan2(x,y) 在四象限内求反正切 Rem(m,n)求正整数m和n的m/n之余数 atanh(x) 反双曲正切arctanhx round(x)对x四舍五入到最接近的整数 ceil(x) 对x朝+方向取整 sign(x) 符号函数:求出x的符号 conj(x) 求复数x的共轭复数 sin(x) 正弦sinx cos(x) 余弦cosx sinh(x) 反双曲正弦sinhx cosh(x) 双曲余弦coshx sqrt(x) 求实数x的平方根:x exp(x) 指数函数 xetan(x) 正切tanx fix(x) 对x朝原点方向取整 tanh(x) 双曲正切tanhx 2、常量与变量 系统的变量命名规则:变量名区分字母大小写;变量名必须以字母打头,其后可以是任意字母,数字,或下划线的组合。此外,系统内部预先定义了几个有特殊意义和用途的变量,见下表: 特殊的变量、常量取 值ans 用于结果的缺省变量名 pi 圆周率的近似值(3.1416) eps 数学中无穷小(epsilon)的近似值(2.2204e - 016) inf 无穷大,如 1/0 = inf (infinity) NaN 非数,如 0/0 = NaN (Not a Number),inf / inf = NaN i,j 虚数单位:i = j =1 数值型向量(矩阵)的输入 任何矩阵(向量),可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔;行与行之间用分号(;)分隔。所有元素处于一方括号( )内; 例1: Time = 11 12 1 2 3 4 5 6 7 8 9 10 X_Data = 2.32 3.43;4.37 5.98 系统中提供了多个命令用于输入特殊的矩阵: 函数 功 能 函数 功 能 compan 伴随阵 toeplitz Toeplitz矩阵 diag 对角阵 vander Vandermonde矩阵 hadamard Hadamard矩阵 zeros 元素全为0的矩阵 hankel Hankel矩阵 ones 元素全为1的矩阵 invhilb Hilbert矩阵的逆阵 rand 元素服从均匀分布的随机矩阵 kron Kronercker张量积 randn 元素服从正态分布的随机矩阵 magic 魔方矩阵 eye 对角线上元素为1的矩阵 pascal Pascal矩阵 meshgrid 由两个向量生成的矩阵 上面函数的具体用法,可以用帮助命令help得到。如:meshgrid(x,y) 输入 x=1 2 3 4; y=1 0 5; X,Y=meshgrid(x, y),则 X = Y = 1 2 3 4 1 1 1 1 1 2 3 4 0 0 0 0 1 2 3 4 5 5 5 5 目的是将原始数据x,y转化为矩阵数据X,Y。 3、数组(矩阵)的点运算 运算符:+(加)、-(减)、./(右除)、.(左除)、.(乘方), 例3: g = 1 2 3 4;h = 4 3 2 1; s1 = g + h, s2 = g.*h, s3 = g.h, s4 = g.2, s5 = 2.h 4、矩阵的运算 运算符:+(加)、-(减)、*(乘)、/(右除)、(左除)、(乘方)、(转置)等; 常用函数:det(行列式)、inv(逆矩阵)、rank(秩)、eig(特征值、特征向量)、rref(化矩阵为行最简形) 例4: A= 2 0 1; 1 3 2; B= 1 7 1; 4 2 3; 2 0 1; M = A*B % 矩阵A与B按矩阵运算相乘 M = 0 14 -3 17 13 10 det_B = det(B) % 矩阵A的行列式 det_B = 20 rank_A = rank(A) % 矩阵A的秩 rank_A = 2 inv_B = inv(B) % 矩阵B的逆矩阵 inv_B = 0.1000 -0.3500 1.1500 0.1000 0.1500 -0.3500 -0.2000 0.7000 -1.3000 V,D = eig(B) % 矩阵B的特征值矩阵V与特征向量构成的矩阵D = 7.2680 0 0 0 -1.6340 + 0.2861i 0 0 0 -1.6340 - 0.2861i X = A/B % A/B = A*B-1,即XB=A,求X 0.4000 -1.4000 3.6000 0.0000 1.5000 -2.5000 Y = BA % BA = B-1*A,即BY=A,求Y 三、实验内容1、练习数据和符号的输入方式,将前面的命令在命令窗口中执行通过。 2、键入常数矩阵输入命令: a = 1 2 3 与 a = 1;2;3 记录结果,比较显示结果有何不同;b = 1 2 5 与 b = 1 2 5; 记录结果,比较显示结果有何不同; a a b b 记录结果,比较变量加“”后的区别; c = a * b 1 2 5 2 4 10 3 6 15 c = a* b 记录显示结果与出错原因; a = 1 2 3; 4 5 6; 7 8 0,求a2 a0.5 。30 36 15 66 81 42 39 54 69 0.5977 + 0.7678i 0.7519 + 0.0979i 0.5200 - 0.4680i 1.4102 + 0.1013i 1.7741 + 0.6326i 1.2271 - 0.7467i 1.2757 - 1.0289i 1.6049 - 1.0272i 1.1100 + 1.6175i3、使用冒号选出指定元素:已知 A=1 2 3;4 5 6;7 8 9,求 A 中第 3 列前 2 个元素,A 中所有列第 2,3 行的元素。ns = 3 6ns = 4 5 6 7 8 04、输入 A=7 1 5; 2 5 6; 3 1 5,B=1 1 1; 2 2 2; 3 3 3,在命令窗口中执行下列表达式,掌握其含义: A(2,3) ans = 6 A(:,2) A(3,:) A(:,1:2:3) ans = 7 5 2 6 3 5 A(:,3).*B(:,2) ns = 5 12 15 A(:,3)*B(2,:) A*B A.*B A2 A.2 B/A B./A 5、建立 M 文件,求的逆矩阵。nv_M = 1.0000 3.0000 -2.0000 -1.5000 -3.0000 2.5000 1.0000 1.0000 -1.00006、 设,,建立 M 文件,求矩阵 X ,使满足:AXB = C 。四,详细设计(1)存储要点positioncol=positioncol-1+numcol-1;三元组表(row,col,v)稀疏矩阵(行数m,列数n,非零元素个数t),三元组,.,三元组)rowcolvA-data00481101212332124306max-1(2)乘法运算要点已知稀疏矩阵A(m1 n1)和B(m2 n2),求乘积C(m1 n2)。稀疏矩阵A、B、C及它们对应的三元组表A.data、B.data、C.data如图6所示。由矩阵乘法规则知:C(i,j)=A(i,1)B(1,j)+A(i,2)B(2,j)+A(i,n)B(n,j)=这就是说只有A(i,k)与B(k,p)(即A元素的列与B元素的行相等的两项)才有相乘的机会,且当两项都不为零时,乘积中的这一项才不为零。矩阵用二维数组表示时,a11只有可能和B中第1行的非零元素相乘,a12只有可能和B中第2行的非零元素相乘,而同一行的非零元是相邻存放的,所以求c11和c12同时进行:求a11*b11累加到c11,求a11*b12累加到c12,再求a12*b21累加到c11,再求a12*b22累加到c22.,当然只有aik和bkj(列号与行号相等)且均不为零(三元组存在)时才相乘,并且累加到cij当中去。(3)稀疏矩阵的快速转置要点:矩阵A中三元组的存放顺序是先行后列,对同一行来说,必定先遇到列号小的元素,这样只需扫描一遍A.data 。所以需引入两个向量来实现 :numn+1和position n+1,numcol表示矩阵A中第col列的非零元素的个数(为了方便均从1单元用起),position col初始值表示矩阵A中的第col列的第一个非零元素在B.data中的位置。于是position的初始值为:position 1=1;position col= position col-1+numcol-1; 2coln依次扫描A.data,当扫描到一个col列元素时,直接将其存放在B.data的position col位置上,position col加1,position col中始终是下一个col列元素在B.data中的位置。A-row00112334(4)逆矩阵判断矩阵是否为方阵逆矩阵的算法: 求行列式的值求矩阵的伴随矩阵用伴随矩阵除以行列式 求逆矩阵的流程:五、源程序(测试结果)#include#include#include#includeusing namespace std;#define max 100#define datatype int typedef structint row,col;/行,列datatype v;/非0数值Node;typedef structNode datamax;/稀疏矩阵int m,n,t;/m行,n列,t非0数个数Matrix; /*求逆矩阵存储*/typedef struct /存储结构int m, n; /行、列数double *p; /矩阵基址nMatrix;void In(nMatrix a) /求逆输入 couta.ma.n;int m = a.m, n = a.n;int i, j;double *p = a.p = new doublem * n; /p是行指针cout请按行优先输入矩阵a的全部数值:n;for (i = 0; i m; p += n, i+)for (j = 0; j pj; /即a.pi*n+jvoid Out(nMatrix a) /求逆输出 int m = a.m, n = a.n;int i, j;double *p = a.p;for (i = 0; i m; p += n, i+)for (j = 0; j n; j+)coutpjt;cout(istream& input,Matrix &A)int i;coutA.m;coutA.n;coutA.t;for(i=1;i=A.t;i+)cout请输入行数,列数,非0值:(iA.datai.rowA.datai.colA.datai.v;return input;ostream& operator (ostream& output,Matrix &A)int i,j,t=1,k=0;for(i=1;i=A.m;i+)for(j=1;j=A.n;j+)if(A.datat.row=i&A.datat.col=j)outputA.datat.vt;t+;else outputkt;coutn;return output;Matrix operator +(Matrix A,Matrix B)/加法int i,j,k;Matrix C;if(A.m!=B.m|A.n!=B.n) cout这两个矩阵不能相加endl;exit(0);C.m=A.m;C.n=A.n;C.t=0;if(A.t=0&B.t=0) exit(0);i=j=k=1;while(i=A.t&j=B.t)if(A.datai.rowB.dataj.row)C.datak=B.dataj;j+;k+;elseif(A.datai.colB.dataj.col)C.datak=B.dataj;j+;k+;elseif(A.datai.v+B.dataj.v!=0)C.datak.row=A.datai.row;C.datak.col=A.datai.col;C.datak.v=A.datai.v+B.dataj.v;k+;i+;j+; while(iA.t)C.datak=A.datai;i+;k+;while(jB.t)C.datak=B.dataj;j+;k+;C.t=k; return C;Matrix operator -(Matrix A,Matrix B)Matrix C;int i,j,k; if(A.m!=B.m|A.n!=B.n) cout这两个矩阵不能相减;exit(0); C.m=A.m;C.n=A.n; C.t=0; if(A.t=0&B.t=0) exit(0); i=j=k=1; while(i=A.t&j=B.t) if(A.datai.rowB.dataj.row) C.datak=B.dataj; j+;k+; else if(A.datai.colB.dataj.col) C.datak=B.dataj; j+;k+; else if(A.datai.v-B.dataj.v!=0) C.datak.row=A.datai.row; C.datak.col=A.datai.col; C.datak.v=A.datai.v-B.dataj.v; k+; i+;j+; while(iA.t) C.datak=A.datai; i+;k+; while(jB.t) C.datak=B.dataj; j+;k+; C.t=k; return C;Matrix operator *(Matrix A,Matrix B)Matrix C;int k,p,crow,brow,q,ccol;int nummax,posmax,ctempmax;if (A.n=B.m)for(k=1;k=B.m;k+)numk=0;for(k=1;k=B.t;k+)numB.datak.row+;pos1=1;for(k=2;k=B.t;k+)posk=posk-1+numk-1;pos1+B.t=posB.t+1;C.m=A.m; C.n=B.n; C.t=0; p=1;while(p=A.t)crow=A.datap.row;for(k=1;k=C.n;k+)ctempk=0;while (p=A.t&A.datap.row=crow)brow=A.datap.col;for(q=posbrow;q=posbrow+1-1;q+)ccol=B.dataq.col;ctempccol=ctempccol+A.datap.v*B.dataq.v;p=p+1;for(ccol=1;ccol=B.n;ccol+)if(ctempccol!=0)C.t=C.t+1;C.dataC.t.row=crow;C.dataC.t.col=ccol;C.dataC.t.v=ctempccol;else cout这两个矩阵不能相乘;return C;Matrix operator (Matrix A)Matrix B;int col,i,p,q;int nummax,positionmax;B.t=A.t;B.m=A.n; B.n=A.m;if(B.t)for(col=1;col=A.n;col+)numcol=0;for(i=1;i=A.t;i+)numA.datai.col+;position1=1;for(col=2;col=A.n;col+)positioncol=positioncol-1+numcol-1;for(p=1;p=A.t;p+)col=A.datap.col;q=positioncol;B.dataq.row=A.datap.col;B.dataq.col=A.datap.row;B.dataq.v=A.datap.v;positioncol+;return B;nMatrix Trs(nMatrix a) /求逆矩阵的先转置nMatrix trs;trs.m = a.n;trs.n = a.m;trs.p = new doublea.m * a.n;for (int i = 0; i a.m; i+)for (int j = 0; j a.n; j+)trs.pj * a.m + i = a.pi * a.n + j;return trs;nMatrix Adjunct(nMatrix a, int indexm, int indexn) /求第indexm行indexn列元素的代数余子式nMatrix adj;adj.m=a.m - 1;adj.n=a.n - 1;adj.p = new double(a.n - 1) * (a.n - 1);for (int i = 0; i indexm; i+)for (int j = 0; j indexn; j+)adj.pi * (a.n - 1) + j = a.pi * a.n + j;for (int k = indexn + 1; k a.n; k+)adj.pi *(a.n - 1) + k -1 = a.pi * a.n + k;for (int m = indexm + 1; m a.n; m+)for (int j = 0; j a.n - 1; j+)adj.p(m - 1) * (a.n - 1) + j = a.pm * a.n + j;for (int k = indexn + 1; k a.n; k+)adj.p(m - 1) * (a.n - 1) + k - 1 = a.pm * a.n + k;return adj;double Det(nMatrix a) /递归求行列式double det = 0;if (a.m != a.n)cout不是方阵,没有行列式!endl;cout求行列式退出endl;if (a.n = 1)det = a.p0;return det;elsefor (int i = 0; i a.n; i+)if (i % 2 = 0)det += a.pi * a.n * Det(Adjunct(a, i, 0);else det -= a.p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025农业用地流转合同范本(乙方与村委会签订)示例
- 2025年综合消防维护保养合同终稿
- 2025撤销购房合同模板
- 2025商务合同范本短期劳动合同书
- 小学三年级演讲稿15篇
- 小学二年级音乐说课稿
- 城市智慧交通与BIM技术的结合
- 高级钢琴调律师考试试题及答案
- 林蛙养殖合同转让协议书
- 寻找小绿人试题及答案
- smt首件检验记录表
- QJLYJ7110204A-2022年车身油漆涂层技术要求
- 建档立卡贫困学生证明(模板)
- 一年级下册音乐教案 (简谱) (演唱)同坐小竹排(7) 湘艺版
- 砂石料加工厂劳务外包服务采购项目
- 小学教育中数学与语文教学的融合实施
- Axsym(雅培化学发光仪)简易维修手册第10单元 故障操作
- 临床常见检验指标
- 面试成绩通知单(上下联式)
- 2009吉林省职称评审表(共4页)
- 流动式式起重机司机实操考核评分表
评论
0/150
提交评论