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

行列式计算程序设计

 
阅读更多

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

综合上面的分析,现定义一个函数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语言程序设计数码管显示4×4键盘矩阵按键(基于8051+Proteus仿真)

    单片机C语言程序设计数码管显示4×4键盘矩阵按键(基于8051+Proteus仿真)单片机C语言程序设计数码管显示4×4键盘矩阵按键(基于8051+Proteus仿真)单片机C语言程序设计数码管显示4×4键盘矩阵按键(基于8051+...

    并行计算机架构与编程上机实验程序MPI.zip

    并行计算机架构与编程上机实验程序 求矩阵行列式 MPI线程和MPI多线程编程 Pthread多线程和MPI多线程编程的MPI

    课程设计简易计算器设计

    6 、计算器程序设计………………………………………………………………………………7 6.1存储单元分配………………………………………………………………………………7 6.2 主程序设计……………………………………...

    Numerical recipes 3rd Edition

    其内容包括:线性方程组的求解,逆矩阵和行列式计算,多项式和有理函数的内插与外推,函数的积分和估值,特殊函数的数值计算,随机数的产生,非线性方程求解,傅里叶变换和FFT,谱分析和小波变换,统计描述和数据建模...

    单片机课程设计—简易计算器.docx

    课程设计简述及整体方框图 2 3.1 方案 2 3.2、硬件电路设计 2 3.2.1主控电路设计 2 3.2.2键盘电路设计 3 3.2.3数码管显示电路 3 3.3软件设计简述 4 3.3.1键盘扫描子程序设计 4 3.3.2数码管显示电路 6 3.3.3运算子...

    2005-2009软件设计师历年真题

     • 常用数值计算(误差、矩阵和行列式、近似求解方程、插值、数值积分)  • 排列组合、概率论应用、应用统计(数据的统计分析)  • 运算基本方法(预测与决策、线性规划、网络图、模拟)  1.5 常用数据结构 ...

    C#科学计算讲义

    3.7 行列式的计算 115 3.7.1 基本原理 115 3.7.2 实验内容与数据 115 3.7.3 程序源代码 115 3.7.4 实验结论 119 3.8 本章小结 120 第4章 正交变换与最小二乘计算方法 121 4.1 对称正定阵的Cholesky...

    电子系统设计课程设计.doc

    矩阵式键盘接口设计:矩阵式键盘适用于按键数量较多的场合,由行线和列线组成, 按键位于行列的交叉点上。节省I/O口。 矩阵键盘工作原理:行线通过上拉电阻接到+5V上。无按键,行线处于高电平状态, 有键按下,行线...

    基于STM32F103C8T6的简易计算器设计

    该文件为基于STM32F103C8T6的简易计算器设计,外接设备为行列式矩阵键盘与LCD12864,采用串行方式接口,能实现简单的加减乘除,LCD中英显示均无问题。程序里面的所用引脚有详细定义,可根据自己的实际情况适当修改。

    单片机温控课程设计.doc

    完成系统硬件电路设计 1) 单片机采用MCS51系列 2) 键盘为4×3行列式键盘,按键设有启动、停止功能键。 3) 两个3位的LED数码管,用来显示温度。 4) 模数转换电路 5) 数模转换电路 6) 温度检测与控制电路 1. 完成系统...

    8051单片机的简易计算器设计.doc

    其程序框图 如下: 3、主程序设计 (1)数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值, 则符号位显示"- ",然后将数值除以10,余数送显最最低位,判断商是否...

    单片机简易计算器设计.doc

    其程序框图 如下: 3、主程序设计 (1)数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值, 则符号位显示"- ",然后将数值除以10,余数送显最最低位,判断商是否...

    C#科学计算讲义[光盘源码]

    3.7 行列式的计算 115 3.7.1 基本原理 115 3.7.2 实验内容与数据 115 3.7.3 程序源代码 115 3.7.4 实验结论 119 3.8 本章小结 120 第4章 正交变换与最小二乘计算方法 121 4.1 对称正定阵的Cholesky...

    基于51单片机的密码锁设计.doc

    基于单片机的密码锁设计 1 引言 1.1设计目的 随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。...行列式键盘的硬件结构比较简单,由行输出口和列输出 口构成行列式键盘,按键设置在行、

    (完整版)matlab毕业课程设计-图像处理.doc

    4 1.4.2矩阵的最大值、最小值、均值、方差、转置、逆、行列式、特征值的计算、矩 阵的相乘、右除、左除、幂运算 6 1.4.3多项式加减乘除运算、多项式求导、求根和求值运算、多项式的部分分式展开 、多项式的拟合、...

    单片机密码锁设计(1).doc

    1 引言 设计目的 随着电子技术的发展,各类电子产品应运而生,...行列式键盘的硬件结构比较简单,由行输出口 和列输出口构成行列式键盘,按键设置在行、列交点上。只有当键被按下时相应 的行和列才能相连。如此,只要检

    基于51单片机的密码锁设计(1).doc

    基于单片机的密码锁设计 1 引言 1.1设计目的 随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。...行列式键盘的硬件结构比较简单,由行输出口和列输出 口构成行列式键盘,按键设置在行、

    单片机课程设计——数码管显示4×4矩阵键盘.doc

    1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算 机绘制电路图和流程图。 2.课程设计要求 单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘 中的某一...

    单片机课程设计报告—简易计算器1.doc.doc

    本计算器是将键盘输入信 息经处理通过缓存,送入数码管显示,键盘采用行列式,数码管采用动态扫描方式,计 算功能通过软件实现,用汇编语言对单片机可编程芯片进行编程,实现对计算器的设计 。 目录 设计要求 1 1、...

    科学与工程数值计算算法

    2.9 对称正定矩阵的乔里斯基分解与行列式的求值 2.10 矩阵的三角分解 2.11 一般实矩阵的QR分解 2.12 一般实矩阵的奇异值分解 2.13 求广义逆的奇异值分解法 2.14 约化对称矩阵为对称三对角阵的豪斯荷尔德...

Global site tag (gtag.js) - Google Analytics