降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)
来源:互联网 发布:友价源码怎么样 编辑:程序博客网 时间:2024/04/28 05:03
今天用此函数做方程求解时发现有误,特此更正:
/// <summary> /// 降阶法计算行列式 /// </summary> /// <param name="Determinants">N阶行列式</param> /// <param name="ZeroOptimization">是否0优化</param> /// <returns>计算结果</returns> public static decimal CalcDeterminantAij(decimal[,] Determinants, bool ZeroOptimization = false) { var theN = Determinants.GetLength(0); //如果为2阶,直接计算 if (theN == 2) { return Determinants[0, 0] * Determinants[1, 1] - Determinants[0, 1] * Determinants[1, 0]; } if (theN == 1) { return Determinants[0, 0]; } if (theN == 0) { throw new Exception("参数错误!"); } if (ZeroOptimization) { //找0最多的行 int theRowIndex = 0; int theMaxZeroCountR = -1; for (int i = 0; i < theN; i++) { int theZeroNum = 0; for (int j = 0; j < theN; j++) { if (Determinants[i, j] == 0) { theZeroNum++; } } if (theZeroNum > theMaxZeroCountR) { theRowIndex = i; theMaxZeroCountR = theZeroNum; } } //找0最多的列 int theColIndex = 0; int theMaxZeroCountC = -1; for (int i = 0; i < theN; i++) { int theZeroNum = 0; for (int j = 0; j < theN; j++) { if (Determinants[j, i] == 0) { theZeroNum++; } } if (theZeroNum > theMaxZeroCountC) { theColIndex = i; theMaxZeroCountC = theZeroNum; } } if (theMaxZeroCountR >= theMaxZeroCountC) { decimal theRetDec = 0; //第i=theRowIndex+1行展开 int i = theRowIndex + 1; for (int j = 1; j <= theN; j++) { var theSign = CalcDeterMijSign(i, j); var theNewMij = GetDeterminantMij(Determinants, i, j); theRetDec += theSign * Determinants[i - 1, j - 1] * CalcDeterminantAij(theNewMij, ZeroOptimization); } return theRetDec; } else { decimal theRetDec = 0; //第j=theColIndex+1列展开 int j = theColIndex + 1; for (int i = 1; i <= theN; i++) { var theSign = CalcDeterMijSign(i, j); var theNewMij = GetDeterminantMij(Determinants, i, j); theRetDec += theSign * Determinants[i, j] * CalcDeterminantAij(theNewMij, ZeroOptimization); } return theRetDec; } } else { //采用随机法展开一行 var i = new Random().Next(1, theN); decimal theRetDec = 0; for (int j = 1; j <= theN; j++) { var theSign = CalcDeterMijSign(i, j); var theNewMij = GetDeterminantMij(Determinants, i, j); //此处修改theRetDec += theSign * Determinants[i, j] * CalcDeterminantAij(theNewMij, ZeroOptimization); theRetDec += theSign * Determinants[i-1, j-1] * CalcDeterminantAij(theNewMij, ZeroOptimization); } return theRetDec; } }
0 0
- 降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)
- 【更正】“给自定义控件(Web Control)添加事件的几种方法”有一个不太准确的地方。
- 更正!
- 关于数据在后台的删除修改(代码有错误等待更正 不完全)
- 正则表达式练习题以及答案(如果有错误的话帮忙更正)
- 错帐的更正方法
- EasyTouch5中文翻译文档(我自己翻译的,不是机翻),如有错漏请@我更正纠错
- 编译器也有bug
- 更正一个上课时讲的BUG
- pku1675分樱桃(有bug)
- 将"eh"更正为"Excel Home"
- 待更正
- OpenGL有个bug!!
- Office 2010 Word中设置自动更正选项 输入ehr更正为her
- [bug]CSDN论坛首页出现乱码,请更正
- 算法导论 2.3-6(更正)
- 多模式匹配AC算法(更正)
- 关于linux设备驱动模型,今天做一个简单的理解总结,可能有错误,后面可能会更正
- Hibernate session 操作 插入 删除 更新 get和load
- 卡特兰数
- 为什么全局描述符表GDT的第0项总是一个空描述符
- 杭电2082——找单词
- Oracle 第一周.
- 降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)
- 打造离线版 123D Catch
- class.forName()的作用
- find命令与grep命令的区别
- 编程学习笔记13--字典树及其运用
- My first blog
- QT Demo 之 calqlatr(3) calculator.js
- mysql查询按中文排序
- 【连通图|关节点】POJ-1523 SPF