两个矩阵相乘的逆矩阵(文档篇).doc

上传人:rrsccc 文档编号:8823204 上传时间:2021-01-18 格式:DOC 页数:46 大小:45.50KB
返回 下载 相关 举报
两个矩阵相乘的逆矩阵(文档篇).doc_第1页
第1页 / 共46页
两个矩阵相乘的逆矩阵(文档篇).doc_第2页
第2页 / 共46页
两个矩阵相乘的逆矩阵(文档篇).doc_第3页
第3页 / 共46页
两个矩阵相乘的逆矩阵(文档篇).doc_第4页
第4页 / 共46页
两个矩阵相乘的逆矩阵(文档篇).doc_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《两个矩阵相乘的逆矩阵(文档篇).doc》由会员分享,可在线阅读,更多相关《两个矩阵相乘的逆矩阵(文档篇).doc(46页珍藏版)》请在三一文库上搜索。

1、两个矩阵相乘的逆矩阵(文档6篇) 以下是网友分享的关于两个矩阵相乘的逆矩阵的资料6篇,希望对您有所帮助,就爱阅读感谢您的支持。两个矩阵相乘的源程序第一篇两个矩阵相乘的源程序 方案一:/*A=B*C*/#include#include#define X 3#define Y 3 int aXY;int bXY;int cXY; void matrix(int bX,int cY);main()int i,j,temp;clrscr();printf(for(i=0;ifor(j=0;jscanf(bj=temp;printf(for(i=0;ifor(j=0;jscanf(cj=temp;mat

2、rix(b,c);printf(for(i=0;iprintf(for(j=0;jprintf(printf(printf(for(i=0;iprintf(for(j=0;jprintf(printf(printf(for(i=0;iprintf(for(j=0;jprintf(getch();return 0;/*/ void matrix(int bX,int cY)int i,j,k,temp;for(i=0;ifor(j=0;jfor(k=0;kaj+=bk*ckj; 方案二:/*Matrix control head file*/ #ifndef NULL#define NULL 0

3、;#endif#define TYPE long class Matrixprivate:TYPE *data;int MATRIX_H_SIZE;int MATRIX_V_SIZE;bool IS_EMPTY; public:Matrix()IS_EMPTY=true; Matrix(int h_dim_size,int v_dim_size)data=new TYPEh_dim_size*v_dim_size;MATRIX_H_SIZE=h_dim_size;MATRIX_V_SIZE=v_dim_size;IS_EMPTY=false; Matrix(Matrix *matrix)if

4、(!matrix-IsEmpty()data=new TYPEmatrix-GetDimX()*matrix-GetDimY();MATRIX_H_SIZE=matrix-GetDimX();MATRIX_V_SIZE=matrix-GetDimY();IS_EMPTY=false;TYPE t;for(int i=0;ifor(int j=0;jmatrix-GetData(i,j,&t);SetData(i,j,t);elseIS_EMPTY=true; Matrix()delete data; bool MatrixReload(int h_dim_size,int v_dim_size

5、)if (!IS_EMPTY) return false;data=new TYPEh_dim_size*v_dim_size;MATRIX_H_SIZE=h_dim_size;MATRIX_V_SIZE=v_dim_size;IS_EMPTY=false;return true; bool IsEmpty()return IS_EMPTY; int GetDimX()return MATRIX_H_SIZE; int GetDimY()return MATRIX_V_SIZE; bool MatrixClear()if (IS_EMPTY) return false;delete data;

6、IS_EMPTY=true;return true; bool SetData(int h_index,int v_index,TYPE data)if (IS_EMPTY) return false;this-datah_index*MATRIX_V_SIZE+v_index=data;return true; bool GetData(int h_index,int v_index,TYPE *return_data) if (IS_EMPTY) return false;if (h_index=MATRIX_H_SIZE | v_index=MATRIX_V_SIZE) return f

7、alse; *return_data=datah_index*MATRIX_V_SIZE+v_index; return true; /矩阵操作TYPE SumHXV(int m,int n,Matrix *matrix) /m行x n列TYPE sum(0);TYPE temp2;for(int i=0;iGetData(m,i,&temp0);matrix-GetData(i,n,&temp1);sum+=temp0*temp1; return sum; Matrix * HSwap(int m,int n)/行交换if (IS_EMPTY) return NULL;Matrix *tem

8、p=new Matrix(this);TYPE t2;for(int i=0;itemp-GetData(m-1,i,&t0);temp-GetData(n-1,i,&t1);temp-SetData(m-1,i,t1);temp-SetData(n-1,i,t0);return temp; Matrix * VSwap(int m,int n)/行交换if (IS_EMPTY) return NULL;Matrix *temp=new Matrix(this);TYPE t2;for(int i=0;itemp-GetData(i,m-1,&t0);temp-GetData(i,n-1,&t

9、1);temp-SetData(i,m-1,t1);temp-SetData(i,n-1,t0);return temp; Matrix * AddMatrix(Matrix *matrix)if (IS_EMPTY) return NULL;if (matrix-IsEmpty() return this;if (MATRIX_H_SIZE!=matrix-GetDimX() |MATRIX_V_SIZE!=matrix-GetDimY()return this; Matrix *temp=new Matrix(MATRIX_H_SIZE,MATRIX_V_SIZE); TYPE t3;fo

10、r (int i=0;ifor (int j=0;j GetData(i,j,&t0);matrix-GetData(i,j,&t1);t2=t0+t1;temp-SetData(i,j,t2);return temp; Matrix * RightXMatrix(Matrix *matrix) /矩阵右乘if (IS_EMPTY) return NULL;if (matrix-IsEmpty() return this;if (MATRIX_V_SIZE!=matrix-GetDimX()return this; Matrix *temp=new Matrix(MATRIX_H_SIZE,m

11、atrix-GetDimY(); for (int i=0;ifor (int j=0;jGetDimY();j+)temp-SetData(i,j,SumHXV(i,j,matrix); return temp; Matrix * LeftXMatrix(Matrix *matrix) /矩阵左乘if (IS_EMPTY) return NULL;if (matrix-IsEmpty() return this;if (MATRIX_H_SIZE!=matrix-GetDimY()return this; Matrix *temp=new Matrix(matrix-GetDimX(),MA

12、TRIX_V_SIZE); for (int i=0;iGetDimX();i+)for (int j=0;jtemp-SetData(i,j,matrix-SumHXV(i,j,this);return temp; Matrix * NumXMatrix(TYPE num)if (IS_EMPTY) return NULL;Matrix *temp=new Matrix(MATRIX_H_SIZE,MATRIX_V_SIZE); TYPE t;for (int i=0;ifor (int j=0;jGetData(i,j,&t);temp-SetData(i,j,t*num);return

13、temp; Matrix * ReverseMatrix() /矩阵转置if (IS_EMPTY) return this;Matrix *temp=new Matrix(MATRIX_V_SIZE,MATRIX_H_SIZE); TYPE t;for (int i=0;ifor (int j=0;jGetData(i,j,&t);temp-SetData(j,i,t);return temp; Matrix * GetEMatrix(int n) /得到nXn的单位矩阵if(nMatrix *temp=new Matrix(n,n);for (int i=0;ifor (int j=0;j(

14、i=j)?temp-SetData(i,j,1):temp-SetData(i,j,0); return temp; Matrix * MatrixPow(int times) /矩阵幂运算if (IS_EMPTY)return NULL;Matrix *temp=new Matrix(this);for(int i=1;itemp=temp-LeftXMatrix(this);return temp;矩阵相乘第二篇矩阵乘法运算两个矩阵必须满足:A 矩阵的行数 = B 矩阵的列数,才可以相乘。 即: A m n B n p =C m p 。14A =23B =32、例:已知12320-1,则:

15、11+4212+4013+4(-1)92-1=843()A B =21+3222+3023+3-131+2232+2033+2(-1)76714+23+32141611+22+33B A =21+02+(-1)324+03+(-1)2-16 注意:AB BA !a 10A =I =c 01,前面我们提到单位矩阵 设 b d ,则AI =A =IA 。 矩阵相乘第三篇矩阵相乘 #includeint main()double A100100,B100100,C100100;int m,n,p,i,j,k,l,a,b,c;scanf (“%d %d %d”,&m,&n,&p);/输入行数和列数fo

16、r (i=0; ifor (j=0; jscanf (“%lf”,&Aij);/输入第一个矩阵printf(“n”); for (a=0; afor (b=0; bscanf (“%lf”,&Bab);/输入第二个矩阵printf(“n”);for (k=0; kfor (l=0; lint sum = 0;for (c=0; csum +=akc*bcl;/计算Ckl = sum;for (k=0; kfor (l=0; lprintf (“%.0f “,Ckl);/输出printf (“n”);return 0; 杨辉三角#includeint main()int a100100; int

17、 n,i,j; printf(“insert n:”); scanf(“%d”,&n); for ( i=0;i 两个不超过200位整数的积(百度而来、我也看不懂)#includechar strnum1210,stenum2210;int num1210,num2210,ans40000;int main()gets(strnum1);gets(strnum2);int m=0,n=0;/*将字符串转化为数字*/while(strnum1m)num1m=strnum1m-0; m+;while(strnum2n)num2n=strnum2n-0; n+;int up;/进位int temp;

18、/临时变量int k,p,i,j;/k,p记录计算位置 for(i=m-1,k=0;i=0;i-,k+)temp=0,up=0;for(j=n-1,p=0;j=0;j-,p+) temp=num1i*num2j+up+ansk+p; ansk+p=temp%10;up=temp/10;if(up0)ansk+p=up; int len=m*n;while(anslen-=0);/逆序输出 for(int i=len+1;i=0;i-)printf(“%d”, ansi);return 0; Ps:敲得好辛苦,只求别出错、 矩阵相乘第四篇using System;public class Mat

19、rixMultiplypublic static void Main()int a,b,c,d;Console.WriteLine (“该程序将求出两个矩阵的积:”);Console.WriteLine (“请指定矩阵A的行数:”);a=int.Parse (Console.ReadLine ();Console.WriteLine (“请指定矩阵A的列数:”);b=int.Parse (Console.ReadLine ();int, MatrixA=new int a,b;for(int i=0;ifor(int j=0;jConsole.WriteLine (“请输入矩阵A第0行第1列的

20、值:”,i+1,j+1);MatrixAi,j=int.Parse (Console.ReadLine ();Console.WriteLine (“矩阵A输入完毕.”);Console.WriteLine (“请指定矩阵B的行数:”);c=int.Parse (Console.ReadLine ();Console.WriteLine (“请指定矩阵B的列数:”);d=int.Parse (Console.ReadLine ();int, MatrixB=new int c,d;for(int i=0;ifor(int j=0;jConsole.WriteLine (“请输入矩阵A第0行第1

21、列的值:”,i+1,j+1);MatrixBi,j=int.Parse (Console.ReadLine ();Console.WriteLine (“矩阵B输入完毕.”);Console.WriteLine (“矩阵A为:”);outputMatrix(MatrixA,a,b);Console.WriteLine (“矩阵B为:”);outputMatrix(MatrixB,c,d);if(b!=c)Console.WriteLine (“矩阵A的列数与矩阵B的行数不相等,无法进行乘积运算!”);return;elseConsole.WriteLine (“矩阵A与矩阵B的乘积为:”);i

22、nt, MatrixC=new int a,d;for(int i = 0; i for(int j = 0; j MatrixCi,j = 0;for(int k = 0; k MatrixCi,j += MatrixAi,k * MatrixBk,j;outputMatrix(MatrixC,a,d);private static void outputMatrix(int, MatrixX, int rowCount, int columnCount)for(int i = 0; i for(int j = 0; j Console.Write(MatrixXi,j + “t”);Con

23、sole.WriteLine();矩阵相乘第五篇 算法设计与分析综合性实验实验报告 题目: 矩阵乘法姓名: 王洋洋班级: 软件1302班学号: 1*6指导教师: 靳小波完成时间:2014-12-22一、 实验题目矩阵乘法二、 实验目的1. 掌握二维数组的使用方法。2. 掌握文件的读入和输出。3. 掌握复杂循环的设计方法。三、 实验要求任给两个矩阵A 和B, 计算它们的乘法。具体要求:每个矩阵输入的格式如下:第一行的两个数字分别表示行n 和列m ,随后紧跟包含m 列的n 行来表示矩阵。将两个输入矩阵保存在input.txt 文件中。举例如下:2 31 2 34 5 67 8 93 1111将两个

24、矩阵的运算结果保存在文件output.txt 中。四、 程序流程图 五、 程序代码#include #include int A1010;int B1010;int C1010;int ar=0,ac=0,br=0,bc=0,cr=0,cc=0;int i=0,j=0,k=0;int main()printf(“Enter Details about the first matrix :n”); printf(“How many rows :”);scanf(“%d”,&ar);printf(“How many cols :”);scanf(“%d”,&ac);for(i=0;ifor(j=0

25、;jprintf(“Enter element for row %d col %d :”,i+1,j+1); scanf(“%d”,&Aij);printf(“Enter Details about the second matrix :n”); printf(“How many rows :”);scanf(“%d”,&br);printf(“How many cols :”);scanf(“%d”,&bc);for(i=0;ifor(j=0;jprintf(“Enter element for row %d col %d :”,i+1,j+1); scanf(“%d”,&Bij);if(a

26、c!=br)printf(“Dimensions dont match.n”);elsecr = ar;cc = bc;/loop controlfor( i = 0; i for( j = 0; j for( k = 0; k Cij+=Aik*Bkj;for(i=0;ifor(j=0;jprintf(“%d “,Cij);printf(“n”); getch();return 0; 六、 实验结果 七、 实验体会对矩阵相乘有所了解,更多的懂得了许多编程技巧。矩阵相乘 windlx第六篇;*multiply an array to an array *;* *;-; Program begi

27、ns at symbol main; requires module INPUT; Read two arrays, calculate the multiplition of two arrays ; and write the result to stdout;-.data;* Prompts for input ;输入提示部分dat1: .space 64dat2: .space 64result: .space 64Prompt1: .asciiz “Input the martrixA line:”Prompt2: .asciiz “Input the martrixA column

28、 and the martrixB line: “Prompt3: .asciiz “Input the martrixB column:”Prompt4: .asciiz “Input the martrixAs number:”Prompt5: .asciiz “Input the martrixBs number:”Prompt6: .asciiz “Do you want again (no=0):”;* Data for printf-Trap ;输出数据设置部分PrintfFormat: .asciiz “%d “.align 2PrintfPar: .word PrintfFor

29、matPrintfValue: .space 4PrintfFormat1: .asciiz “n “ .align 2PrintfPar1: .word PrintfFormat1PrintfValue1: .space 4PrintfFormat2: .asciiz “Output the martrixA:n “.align 2PrintfPar2: .word PrintfFormat2PrintfValue2: .space 4PrintfFormat3: .asciiz “Output the martrixB:n “.align 2PrintfPar3: .word Printf

30、Format3PrintfValue3: .space 4PrintfFormat4: .asciiz “Output the martrixC:n “.align 2PrintfPar4: .word PrintfFormat4PrintfValue4: .space 4.text.global mainmain:addi r1,r0,Prompt1jal InputUnsigned movi2fp f1,r1 ;矩阵A的行数addi r1,r0,Prompt2jal InputUnsigned movi2fp f2,r1 ;矩阵A的列数,矩阵B的行数addi r1,r0,Prompt3ja

31、l InputUnsignedmovi2fp f3,r1 ;矩阵B的列数movfp2i r8,f1movfp2i r6,f2multu r4,r6,r8 ;总的矩阵A的元素个数r4addi r2,r10,dat1 ;指向A的首地址loop1: add r1,r0,Prompt4 ;分别读入矩阵A的元素值jal InputUnsignedsb 0(r2),r1 ;储存字节,读入元素addi r2,r2,1 ;元素个数加一sub r4,r4,1 ;总的矩阵元素个数r4减一bnez r4,loop1 ;r4不为0时跳转重复输入addi r10,r0,0 ;分别读出矩阵A的元素值addi r2,r10

32、,dat1 ;指向A的首地址sw PrintfValue2,r1 addi r14,r0,PrintfPar2trap 5 loopA: lbu r1,0(r2) sw PrintfValue,r1 addi r14,r0,PrintfPar ;换行trap 5addi r2,r2,1 ;元素个数加一sub r6,r6,1 ;矩阵A的列数r6减一beqz r6,outputA ;矩阵A的列数r6等于0时跳到outputAj loopA ;否则继续loopA outputA: sw PrintfValue1,r1addi r14,r0,PrintfPar1trap 5sub r8,r8,1 ;矩

33、阵A的行数r8减一beqz r8,countiuB ;矩阵A的行数r8等于0时跳到countiuBmovfp2i r6,f2j loopA ;否则继续loopA countiuB:movfp2i r6,f2movfp2i r12,f3 addi r10,r0,0multu r4,r6,r12 ;总的矩阵B的元素个数r4addi r2,r10,dat2 ;指向B的首地址loop2: addi r1,r0,Prompt5 ;分别读入矩阵B的元素值jal InputUnsignedsb 0(r2),r1 ;储存字节,读入元素addi r2,r2,1 ;元素个数加一sub r4,r4,1 ;总的矩阵元

34、素个数r4减一bnez r4,loop2 ;r4不为0时跳转重复输入 addi r10,r0,0 ;分别读出矩阵B的元素值addi r2,r10,dat2 ;指向B的首地址sw PrintfValue3,r1addi r14,r0,PrintfPar3trap 5loopB: lbu r1,0(r2)sw PrintfValue,r1addi r14,r0,PrintfPar ;换行trap 5addi r2,r2,1 ;元素个数加一sub r12,r12,1 ;矩阵B的列数r12减一beqz r12,outputB ;矩阵B的列数r12等于0时跳到outputBj loopB ;否则继续lo

35、opB outputB: sw PrintfValue1,r1addi r14,r0,PrintfPar1trap 5sub r6,r6,1 ;矩阵B的行数r6减一beqz r6,countiue ;矩阵B的行数r6等于0时跳到countiumovfp2i r12,f3j loopB ;否则继续loopBcountiue:addi r11,r0,0 ;temp,表示矩阵C的一个元素的累加器addi r4,r0,0 ;r 初始化矩阵C的偏移量addi r5,r0,0 ;矩阵A当前被扫描的行号line: movi2fp f4,r5 ;判断是否扫描完ltf f4,f1 ;f4f1跳转(矩阵A的行是否

36、扫描完) bfpf finish ;是,则跳转结束程序addi r6,r0,0 ;col,r6表示当前B矩阵的列号column: movi2fp f4,r6 ltf f4,f3 ;col(f3)列是否扫描完bfpf leveladd ;是,则跳到矩阵a的下一行movfp2i r1,f2 multu r10,r5,r1 ;iaddi r7,r6,0 ;mov col to j(矩阵B某一列的某个元素的索引)addi r11,r0,0 ;temp=0,矩阵C当前的元素值的初始化addi r9,r5,1 ;r9movfp2i r1,f2 ;f2是矩阵A的列数multu r9,r1,r9 ;pcalc

37、ulate:movi2fp f4,r10movi2fp f9,r9ltf f4,f9 ;compare i to pz(判断是否计算到当前行的最后一个元素)bfpf asign ;当前行列相乘完毕,得出结果矩阵C的一个元素(跳转赋值)addi r1,r10,dat1 ;取矩阵A当前元素在内存区域中的地址lbu r2,0(r1) ;从r1所指向的内存单元中取出矩阵A当前的元素暂存在r2addi r1,r7,dat2 ;取矩阵B当前元素在内存区域中的地址lbu r3,0(r1) ;从r1所指向的内存单元中取出矩阵B当前的元素暂存在r3multu r1,r2,r3 ;temp1add r11,r11

38、,r1 ;tempaddi r10,r10,1 ;i+,计算矩阵A当前行的下个元素的索引movfp2i r1,f3 add r7,r7,r1 ;jj calculate asign:addi r1,r4,result ;r1表示矩阵C当前的地址sb 0(r1),r11 ;store result,把新计算出来的元素放入当前内存单元addi r4,r4,1 ;赋值完一个元素,偏移量自增1addi r6,r6,1 ;矩阵B的当前列数自增1j column ;矩阵B新的一列开始leveladd:addi r5,r5,1 ;矩阵A当前行自增1j line ;矩阵A新的一行开始 finish: addi

39、 r10,r0,0 ;分别读出矩阵C的元素值movfp2i r8,f1movfp2i r12,f3addi r2,r10,resultsw PrintfValue4,r1addi r14,r0,PrintfPar4trap 5 loop3: lbu r1,0(r2)sw PrintfValue,r1addi r14,r0,PrintfPartrap 5addi r2,r2,1sub r12,r12,1beqz r12,outputC j loop3 outputC: sw PrintfValue1,r1addi r14,r0,PrintfPar1trap 5sub r8,r8,1beqz r8,choicemovfp2i r12,f3j loop3 ;* endchoice: add r1,r0,Prompt6 ;是否重复本次运行操作jal InputUnsignedbeqz r1,end ;若为0则结束运行j main ;否则则重复执行end: trap 0 46

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1