C#使用加边法计算行列式的值

本文实例讲述了C#使用加边法计算行列式的值。分享给大家供大家参考。具体如下:

1.函数

行列式的值等于其第一行各元素乘以各自对应的代数余子式之积的和。
(注:本代码仅提供一种思路,并不代表最优解)

/// <summary>
/// 递归计算行列式的值
/// </summary>
/// <param name="matrix">矩阵</param>
/// <returns></returns>
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;
}

2.Main函数调用

static void Main(string[] args)
{
  //二阶行列式 -2
  double[][] matrix1 = new double[][]
  {
    new double[] { 1, 2 },
    new double[] { 3, 4 }
  };
  Console.WriteLine(Determinant(matrix1));
  //三阶行列式 -4
  double[][] matrix2 = new double[][]
  {
    new double[] { 2, 0, 1 },
    new double[] { 1, -4, -1 },
    new double[] { -1, 8, 3 }
  };
  Console.WriteLine(Determinant(matrix2));
  //四阶行列式 -21
  double[][] matrix3 = new double[][]
  {
    new double[] { 1, 2, 0, 1 },
    new double[] { 1, 3, 5, 0 },
    new double[] { 0, 1, 5, 6 },
    new double[] { 1, 2, 3, 4 }
  };
  Console.WriteLine(Determinant(matrix3));
  Console.ReadLine();
}

3.运行结果

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • c#封装百度web服务geocoding api 、百度坐标转换示例

    1.创建基础参数类 复制代码 代码如下: public static class BaiduConstParams    {        public const string PlaceApIv2Search = "http://api.map.baidu.com/place/v2/search";        public const string PlaceApIv2Detail = "http://api.map.baidu.com/place/v2/detail

  • C#实现根据年份计算生肖属相的方法

    本文实例讲述了C#实现根据年份计算生肖属相的方法.分享给大家供大家参考.具体分析如下: 提供年份可以输出属相,代码比较简单,因为2008年为鼠年,所以程序以2008为标准开始,2008对中国人也有特殊的意义 private static void shuxiang(int year) { string[] shuxiang = {"鼠","牛","虎","兔","龙","蛇","

  • C#计算矩阵的秩实例分析

    本文实例讲述了C#计算矩阵的秩的方法.分享给大家供大家参考.具体如下: 1.代码思路 计算矩阵的秩,即把矩阵进行行初等变换,得出的行最简矩阵的非零行数.过程如下 1)将矩阵各行按第一个非零元素出现的位置升序排列(Operation1函数) 2)查看矩阵是否为行最简矩阵(isFinished函数),是则到第6步,不是则到第3步 3)如果有两行第一个非零元素出现的位置相同,则做消法变换,让下面行的第一个非零元素位置后移(Operation2函数) 4)将矩阵各行按第一个非零元素出现的位置升序排列(O

  • C# 实现计算生辰八字

    Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace BrithdayEigth { public partial class Form1 : F

  • C#简单获取屏幕鼠标坐标点颜色方法介绍

    api函数: 复制代码 代码如下: 1.[DllImport("user32.dll")]//取设备场景 2.private static extern IntPtr GetDC(IntPtr hwnd);//返回设备场景句柄 3.[DllImport("gdi32.dll")]//取指定点颜色 4.private static extern int GetPixel(IntPtr hdc, Point p); 主要方法: 复制代码 代码如下: Timer tim

  • C#图像处理之图像均值方差计算的方法

    本文实例讲述了C#图像处理之图像均值方差计算的方法.分享给大家供大家参考.具体如下: //本函数均是基于RGB颜色空间计算 //定义图像均值函数(RGB空间) public double AnBitmap(Bitmap a) { double V = 0; Rectangle rect = new Rectangle(0, 0, a.Width, a.Height); System.Drawing.Imaging.BitmapData bmpData = a.LockBits(rect, Sys

  • C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法

    本文实例讲述了C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法.分享给大家供大家参考.具体如下: 1.示例图 P(x1,y1)以点A(a,b)为圆心,旋转弧度为θ,求旋转后点Q(x2,y2)的坐标 2.实现方法 先将坐标平移,计算点(x1-a,y1-b)围绕原点旋转后的坐标,再将坐标轴平移到原状态 /// <summary> /// 结构:表示一个点 /// </summary> struct Point { //横.纵坐标 public double x, y; //构造

  • C#实现计算年龄的简单方法汇总

    vs2010测试通过,主要思想是由出生日期和当前日期,两个日期计算出年龄(岁.月.天) using System; using System.Collections.Generic; using System.Text; namespace PublicClass { public static class CalculationDate { /// <summary> /// 由两个日期计算出年龄(岁.月.天) /// </summary> public static void

  • c#求点到直线的投影点坐标

    点在指定直线的投影点,即过点作一垂直于指定直线的直线,与指定直线的交点即为所求.这个问题其实回归到两条垂直直线的交点问题,回到最原始的初中几何知识,复习下如图示 首先我们明确下已知条件,指定直线上任一点A,直线斜率k,点C,求点B 说到斜率,就有不存在的情况,如图(2),显然这种情况B的横坐标=A的横坐标,B的纵坐标=C的纵坐标本文重点讨论第一种情况,其实也很简单,联立两条直线求解即可 直线AB方程式即y-yA=k*(x-xA)∵两条垂直直线的斜率乘积 = -1∴由AB线斜率为k可知BC线斜率为

  • C#开发的人脸左右相似度计算软件源码分析

    本文实例讲述了C#开发的人脸左右相似度计算软件.分享给大家供大家参考.具体分析如下: 模仿湖南卫视快乐大本营中所使用的一款人脸左右对称相似度计算软件,自己写的一个小软件,使用语言是C#,希望跟喜欢这个软件的同志们共享! 1. FaceClass类程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Dra

  • C#计算矩阵的逆矩阵方法实例分析

    本文实例讲述了C#计算矩阵的逆矩阵方法.分享给大家供大家参考.具体如下: 1.代码思路 1)对矩阵进行合法性检查:矩阵必须为方阵 2)计算矩阵行列式的值(Determinant函数) 3)只有满秩矩阵才有逆矩阵,因此如果行列式的值为0(在代码中以绝对值小于1E-6做判断),则终止函数,报出异常 4)求出伴随矩阵(AdjointMatrix函数) 5)逆矩阵各元素即其伴随矩阵各元素除以矩阵行列式的商 2.函数代码 (注:本段代码只实现了一个思路,可能并不是该问题的最优解) /// <summary

  • C#精确计算年龄的方法分析

    本文实例讲述了C#精确计算年龄的方法.分享给大家供大家参考.具体如下: 该源码在vs2010测试通过 复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; namespace PublicClass {     public static class CalculationDate     {         /// <summary>         /// 由两个日期计算出年龄(岁.月.天

随机推荐