文档章节

C#计算行列式的值(加边法)

北风其凉
 北风其凉
发布于 2014/04/23 17:13
字数 329
阅读 671
收藏 0

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.运行结果

© 著作权归作者所有

北风其凉

北风其凉

粉丝 120
博文 497
码字总数 462305
作品 4
朝阳
程序员
私信 提问
C#程序计算N阶行列式的值及N元一次方程组

C#程序计算N阶行列式的值及N元一次方程组   用了挺长时间自行完成了C#程序计算N阶行列式的值及N元一次方程组。由于自己没有在网上查阅其他资料,所以只能硬着头皮用最朴素的思想和基础的算...

秋天的菠菜6
10/09
0
0
克莱姆法则、逆矩阵、体积[MIT线代第二十课]

0、前言 MIT线性代数课程精细笔记[第十八九课]笔记见行列式介绍[MIT线代第十八九课],该笔记是连载笔记,本文由坤博所写,希望对大家有帮助。 一、知识概要 上一节中我们介绍了行列式的求法,...

忆臻
2017/12/15
0
0
基于单纯形法的对偶理论和灵敏度分析

线性规划问题的数学模型: 目标函数(价值系数)+约束条件(技术系数,限额系数) 线性规划问题解的概念: 无穷多最优解,无界解(解空间无界),无可行解(没有解空间),可行解(满足约束条...

qq_37771209
2018/05/11
0
0
你知道MATLAB ,但你知道 NMATH吗?

NMath是一个.NET的数学库,包含了NET平台上的面向对象数字计算的基础类。 产品特点如下: 单精度和双精度复数类 为以下四种数据类型提供全功能的向量和矩阵类:单精度浮点数,双精度浮点数,...

愤怒的小吉
2014/10/24
745
0
Python实现实现基于最小二乘法的线性回归

下面展示利用Python实现基于最小二乘法的线性回归模型,同时不需要引入其他科学计算以及机器学习的库。 利用Python代码表示如下: 首先引入数据集x,和y的值的大小利用Python的数据结构:列表...

Geeksongs
03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
52分钟前
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
8
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
11
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
10
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部