矩阵运算矩阵加法+乘法+转置+求逆.docx

上传人:小飞机 文档编号:3672313 上传时间:2023-03-14 格式:DOCX 页数:8 大小:38.25KB
返回 下载 相关 举报
矩阵运算矩阵加法+乘法+转置+求逆.docx_第1页
第1页 / 共8页
矩阵运算矩阵加法+乘法+转置+求逆.docx_第2页
第2页 / 共8页
矩阵运算矩阵加法+乘法+转置+求逆.docx_第3页
第3页 / 共8页
矩阵运算矩阵加法+乘法+转置+求逆.docx_第4页
第4页 / 共8页
矩阵运算矩阵加法+乘法+转置+求逆.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《矩阵运算矩阵加法+乘法+转置+求逆.docx》由会员分享,可在线阅读,更多相关《矩阵运算矩阵加法+乘法+转置+求逆.docx(8页珍藏版)》请在三一办公上搜索。

1、矩阵运算矩阵加法+乘法+转置+求逆矩阵运算矩阵加法+乘法+转置+求逆 double, matrix; publicint row = 0, col = 0; /定义三个不同情况下的构造函数 public Matrix public Matrix(int row) matrix = new doublerow, row; public Matrix(int row, int col) this.row = row; this.col = col; matrix = new doublerow, col; /复制构造函数 public Matrix(Matrix m) int row = m.ro

2、w; int col = m.col; matrix = new doublerow, col; for (inti = 0; i row; i+) for (int j = 0; j col; j+) matrixi, j = m.getNum(i, j); /输入相应的值,对矩阵进行设置 public void SetNum(inti, int j, double num) matrixi, j = num; /得到相应的矩阵某个数 public double getNum(inti, int j) return matrixi, j; /输出矩阵 public void OutputM

3、Console.WriteLine(矩阵为:); for (int p = 0; p row; p+) for (int q = 0; q col; q+) Console.Write(t + matrixp, q); Console.Write(n); public void InputM(int Row, int Col) for (int a = 0; a Row; a+)/colMichael for (int b = 0; b Col; b+) Console.WriteLine(第0行,第1列, a + 1, b + 1); double value = Convert.ToDou

4、ble(Console.ReadLine); this.SetNum(a, b, value); /得到matrix public double, Detail get return matrix; set matrix = value; /矩阵转置实现 public Matrix Transpose Matrix another = new Matrix(row, col); for (inti = 0; i row; i+) for (int j = 0; j col; j+) another.SetNum(j, i, matrixi, j); return another; / / 矩阵

5、相乘 / / 第一个矩阵 / 第二个矩阵 / public double, matrixMulti(double, X, double, Y) double, A = X; double, B = Y; double, C = new doubleA.GetLength(0), B.GetLength(1); for (inti = 0; iA.GetLength(0); i+) for (int j = 0; j B.GetLength(1); j+) Ci, j = 0; for (int k = 0; k A.GetLength(1); k+) Ci, j += Ai, k * Bk,

6、j; return C; /矩阵相乘 public static Matrix Multiply(Matrix lm, Matrix rm) Matrix another = new Matrix(lm.row, rm.col); if (lm.col = rm.row) for (inti = 0; ilm.row; i+) for (int j = 0; j rm.col; j+) double temp=0; for (int k = 0; k lm.col; k+) temp += lm.getNum(i, k) * rm.getNum(k, j); another.SetNum(i,

7、 j, temp); else Console.WriteLine(左矩阵的列数不等于右矩阵的行数,不能参与计算); return another; /矩阵相加实现 public static Matrix Add(Matrix lm, Matrix rm) /行出错 if (lm.row != rm.row) System.Exception e = new Exception(相加的两个矩阵的行数不等); throw e; /列出错 if (lm.col != rm.col) System.Exception e = new Exception(相加的两个矩阵的列数不等); throw e

8、; Matrix another = new Matrix(lm.row, lm.col); for (inti = 0; ilm.row; i+) for (int j = 0; j lm.col; j+) double temp = lm.getNum(i, j) + rm.getNum(i, j); another.SetNum(i, j, temp); return another; /矩阵求逆实现 public static Matrix Inverse(Matrix M) int m = M.row; int n = M.col; if (m != n) Exception myE

9、xception = new Exception(求逆的矩阵不是方阵); throwmyException; Matrix ret = new Matrix(m, n); double, a0 = M.Detail; double, a = (double,)a0.Clone; double, b = ret.Detail; inti, j, row, k; double max, temp; /单位矩阵 for (i = 0; i n; i+) bi, i = 1; for (k = 0; k n; k+) max = 0; row = k; /找最大元,其所在行为row for (i =

10、k; i n; i+) temp = Math.Abs(ai, k); if (max temp) max = temp; row = i; if (max = 0) Exception myException = new Exception(该矩阵无逆矩阵); throwmyException; /交换k与row行 if (row != k) for (j = 0; j n; j+) temp = arow, j; arow, j = ak, j; ak, j = temp; temp = brow, j; brow, j = bk, j; bk, j = temp; /首元化为1 for

11、(j = k + 1; j n; j+) ak, j /= ak, k; for (j = 0; j n; j+) bk, j /= ak, k; ak, k = 1; /k列化为0 /对a for (j = k + 1; j n; j+) for (i = 0; i k; i+) ai, j -= ai, k * ak, j; for (i = k + 1; i n; i+) ai, j -= ai, k * ak, j; /对b for (j = 0; j n; j+) for (i = 0; i k; i+) bi, j -= ai, k * bk, j; for (i = k + 1;

12、 i n; i+) bi, j -= ai, k * bk, j; for (i = 0; i n; i+) ai, k = 0; ak, k = 1; return ret; /主函数 public static void Main int Row, Col, choice; Console.WriteLine(请输入想要的矩阵行数与列数); Row = Convert.ToInt32(Console.ReadLine); Col = Convert.ToInt32(Console.ReadLine); Matrix m = new Matrix(Row, Col); Console.Wri

13、teLine(输入矩阵数据); m.InputM(Row, Col); m.OutputM; do Console.WriteLine(请选择你想要进行的运算:n转置;n输入另一矩阵并相加;n求逆;n输入另一矩阵并相乘;n(0)停止;); choice = Convert.ToInt32(Console.ReadLine); switch (choice) case 1: Matrix n = m.Transpose; n.OutputM; break; case 2: Console.WriteLine(请输入第二个矩阵行数与列数); Row = Convert.ToInt32(Consol

14、e.ReadLine); Col = Convert.ToInt32(Console.ReadLine); Matrix m2 = new Matrix(Row, Col); Console.WriteLine(输入矩阵数据); m2.InputM(Row, Col); Console.WriteLine(第二个矩阵为:); m2.OutputM; Matrix result = Add(m, m2); result.OutputM; break; case 3: Matrix m3 = Inverse(m); m3.OutputM; break; case 4: Console.WriteL

15、ine(请输入第二个矩阵行数与列数); Row = Convert.ToInt32(Console.ReadLine); Col = Convert.ToInt32(Console.ReadLine); Matrix m4 = new Matrix(Row, Col); Console.WriteLine(输入矩阵数据); m4.InputM(Row, Col); Console.WriteLine(第二个矩阵为:); m4.OutputM; Matrix result2 = Multiply(m, m4); result2.OutputM; break; case 0: break; while (choice != 0); Console.Write(请按任意键继续); Console.ReadLine;

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号