`
yuanlanxiaup
  • 浏览: 896272 次
文章分类
社区版块
存档分类
最新评论

行列式计算程序设计

 
阅读更多

由于里面有很多公式,不便于编辑,所以整理成图片!在后面附有程序所有源代码!

综合上面的分析,现定义一个函数CalculateDet(double[,] A, int DetN)用于计算矩阵A[n,n]的行列式,其中输入参数A表示矩阵,DetN表示矩阵的阶数。该函数的代码如下:
private double CalculateDet(double[,] A, int DetN)
{
double result=1;
int n = DetN;

for (int m = 0; m < n; m++)
{
//判断A[m,m]是否为0,如果为0,则找一个不为的A[p,m],然后将m行和p行调换即可
if (A[m, m] == 0)
{
int p = m + 1;
while (p < n-1 && A[p, m] == 0)
{
p++;
}
if (p == n )//如果p=n,则表示该列中元素全为0,接下来不用计算,直接输出结果为0
{
result = 0;
goto handle01;
}
else
{
double tempExchange;
for (int q = 0; q < n; q++)
{
tempExchange=A[m,q];
A[m, q] = A[p, q];
A[p, q] = tempExchange;
}
}
}
for (int i = m + 1; i < n; i++)
{
double temp = A / A[m, m];
for (int j = m + 1; j < n; j++)
{
A = A - temp * A[m, j];
}
}
}
for (int i = 0; i < n; i++)
{
result *= A;
}
handle01:
return result;
}
设计程序界面如下(各控件名称如下,没有指定名称的控件其名称与显示的名称一样):

程序中所有代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace 矩阵计算程序
{
public partial class 行列式计算 : Form
{
public 行列式计算()
{
InitializeComponent();
}

private double CalculateDet(double[,] A, int DetN)
{
double result=1;
int n = DetN;

for (int m = 0; m < n; m++)
{
//判断A[m,m]是否为0,如果为0,则找一个不为的A[p,m],然后将m行和p行调换即可
if (A[m, m] == 0)
{
int p = m + 1;
while (p < n-1 && A[p, m] == 0)
{
p++;
}
if (p == n )//如果p=n,则表示该列中元素全为0,接下来不用计算,直接输出结果为0
{
result = 0;
goto handle01;
}
else
{
double tempExchange;
for (int q = 0; q < n; q++)
{
tempExchange=A[m,q];
A[m, q] = A[p, q];
A[p, q] = tempExchange;
}
}
}
for (int i = m + 1; i < n; i++)
{
double temp = A / A[m, m];
for (int j = m + 1; j < n; j++)
{
A = A - temp * A[m, j];
}
}
}
for (int i = 0; i < n; i++)
{
result *= A;
}
handle01:
return result;
}

private double CalculateDetWithProcess(double[,] A, int DetN)
{
double result = 1;
int n = DetN;
ShowCalProcess(A,0);
for (int m = 0; m < n; m++)
{
//判断A[m,m]是否为0,如果为0,则找一个不为的A[p,m],然后将m行和p行调换即可
if (A[m, m] == 0)
{
int p = m + 1;
while (p < n - 1 && A[p, m] == 0)
{
p++;
}
if (p == n)//如果p=n,则表示该列中元素全为0,接下来不用计算,直接输出结果为0
{
result = 0;
goto handle01;
}
else
{
double tempExchange;
for (int q = 0; q < n; q++)
{
tempExchange = A[m, q];
A[m, q] = A[p, q];
A[p, q] = tempExchange;
}
}
}
for (int i = m + 1; i < n; i++)
{
double temp = A / A[m, m];
for (int j = m + 1; j < n; j++)
{
A = A - temp * A[m, j];
}
}
//使m列中m行一下元素全部设置为0
for (int i = m+1; i < n; i++)
{
A = 0;
}
ShowCalProcess(A,m+1);
}
for (int i = 0; i < n; i++)
{
result *= A;
}
handle01:
return result;
}

private void 建立行列式_Click(object sender, EventArgs e)
{
DetDataGridView.Columns.Clear();
int detN = int.Parse(DetNumbertextBox.Text);
if (detN < 2)
{
MessageBox.Show("行列式行数小于2!请重新输入行数!");
}
else
{
for (int i = 0; i < detN; i++)
{
DetDataGridView.Columns.Add(i.ToString(), "第" + (1 + i).ToString()+"列");
}
DetDataGridView.Rows.Add(detN);
}
}

private void 计算行列式值_Click(object sender, EventArgs e)
{
int detN = int.Parse(DetNumbertextBox.Text);
double[,] A = new double[detN, detN];

for (int i = 0; i < detN; i++)
{
for (int j = 0; j < detN; j++)
{
A= double.Parse(DetDataGridView.Rows.Cells[j].Value.ToString());
}
}


double result;
result = CalculateDet(A, detN);
ProcessRichTextBox.Text += "/n计算行列式结果为:" + result.ToString();

}

private void 显示计算过程_Click(object sender, EventArgs e)
{
int detN = int.Parse(DetNumbertextBox.Text);
double[,] A = new double[detN, detN];

for (int i = 0; i < detN; i++)
{
for (int j = 0; j < detN; j++)
{
A = double.Parse(DetDataGridView.Rows.Cells[j].Value.ToString());
}
}
double result;
result = CalculateDetWithProcess(A, detN);
ProcessRichTextBox.Text += "/n计算行列式结果为:"+result.ToString();

}

private void ShowCalProcess(double[,] A, int time)
{
string s="第"+time.ToString()+"次计算结果:/n";
int detN = int.Parse(DetNumbertextBox.Text);
for (int i = 0; i < detN; i++)
{
for (int j = 0; j < detN-1; j++)
{
s+=A.ToString()+",";
}
s += A + "/n";
}
ProcessRichTextBox.Text += s;
}
}
}
运行程序,计算下面矩阵的行列式:

其计算结果为0,如下图所示:

分享到:
评论

相关推荐

    行列式计算 C++实现

    行列式是线性代数中的一个...通过以上步骤,你可以构建一个高效且准确的行列式计算程序,不仅支持常规数值类型,还能处理分数形式的计算。这将为你的C++编程技能增添新的亮点,也为后续的线性代数应用打下坚实的基础。

    VB编写行列式的计算

    总的来说,VB编写行列式计算程序涉及了字符串处理、二维数组操作、递归算法应用以及用户界面交互等多个方面,这不仅锻炼了编程技能,也加深了对线性代数的理解。通过这样的实践,开发者能够更好地将理论知识应用于...

    VB行列式计算器,可以计算行列式的值经典算法

    行列式是线性代数中的一个基本概念,它在矩阵理论、方程组求解、特征值问题等领域有着广泛的应用。VB(Visual Basic)是一种面向对象的编程语言...这个程序的源码对于学习VB编程和理解行列式计算的内部机制非常有价值。

    矩阵行列式计算_计算行列式_矩阵行列式计算_

    在计算机科学和数学中,矩阵行列式计算是基础但至关重要的概念,特别是在线性代数领域。行列式是一个标量值,它能反映出矩阵的一些关键性质,如逆矩阵的存在性、矩阵是否可逆以及线性变换是否保持体积不变。本教程将...

    行列式按键扫描程序(汇编)

    ### 行列式按键扫描程序(汇编) #### 关键知识点概述 在计算机硬件与软件交互领域,按键扫描是实现用户输入的关键技术之一。对于资源有限的系统,如早期的微处理器,采用行列式按键扫描可以高效地检测多个按键...

    复数矩阵行列式VB和C#计算程序

    复数矩阵行列式的计算在数学和计算机科学领域中具有重要的应用,特别是在线性代数、信号处理和控制系统设计中。行列式是衡量一个方阵(即行数与列数相等的矩阵)是否可逆的一个关键量,对于复数矩阵来说,这个概念...

    C语言编写的求行列式程序

    本文将深入探讨一个由C语言编写的求解行列式值的程序,该程序不仅体现了C语言的强大功能,还展示了如何通过递归算法计算行列式的值。 ### 行列式的概念与重要性 行列式是线性代数中的一个重要概念,它是一种特殊的...

    行列式的计算-vc++

    在C++中实现行列式计算,通常会涉及以下几个步骤: 1. **数据结构**:创建一个二维数组或者使用向量库(如`std::vector&lt;std::vector&lt;int&gt;&gt;`)来表示矩阵。C++标准库提供了容器类,如`std::vector`,可以方便地存储...

    N阶行列式计算器(附源程序)

    行列式是线性代数中的一个基本概念,它在解决线性方程组、确定矩阵的逆、计算特征值和特征向量等问题中扮演着重要角色。...通过改进算法或优化代码,可以进一步提高程序的计算效率,使其能应对更高阶的行列式计算。

    行列式计算

    在C++编程语言中,我们可以设计算法来计算一个方阵的行列式值。以下将详细讲解行列式的概念、计算方法以及如何使用C++实现这个过程。 1. **行列式的基本概念** 行列式是一个与方阵相关联的标量值,通常用大写字母...

    JAVA编写n阶行列式求值程序

    根据给定文件的信息,本文将详细介绍如何使用Java编程语言实现一个计算任意阶数行列式的程序。主要内容包括理解行列式的概念、解析程序结构以及探讨其实现原理。 ### 行列式的概念 行列式是一种特殊的数学对象,它...

    使用C++计算行列式

    通过以上步骤,我们可以编写一个完整的C++程序,实现任意阶矩阵的行列式计算。这个程序不仅可以帮助理解矩阵理论,还可以作为实际问题中数值计算的工具。对于学习和研究C++以及线性代数的学生来说,这是一项有益的...

    C++编写一个只含正数的行列式程序

    根据给定的信息,本文将详细解释如何使用C++语言实现一个计算正数矩阵行列式的程序。此程序的主要目的是处理一个由正数组成的方阵,并通过将其转化为上三角矩阵来计算该矩阵的行列式。 ### 行列式简介 行列式...

    分数矩阵行列式计算辅助工具

    “分数矩阵行列式计算辅助工具”是为解决这类复杂计算而设计。它通过高效的算法,自动执行分数通分、约简等运算,处理分式运算过程,从而迅速计算出分数矩阵的行列式。用户只需将分数矩阵输入到该工具中,即可得到...

    VB行列式计算器优化版

    在这个"VB行列式计算器优化版"项目中,我们看到它被用来构建一个能够计算行列式的工具。行列式是线性代数中的一个重要概念,对于N阶方阵,它是一个标量值,可以反映出矩阵的一些关键性质,如是否可逆、特征值等。 ...

    行列式计算器

    值得注意的是,这个VB版本的行列式计算器限制了最高阶数为6,这意味着它可以处理2到6阶的行列式计算。如果需要计算更高阶的行列式,用户需要自行修改源代码中的相关参数,将6替换为所需的阶数n。这种设计考虑到了...

    化三角法解线性代数行列式

    `Fraction.cpp`和`Fraction.h`代表了有理数类的实现和声明,因为行列式计算过程中可能会出现分数,所以设计这样一个类用于精确处理分数是必要的。有理数类通常包括分子和分母两个整数成员,并提供加、减、乘、除等...

    行列式计算器2.0 计算器下载

    2. **多种计算模式**:除了基础的行列式计算,可能还包括伴随矩阵、逆矩阵、秩、特征值等高级计算功能。 3. **错误检查**:在输入过程中,软件会实时检测矩阵是否符合要求,如是否为方阵,是否存在非法输入等。 4. *...

    行列式计算器.zip

    行列式是线性代数中的一个基本概念,它在解决线性方程组、确定矩阵的逆、计算特征值和特征向量等问题中扮演着重要角色。本项目提供了一个使用代数余子式方法实现的行列式计算器源代码,特别适合大学生在学习线性代数...

    用高斯列主元消去法求行列式的值

    1. `deter.c`:这是实现行列式计算的核心代码,可能包含了高斯列主元消去法的算法实现。 2. `main.c`:这是程序的入口,负责调用`deter.c`中的函数,处理输入数据,并输出结果。 3. `file.c`:可能是用来读取和写入...

Global site tag (gtag.js) - Google Analytics