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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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;

}

/*public 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 double[x, y];

for (int a = 0; a < x; a++)

for (int b = 0; b < y; b++)

arr[a, b] = double.Parse(Console.ReadLine());

Console.WriteLine("输入的矩阵为:");

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} ", x[i, j]);

}

Console.WriteLine(""); //输完一行后换行

}

}

public double[,] QiuYuZiShi(double[,] x, int a) //求行列式的代数余子式矩阵,

{

double[,] temp;

double[,] result = new double[a, a];

for (int i = 0; i < a; i++) //i,m两个for 循环对x矩阵遍历,求代数余子式

{

for (int m = 0; m < a; m++)

{

temp = new double[a - 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) //判断构造的元素在去掉的列前面还是后面行的上面还是下面

temp[k, j] = x[k, j];

if (j < i && k >= m)

temp[k, j] = x[k + 1, j];

if (j >= i && k < m)

temp[k, j] = x[k, j + 1];

if (j >= i && k >= m)

temp[k, j] = x[k + 1, j + 1];

}

double s = Math.Pow(-1, i + m); //计算余子式的符号

result[i, m] = s * QiuZhi(temp, a - 1); //得代数余子式的一项

}

}

return result;

}

public double QiuZhi(double[,] x, int a) //行列式的值函数

{

double[,] temp; //声明临时矩阵数组

double s = 1.0; //用他来控制余子式的符号

double result = 0.0; //声明临时存储矩阵行列式变量和符号变量

if (a == 1)

{

return x[0, 0] * s;

}

for (int i = 0; i < a; i++)

{

temp = new double[a - 1, a - 1]; //给余子式数组分配空间

for (int j = 0; j < a - 1; j++) //j为余子式列,i为行

for (int k = 0; k < a - 1; k++)

{

if(j < i) //判断构造的元素在去掉的列前面还是后面

temp[k, j] = x[k + 1, j];

else

temp[k, j] = x[k + 1, j + 1];

}

s = Math.Pow(-1, i); //计算余子式的符号

result += x[0, i] * QiuZhi(temp, a - 1) * s; //用递归算法计算行列式的值

}

return result;

相关文档
最新文档