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

 更新时间:2015年08月13日 09:24:43   作者:北风其凉  
这篇文章主要介绍了C#使用加边法计算行列式的值,实例分析了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#程序设计有所帮助。

相关文章

  • C#中按指定质量保存图片的实例代码

    C#中按指定质量保存图片的实例代码

    这篇文章主要介绍了C#中按指定质量保存图片的实例代码,有需要的朋友可以参考一下
    2013-12-12
  • C#代码实现PDF文档操作类

    C#代码实现PDF文档操作类

    本篇文章给大家介绍使用pdf文档操作C#代码,本文代码非常简单,代码附有注释,需要注意的是:需要添加itextsharp.dll引用才可以正常通过编译,感兴趣的朋友可以参考下
    2015-10-10
  • C#使用表达式树(LambdaExpression)动态更新类的属性值(示例代码)

    C#使用表达式树(LambdaExpression)动态更新类的属性值(示例代码)

    这篇文章主要介绍了C#使用表达式树(LambdaExpression)动态更新类的属性值,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • C# 嵌入dll 的方法

    C# 嵌入dll 的方法

    这篇文章主要介绍了C# 嵌入dll 的方法,本文图文并茂给大家及时的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • C# 递归算法详解

    C# 递归算法详解

    什么是递归函数/方法?任何一个方法既可以调用其他方法也可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或递归算法,接下来详细介绍需要了解的朋友可以参考下
    2021-11-11
  • C# IsDefined的问题

    C# IsDefined的问题

    这篇文章主要介绍了C# IsDefined的问题,通俗易懂,需要的朋友可以参考下。
    2016-06-06
  • C#实现从位图到布隆过滤器的方法

    C#实现从位图到布隆过滤器的方法

    布隆过滤器(Bloom filter)是一种特殊的 Hash Table,能够以较小的存储空间较快地判断出数据是否存在。常用于允许一定误判率的数据过滤及防止缓存击穿及等场景,本文将以 C# 语言来实现一个简单的布隆过滤器,为简化说明,设计得很简单,需要的朋友可以参考下
    2022-06-06
  • C#设计模式之观察者模式实例讲解

    C#设计模式之观察者模式实例讲解

    这篇文章主要介绍了C#设计模式之观察者模式实例讲解,本文详细讲解了观察者模式的定义、优缺点、代码实例等,需要的朋友可以参考下
    2014-10-10
  • C#绘制鼠标指针的示例代码

    C#绘制鼠标指针的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现将鼠标的指针样式给绘制成图片,显示或者保存下来,文中的示例代码讲解详细,需要的可以参考一下
    2024-01-01
  • C#使用SendMessage实现进程间通信的方法

    C#使用SendMessage实现进程间通信的方法

    这篇文章主要介绍了C#使用SendMessage实现进程间通信的方法,涉及C#中SendMessage方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04

最新评论