您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > MATLAB基本矩阵运算
BasicMatrixOperations一、实验目的1、掌握向量和矩阵的创建方法;2、掌握向量和矩阵元素的索引方法;3、掌握向量和矩阵的基本操作;4、利用MATLAB编写程序进行矩阵运算。二、基础知识1、常见数学函数函数名数学计算功能函数名数学计算功能Abs(x)实数的绝对值或复数的幅值floor(x)对x朝-∞方向取整Acos(x)反余弦arcsinxgcd(m,n)求正整数m和n的最大公约数acosh(x)反双曲余弦arccoshximag(x)求复数x的虚部angle(x)在四象限内求复数x的相角lcm(m,n)求正整数m和n的最小公倍数asin(x)反正弦arcsinxlog(x)自然对数(以e为底数)asinh(x)反双曲正弦arcsinhxlog10(x)常用对数(以10为底数)atan(x)反正切arctanxreal(x)求复数x的实部atan2(x,y)在四象限内求反正切Rem(m,n)求正整数m和n的m/n之余数atanh(x)反双曲正切arctanhxround(x)对x四舍五入到最接近的整数ceil(x)对x朝+∞方向取整sign(x)符号函数:求出x的符号conj(x)求复数x的共轭复数sin(x)正弦sinxcos(x)余弦cosxsinh(x)反双曲正弦sinhxcosh(x)双曲余弦coshxsqrt(x)求实数x的平方根:xexp(x)指数函数xetan(x)正切tanxfix(x)对x朝原点方向取整tanh(x)双曲正切tanhx2、常量与变量系统的变量命名规则:变量名区分字母大小写;变量名必须以字母打头,其后可以是任意字母,数字,或下划线的组合。此外,系统内部预先定义了几个有特殊意义和用途的变量,见下表:特殊的变量、常量取值ans用于结果的缺省变量名pi圆周率π的近似值(3.1416)eps数学中无穷小(epsilon)的近似值(2.2204e-016)inf无穷大,如1/0=inf(infinity)NaN非数,如0/0=NaN(NotaNumber),inf/inf=NaNi,j虚数单位:i=j=1−数值型向量(矩阵)的输入①任何矩阵(向量),可以直接按行方式……输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔;行与行之间用分号(;)分隔。所有元素处于一方括号([])内;例1:Time=[111212345678910]X_Data=[2.323.43;4.375.98]②系统中提供了多个命令用于输入特殊的矩阵:函数功能函数功能compan伴随阵toeplitzToeplitz矩阵diag对角阵vanderVandermonde矩阵hadamardHadamard矩阵zeros元素全为0的矩阵hankelHankel矩阵ones元素全为1的矩阵invhilbHilbert矩阵的逆阵rand元素服从均匀分布的随机矩阵kronKronercker张量积randn元素服从正态分布的随机矩阵magic魔方矩阵eye对角线上元素为1的矩阵pascalPascal矩阵meshgrid由两个向量生成的矩阵上面函数的具体用法,可以用帮助命令help得到。如:meshgrid(x,y)输入x=[1234];y=[105];[X,Y]=meshgrid(x,y),则X=Y=123411111234000012345555目的是将原始数据x,y转化为矩阵数据X,Y。3、数组(矩阵)的点运算运算符:+(加)、-(减)、./(右除)、.\(左除)、.^(乘方),例3:g=[1234];h=[4321];s1=g+h,s2=g.*h,s3=g.^h,s4=g.^2,s5=2.^h4、矩阵的运算运算符:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)、’(转置)等;常用函数:det(行列式)、inv(逆矩阵)、rank(秩)、eig(特征值、特征向量)、rref(化矩阵为行最简形)例4:A=[20–1;132];B=[17–1;423;201];M=A*B%矩阵A与B按矩阵运算相乘M=014-3171310det_B=det(B)%矩阵A的行列式det_B=20rank_A=rank(A)%矩阵A的秩rank_A=2inv_B=inv(B)%矩阵B的逆矩阵inv_B=0.1000-0.35001.15000.10000.1500-0.3500-0.20000.7000-1.3000[V,D]=eig(B)%矩阵B的特征值矩阵V与特征向量构成的矩阵D=7.2680000-1.6340+0.2861i000-1.6340-0.2861iX=A/B%A/B=A*B-1,即XB=A,求X0.4000-1.40003.60000.00001.5000-2.5000Y=B\A%B\A=B-1*A,即BY=A,求Y三、实验内容1、练习数据和符号的输入方式,将前面的命令在命令窗口中执行通过。2、键入常数矩阵输入命令:a=[123]与a=[1;2;3]记录结果,比较显示结果有何不同;b=[125]与b=[125];记录结果,比较显示结果有何不同;aa’bb’记录结果,比较变量加“’”后的区别;c=a*b12524103615c=a*b’记录显示结果与出错原因;a=[123;456;780],求a^2a^0.5。3036156681423954690.5977+0.7678i0.7519+0.0979i0.5200-0.4680i1.4102+0.1013i1.7741+0.6326i1.2271-0.7467i1.2757-1.0289i1.6049-1.0272i1.1100+1.6175i3、使用冒号选出指定元素:已知A=[123;456;789],求A中第3列前2个元素,A中所有列第2,3行的元素。ns=36ns=4567804、输入A=[715;256;315],B=[111;222;333],在命令窗口中执行下列表达式,掌握其含义:A(2,3)ans=6A(:,2)A(3,:)A(:,1:2:3)ans=752635A(:,3).*B(:,2)ns=51215A(:,3)*B(2,:)A*BA.*BA^2A.^2B/AB./A5、建立M文件,求123221343A的逆矩阵。nv_M=1.00003.0000-2.0000-1.5000-3.00002.50001.00001.0000-1.00006、设123221343A,2153B,132031C,建立M文件,求矩阵X,使满足:AXB=C。四,详细设计(1)存储要点position[col]=position[col-1]+num[col-1];三元组表(row,col,v)稀疏矩阵((行数m,列数n,非零元素个数t),三元组,...,三元组)rowcolvA-data[0]0481101212332124306………max-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。所以需引入两个向量来实现:num[n+1]和position[n+1],num[col]表示矩阵A中第col列的非零元素的个数(为了方便均从1单元用起),position[col]初始值表示矩阵A中的第col列的第一个非零元素在B.data中的位置。于是position的初始值为:position[1]=1;position[col]=position[col-1]+num[col-1];2≤col≤n依次扫描A.data,当扫描到一个col列元素时,直接将其存放在B.data的position[col]位置上,position[col]加1,position[col]中始终是下一个col列元素在B.data中的位置。A-row[0]0112334(4)逆矩阵⒈判断矩阵是否为方阵⒉逆矩阵的算法:①求行列式的值②求矩阵的伴随矩阵③用伴随矩阵除以行列式⒊求逆矩阵的流程:五、源程序(测试结果)#includeiostream#includestring#includeiomanip#includecmathusingnamespacestd;#definemax100#definedatatypeinttypedefstruct{introw,col;//行,列datatypev;//非0数值}Node;typedefstruct{Nodedata[max];//稀疏矩阵intm,n,t;//m行,n列,t非0数个数}Matrix;/*求逆矩阵存储*/typedefstruct{//存储结构intm,n;//行、列数double*p;//矩阵基址}nMatrix;voidIn(nMatrixa){//求逆输入cout请将矩阵a的行、列数再次输入:;cina.ma.n;intm=a.m,n=a.n;inti,j;double*p=a.p=newdouble[m*n];//p是行指针cout请按行优先输入矩阵a的全部数值:\n;for(i=0;im;p+=n,i++){for(j=0;jn;j++)cinp[j];//即a.p[i*n+j]}}voidOut(nMatrixa){//求逆输出intm=a.m,n=a.n;inti,j;double*p=a.p;for(i=0;im;p+=n,i++){for(j=0;jn;j++)coutp[j]'\t';coutendl;}}istream&operator(istream&input,Matrix&A){inti;cout请输入行数:;inputA.m;cout请输入列数:;inputA.n;cout请输入非0值个数:;inputA.t;for(i=1;i=A.t;i++){cout请输入行数,列数,非0值:(i)\n;inputA.data[i].rowA.data[i].colA.data[i].v;}returninput;}ostream&operator(ostream&output,Matrix&A){inti,j,t=1,k=0;for(i=1;i=A.m;i++){for(j=1;j=A.n;j++){if(A.data[t].row==i&&A.data[t].col==j){outputA.data[t].v'\t';t++;}elseoutputk'\t';}cout\n;}returnoutput;}Matrixoperator+(MatrixA,MatrixB){//加法inti,j,k;MatrixC;if(A.m!=B.m||A.n!=B.n){cout这两个矩阵不能相加endl;exit(0);}C.
本文标题:MATLAB基本矩阵运算
链接地址:https://www.777doc.com/doc-4607993 .html