用asp做网站产品做网站如何谁来维护价格
web/
2025/9/28 5:05:24/
文章来源:
用asp做网站,产品做网站如何谁来维护价格,官方正版浏览器,北京发生大事了本文实例讲述了C#计算矩阵的逆矩阵方法。分享给大家供大家参考。具体如下#xff1a;1.代码思路1)对矩阵进行合法性检查#xff1a;矩阵必须为方阵2)计算矩阵行列式的值(Determinant函数)3)只有满秩矩阵才有逆矩阵#xff0c;因此如果行列式的值为0(在代码中以绝对值小于1E-…本文实例讲述了C#计算矩阵的逆矩阵方法。分享给大家供大家参考。具体如下1.代码思路1)对矩阵进行合法性检查矩阵必须为方阵2)计算矩阵行列式的值(Determinant函数)3)只有满秩矩阵才有逆矩阵因此如果行列式的值为0(在代码中以绝对值小于1E-6做判断)则终止函数报出异常4)求出伴随矩阵(AdjointMatrix函数)5)逆矩阵各元素即其伴随矩阵各元素除以矩阵行列式的商2.函数代码(注本段代码只实现了一个思路可能并不是该问题的最优解)/// /// 求矩阵的逆矩阵/// /// /// public static double[][] InverseMatrix(double[][] matrix){//matrix必须为非空if (matrix null || matrix.Length 0){return new double[][] { };}//matrix 必须为方阵int len matrix.Length;for (int counter 0; counter matrix.Length; counter){if (matrix[counter].Length ! len){throw new Exception(matrix 必须为方阵);}}//计算矩阵行列式的值double dDeterminant Determinant(matrix);if (Math.Abs(dDeterminant) 1E-6){throw new Exception(矩阵不可逆);}//制作一个伴随矩阵大小的矩阵double[][] result AdjointMatrix(matrix);//矩阵的每项除以矩阵行列式的值即为所求for (int i 0; i matrix.Length; i){for (int j 0; j matrix.Length; j){result[i][j] result[i][j] / dDeterminant;}}return result;}/// /// 递归计算行列式的值/// /// 矩阵/// public static double Determinant(double[][] matrix){//二阶及以下行列式直接计算if (matrix.Length 0) return 0;else if (matrix.Length 1) return matrix[0][0];else if (matrix.Length 2){return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];}//对第一行使用“加边法”递归计算行列式的值double dSum 0, dSign 1;for (int i 0; i matrix.Length; i){double[][] matrixTemp new double[matrix.Length - 1][];for (int count 0; count matrix.Length - 1; count){matrixTemp[count] new double[matrix.Length - 1];}for (int j 0; j matrixTemp.Length; j){for (int k 0; k matrixTemp.Length; k){matrixTemp[j][k] matrix[j 1][k i ? k 1 : k];}}dSum (matrix[0][i] * dSign * Determinant(matrixTemp));dSign dSign * -1;}return dSum;}/// /// 计算方阵的伴随矩阵/// /// 方阵/// public static double[][] AdjointMatrix(double [][] matrix){//制作一个伴随矩阵大小的矩阵double[][] result new double[matrix.Length][];for (int i 0; i result.Length; i){result[i] new double[matrix[i].Length];}//生成伴随矩阵for (int i 0; i result.Length; i){for (int j 0; j result.Length; j){//存储代数余子式的矩阵(行、列数都比原矩阵少1)double[][] temp new double[result.Length - 1][];for (int k 0; k result.Length - 1; k){temp[k] new double[result[k].Length - 1];}//生成代数余子式for (int x 0; x temp.Length; x){for (int y 0; y temp.Length; y){temp[x][y] matrix[x i ? x : x 1][y j ? y : y 1];}}//Console.WriteLine(代数余子式:);//PrintMatrix(temp);result[j][i] ((i j) % 2 0 ? 1 : -1) * Determinant(temp);}}//Console.WriteLine(伴随矩阵);//PrintMatrix(result);return result;}/// /// 打印矩阵/// /// 待打印矩阵private static void PrintMatrix(double[][] matrix, string title ){//1.标题值为空则不显示标题if (!String.IsNullOrWhiteSpace(title)){Console.WriteLine(title);}//2.打印矩阵for (int i 0; i matrix.Length; i){for (int j 0; j matrix[i].Length; j){Console.Write(matrix[i][j] \t);//注意不能写为Console.Write(matrix[i][j] \t);}Console.WriteLine();}//3.空行Console.WriteLine();}3.Main函数调用static void Main(string[] args){double[][] matrix new double[][]{new double[] { 1, 2, 3 },new double[] { 2, 2, 1 },new double[] { 3, 4, 3 }};PrintMatrix(matrix, 原矩阵);PrintMatrix(AdjointMatrix(matrix), 伴随矩阵);Console.WriteLine(行列式的值为 Determinant(matrix) \n);PrintMatrix(InverseMatrix(matrix), 逆矩阵);Console.ReadLine();}4.执行结果希望本文所述对大家的C#程序设计有所帮助。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83145.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!