c#行列式,矩阵的各种算法

上传人:第*** 文档编号:31320958 上传时间:2018-02-06 格式:DOC 页数:7 大小:73KB
返回 下载 相关 举报
c#行列式,矩阵的各种算法_第1页
第1页 / 共7页
c#行列式,矩阵的各种算法_第2页
第2页 / 共7页
c#行列式,矩阵的各种算法_第3页
第3页 / 共7页
c#行列式,矩阵的各种算法_第4页
第4页 / 共7页
c#行列式,矩阵的各种算法_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《c#行列式,矩阵的各种算法》由会员分享,可在线阅读,更多相关《c#行列式,矩阵的各种算法(7页珍藏版)》请在金锄头文库上搜索。

1、using System;using System.Collections.Generic;using System.Linq;using System.Text;/自己写的一个关于矩阵各种计算的算法,还有行列式的各种算法/简单的几步,嘿嘿嘿,特意分享下namespace Task1 class JuZhen public double, arr; /矩阵的成员变量 private int row, col; public double sum = 0.0; public JuZhen() public JuZhen(int a, int b) row = a; col = b; /*publ

2、ic void setRC(int a, int b) row = a; col = b; public int getR() return row; public int getC() return col; */ public double, InputArr(int x, int y) /矩阵的输入函数,用于输入函数并且将输入的函数显示出来 arr = new doublex, y; for (int a = 0; a x; a+) for (int b = 0; b y; b+) arra, b = double.Parse(Console.ReadLine(); Console.Wr

3、iteLine(输入的矩阵为:); OutPrint(arr, x, y); /矩阵的显示 return arr; /返回输入的矩阵 public void OutPrint(double, x, int a, int b) /矩阵的输出函数,调用此函数实现矩阵的输出 for (int i = 0; i a; i+) for (int j = 0; j b; j+) Console.Write(0 , xi, j); Console.WriteLine(); /输完一行后换行 public double, QiuYuZiShi(double, x, int a) /求行列式的代数余子式矩阵,

4、double, temp; double, result = new doublea, a; for (int i = 0; i a; i+) /i,m两个for循环对x矩阵遍历,求代数余子式 for (int m = 0; m a; m+) temp = new doublea - 1, a - 1; /生成余子式数组 for (int j = 0; j a - 1; j+) /j为余子式列,i为行 for (int k = 0; k a - 1; k+) if (j i & k m) /判断构造的元素在去掉的列前面还是后面 行的上面还是下面 tempk, j = xk, j; if (j

5、= m) tempk, j = xk + 1, j; if (j = i & k = i & k = m) tempk, j = xk + 1, j + 1; double s = Math.Pow(-1, i + m); /计算余子式的符号 resulti, m = s * QiuZhi(temp, a - 1); /得代数余子式的一项 return result; public double QiuZhi(double, x, int a) /行列式的值函数 double, temp; /声明临时矩阵数组 double s = 1.0; /用他来控制余子式的符号 double result

6、 = 0.0; /声明临时存储矩阵行列式变量和符号变量 if (a = 1) return x0, 0 * s; for (int i = 0; i a; i+) temp = new doublea - 1, a - 1; /给余子式数组分配空间 for (int j = 0; j a - 1; j+) /j为余子式列,i为行 for (int k = 0; k a - 1; k+) if (j i) /判断构造的元素在去掉的列前面还是后面 tempk, j = xk + 1, j; else tempk, j = xk + 1, j + 1; s = Math.Pow(-1, i); /计

7、算余子式的符号 result += x0, i * QiuZhi(temp, a - 1) * s; /用递归算法计算行列式的值 return result; public void Add(double, x, int a, int b, double, y, int c, int d) /矩阵的相加并且显示相加后的结果 double, result = new doublea, b; /将相加后的矩阵存放在result矩阵中 if (a != c | b != d) /对是否能进行乘法进行判断 Console.WriteLine(不是同型矩阵,不能进行加法运算); else for (in

8、t i = 0; i a; i+) for (int j = 0; j b; j+) resulti, j = xi, j + yi, j; Console.WriteLine(矩阵相加后的结果为:); OutPrint(result, a, b); /输出结果 public double, ZhuanZhi(double, x, int a, int b) /实现转置并且输出结果 double, y = new doubleb, a; /用于存放转置后的结果 for (int i = 0; i a; i+) for (int j = 0; j b; j+) yj, i = xi, j;/第a

9、行b列与第b行a列交换,实现转置 Console.WriteLine(矩阵转置后的结果为:); OutPrint(y, b, a); /打印结果 return y; public void Time(double, x, int a, int b, double, y, int c, int d) double, result = new doublea, d; /用来存放矩阵相乘后的结果 if (b != c) /判断是否能够进行矩阵的乘法运算 Console.WriteLine(x和y数组的位数不匹配,不能进行乘法运算); else for (int i = 0; i a; i+) for

10、 (int j = 0; j d; j+) resulti, j = 0; for (int k = 0; k b; k+) resulti, j += (xi, k) * (yk, j); /得到相乘后的每一项 Console.WriteLine(矩阵相乘后的结果为:); OutPrint(result, a, d); /打印结果 public void QiuNi(double, x, int a, int b) /实现矩阵的求逆运算,并输出结果 double, result1 = new doublea, b; /用来存放代数余子式矩阵 double, result2 = new dou

11、blea, b; /用来存放求逆后的矩阵 if (a != b) Console.WriteLine(输入的行和列大小不相等,不能求逆矩阵); else double m; m = QiuZhi(x, a); /求出行列式的模长,进行下一步的判断 if (m = 0) /判断是否有逆矩阵 Console.WriteLine(输入矩阵的模长值为0,所以它没有逆矩阵); else result1 = QiuYuZiShi(x, a); /代数余子式 double n = 1 / m; for (int i = 0; i a; i+) /一一求出逆矩阵的每一项 for (int j = 0; j a

12、; j+) result2i, j = n * result1i, j; Console.WriteLine(矩阵求逆后的结果为:); OutPrint(result2, a, a); class Program static void Main(string args) double, arr1; double, arr2; JuZhen p = new JuZhen(); /申明一个JuZhen类的一个实例 JuZhen p1 = new JuZhen(); /给出即将输入的矩阵实例 int x1, y1; JuZhen p2 = new JuZhen(); int x2, y2; Con

13、sole.WriteLine(请输入第一个矩阵的行); /第一个矩阵的输入和输出 x1 = int.Parse(Console.ReadLine(); Console.WriteLine(请输入第一个矩阵的列); y1 = int.Parse(Console.ReadLine(); Console.WriteLine(矩阵的行数为:0,矩阵的列数为:1, x1, y1); arr1 = new doublex1, y1; arr1 = p1.InputArr(x1, y1); Console.WriteLine(选择1继续输入第二个矩阵,您将做*加法+乘法*n按其他数字做矩阵的*求逆+转置*求

14、行列式的值*选项); int n; /对矩阵运算的第一次选择 n = int.Parse(Console.ReadLine(); if (n = 1) Console.WriteLine(请输入第二个矩阵的行和列); /第二个矩阵的输入和输出 x2 = int.Parse(Console.ReadLine(); y2 = int.Parse(Console.ReadLine(); Console.WriteLine(矩阵的行数为:0,矩阵的列数为:1, x2, y2); arr2 = new doublex2, y2; arr2 = p2.InputArr(x2, y2); Console.W

15、riteLine(输入1做+加法+.输入2做*乘法*); int m; m = int.Parse(Console.ReadLine(); switch (m) case 1: p.Add(arr1, x1, y1, arr2, x2, y2); break; case 2: p.Time(arr1, x1, y1, arr2, x2, y2); break; default: break; else int a; Console.WriteLine(输入1做+求逆法+.输入2做+转置*输入3做求行列式的值*); a = int.Parse(Console.ReadLine(); switch (a) case 1: p.QiuNi(arr1, x1, y1); break; case 2: p.ZhuanZhi(arr1, x1, y1); break; case 3: if (x1 = y1) Console.WriteLine(行列式的值为:0, p.QiuZhi(arr1, x1); else Console.WriteLine(这不是行列式,因为行与列不相等,请重新启动程序); break; default: break; Console.WriteLine(按回车键退出); Console.Read();

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

当前位置:首页 > 办公文档 > 其它办公文档

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