C#行列式,矩阵的各种算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;