C#计算行列式的值(加边法)

1.函数

行列式的值等于其第一行各元素乘以各自对应的代数余子式之积的和。

(注:本代码仅提供一种思路,并不代表最优解)

1/// <summary> 2/// 递归计算行列式的值 3/// </summary> 4/// <param name="matrix">矩阵</param> 5/// <returns></returns> 6public static double Determinant(double[][] matrix) 7{ 8 //二阶及以下行列式直接计算 9 if (matrix.Length == 0) return 0; 10 else if (matrix.Length == 1) return matrix[0][0]; 11 else if (matrix.Length == 2) 12 { 13 return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]; 14 } 15 16 //对第一行使用“加边法”递归计算行列式的值 17 double dSum = 0, dSign = 1; 18 for (int i = 0; i < matrix.Length; i++) 19 { 20 double[][] matrixTemp = new double[matrix.Length - 1][]; 21 for (int count = 0; count < matrix.Length - 1; count++) 22 { 23 matrixTemp[count] = new double[matrix.Length - 1]; 24 } 25 26 for (int j = 0; j < matrixTemp.Length; j++) 27 { 28 for (int k = 0; k < matrixTemp.Length; k++) 29 { 30 matrixTemp[j][k] = matrix[j + 1][k >= i ? k + 1 : k]; 31 } 32 } 33 34 dSum += (matrix[0][i] * dSign * Determinant(matrixTemp)); 35 dSign = dSign * -1; 36 } 37 38 return dSum; 39}

2.Main函数调用

1static void Main(string[] args) 2{ 3 //二阶行列式 -2 4 double[][] matrix1 = new double[][] 5 { 6 new double[] { 1, 2 }, 7 new double[] { 3, 4 } 8 }; 9 Console.WriteLine(Determinant(matrix1)); 10 11 //三阶行列式 -4 12 double[][] matrix2 = new double[][] 13 { 14 new double[] { 2, 0, 1 }, 15 new double[] { 1, -4, -1 }, 16 new double[] { -1, 8, 3 } 17 }; 18 Console.WriteLine(Determinant(matrix2)); 19 20 //四阶行列式 -21 21 double[][] matrix3 = new double[][] 22 { 23 new double[] { 1, 2, 0, 1 }, 24 new double[] { 1, 3, 5, 0 }, 25 new double[] { 0, 1, 5, 6 }, 26 new double[] { 1, 2, 3, 4 } 27 }; 28 Console.WriteLine(Determinant(matrix3)); 29 Console.ReadLine(); 30}

3.运行结果

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

mysql中like用法

like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0

C#计算行列式的值(加边法) - HelloWorld