zoukankan      html  css  js  c++  java
  • 行列式计算(C#)

    最近几天学习高等代数老师说要写个程序算行列式的结果,闲来无事就简单写了一下。

    不多说了,上代码

    
    
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace Nrow_culmn
     7 {
     8     class Program
     9     {
    10         //计算行列式 计算复杂度为O(n的3次方)
    11         public static double jlength = 0;
    12         static void Main(string[] args)
    13         {
    14             //double[,] row_culmn = { { 3, 1, -1, 1 }, { 1, -1, 1, 2 }, { 2, 1, 2, -1 }, { 1, 0, 2, 1, } };
    15             //行列式二维数组
    16             double[,] row_culmn = { { 1, 4, 9, 16, 8 }, { 4, 9, 16, 25, 4 }, { 9, 16, 25, 36, 0 }, { 16, 25, 36, 49, 10 }, { 3, 15, 3, 69, 11 } };
    17 
    18             //计算行列式的阶数
    19             jlength = Math.Sqrt(row_culmn.Length);
    20 
    21             Console.WriteLine("原始行列式为:");
    22             for (int i = 0; i < jlength; i++)
    23             {
    24                 for (int j = 0; j < jlength; j++)
    25                 {
    26                     Console.Write(row_culmn[i, j].ToString() + "  ");
    27                 }
    28                 Console.WriteLine();
    29             }
    30             Console.WriteLine();
    31             Console.WriteLine();
    32             Console.WriteLine();
    33             int row = 0;//行 数组行列下标从0开始
    34 
    35             int rowup = 1;//向右移动的偏移列(相对行)
    36 
    37             for (row = 0; row < jlength - 1; row++)
    38             {
    39                 //递归算法将行列式计算为做下三角全为0
    40                 ValueRow_Culmn(ref row_culmn, ref row, rowup);
    41                 rowup++;
    42             }
    43             //计算行列式的值double值不能默认等于0 否则会所有值都为零
    44             double a = 1;
    45             for (int i = 0; i < jlength; i++)
    46             {
    47                 Console.WriteLine("" + (i + 1) + "行 第" + (i + 1) + "" + row_culmn[i, i]);
    48                 a *= row_culmn[i, i];
    49             }
    50             //格式化输出
    51             Console.WriteLine("最后得:");
    52             Console.WriteLine(string.Format("{0:F}",a));
    53             Console.ReadLine();
    54 
    55         }
    56 
    57         public static void ValueRow_Culmn(ref double[,] rc, ref int row, int rowup)
    58         {
    59             //double jlength = Math.Sqrt(rc.Length);
    60             double k;//与列相乘的系数
    61             if (rowup < jlength)
    62             {
    63                 //计算行列式系数(第i行比第i-1行)
    64                 k = -rc[rowup, row] / rc[row, row];
    65                 //通过相乘系数 计算第i行的值
    66                 for (int j = 0; j < jlength; j++)
    67                 {
    68                     rc[rowup, j] += rc[row, j] * k;
    69                 }
    70 
    71                 Console.WriteLine();
    72                 Console.WriteLine();
    73                 //打印计算之后的行列式
    74 
    75                 for (int m = 0; m < jlength; m++)
    76                 {
    77                     for (int j = 0; j < jlength; j++)
    78                     {
    79                         Console.Write(rc[m, j].ToString() + "  ");
    80                     }
    81                     Console.WriteLine();
    82                 }
    83 
    84                 Console.WriteLine();
    85                 //向下移动行
    86                 rowup++;
    87                 //递归调用方法函数
    88                 ValueRow_Culmn(ref rc, ref row, rowup);
    89             }
    90             else
    91             { return; }
    92         }
    93 
    94 
    95 
    96     }
    97 }
    
    
    
     
  • 相关阅读:
    Vue 框架怎么实现对象和数组的监听?
    能说下 vue-router 中常用的 hash 和 history 路由模式实现原理吗?
    vue-router 路由模式有几种?
    Vue 组件间通信有哪几种方式?
    v-model 的原理?
    华硕笔记本修复
    linux下制作u盘启动盘
    virtualbox不能启动虚拟机
    ubuntu14.04建立wifi热点
    git中文文件名和中文目录显示乱码
  • 原文地址:https://www.cnblogs.com/zhyg/p/4423483.html
Copyright © 2011-2022 走看看