由于里面有很多公式,不便于编辑,所以整理成图片!在后面附有程序所有源代码!
综合上面的分析,现定义一个函数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语言小程序,用了简单的递归算法实现的,希望大家多多指教。
C语言实现行列式计算(展开法)
如下图所示行列式: 程序如下: #include<stdio.h> #include<math.h> #include<fstream> #include<iostream> using namespace std; double get_num(double ori[][5],int m)//计算m行 行列式的值 { for(int i=0;i<m;i++) { for(int j=0
N阶行列式计算器(附源程序)
用VB编写的行列式计算器,用递归算法,原则上可以是N阶,可运行超过12阶后,计算速度很慢
程序员的自我修养之数学基础01:行列式(定义、意义、计算方法和伴随矩阵)
行列式的定义 行列式是由一些数据排列成的方阵经过规定的计算方法而得到的一个数,如果行列式中含有未知数,那么行列式就是一个多项式。 行列式本质上代表一个数值,这点请与矩阵区别开来。矩阵只是一个数表,行列式还要对这个数表按照规则进一步计算,最终得到一个实数、复数或者多项式。 下面是几种常见行列式的计算方式: 一阶行列式: | a | = a 二阶行列式: 三阶行列式: n 阶行列式:...
行列式计算程序 c语言 code:block通过
行列式计算程序 c语言 code:block通过 先输入阶数 读c盘根目录c:\in.txt 先输入阶数
从零到自动化:用Python脚本搞定华为CE12800的NETCONF初始配置(含完整代码)
本文详细介绍了如何使用Python脚本实现华为CE12800交换机的NETCONF初始配置自动化。从环境准备、脚本架构设计到SSH连接与NETCONF配置实战,提供了完整的代码示例和错误处理建议,帮助运维工程师高效完成网络设备自动化配置,提升工作效率。
行列式求值(C++)
C++实现行列式计算
C#程序突然崩溃怎么办?5分钟学会分析Dump文件(Visual Studio 2022实战)
本文详细介绍了在C#程序崩溃或无响应时,如何捕获并分析Dump文件以快速定位问题。通过Visual Studio 2022实战演示,重点讲解了配置符号服务器、解读调用堆栈与内存状态,以及针对CPU飙高、内存泄漏等典型场景的分析方法,帮助开发者高效进行故障诊断。
[C++] 计算行列式的若干种方法
按行(列)展开法 #include <iostream> #include <fstream> using namespace std; //构造第一行第line个元素的余子式 void StructMinor(double* matrix, int dimension, int line, double* minor){ int ptr=0; for(int cnt1...
告别臃肿VS!仅用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境
本文详细介绍了如何仅使用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境,避免安装臃肿的完整VS。通过精准选择组件、配置Qt Creator编译器和优化Kit设置,实现高效、精简的Windows平台Qt开发环境搭建,特别适合追求性能和资源优化的开发者。
Zemax操作40--序列模式中LD光源模拟
LD模拟
C语言程序设计整理(3)求n阶行列式的值(n<100)
本文主要讲述行列式应该怎么样用C语言来求值。行列式可以按行展开,利用代数余子式来求值,其中运用到递归的算法。
python实现边缘检测Canny算子 (附完整源码)
python实现边缘检测Canny算子 (附完整源码)
线代一开始学起来行列式计算起来真麻烦,自己尝试用C++编代码计算N阶行列式
老师让我们课余时间利用所学编写一个程序计算1600阶行列式的值,我一开始使用归纳法的思想去想的,先编出一个二阶行列式的代码,再编一个三阶行列式,二者一组合,得到他们的共有部分,但是我发现for 结构太多了,没法进行合并,我把一开始的代码先粘上给大家一些思考。 在这里插入代码片 ...
【华为OD机试真题】4、字符统计及重排 | 机试真题+思路参考+代码解析(C++、Java、Py)
题目描述 >给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数, 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。 如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前
YOLO11优化:TGRS2026 CKConv结合C3k2 | 方向特征与跨阶段融合协同,小目标漏检率大幅下降
多尺度适配小目标尺寸变化:在 C3k2 不同阶段配置 CKConv 不同核尺度(浅层小核捕获精细纹理,深层大核聚合上下文),兼顾局部细节与全局感知,提升对舰船、车辆等小尺寸目标及红外热目标的检测鲁棒性。
用php计算行列式
因为有课程设计要计算多元一次方程组,所以想编个程序实现,多元一次方程组的计算最系统的方法就是利用克拉默法则求解方程组,所以只需要编写一个类或者方法求出多元一次方程组系数行列式的值和和其他几个行列式,如果系数行列式不等于零则方程组有唯一解,直接做除法运算即可,方法如下: 1 function Hanglieshi($arr,$num){ 2 $num...
手把手入门YOLO到改进优化教程专栏介绍与说明——列表目录查阅(持续更新)
手把手入门YOLO到改进优化教程专栏介绍与说明——列表目录查阅(持续更新)
c语言程序设计行列式,新手作品:行列式计算C语言版
该楼层疑似违规已被系统折叠隐藏此楼查看此楼对话 ControlHeightDecrease Shift+Up Arrow 向上调整选定的控件或对话一个对话单位对话 ControlHeightIncrease Shift+Down Arrow 向下调整选定的控件或对话一个对话单位对话 ControlMoveDown Down Arr...
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
c语言编写克莱姆法则,求克莱姆法则解方程组的c语言代码,能正确运行的
满意答案用C语言设计克莱姆法则的计算程序【摘要】 本文以线性代数中的克莱姆法则为依据,讨论其计算程序的设计方法,并给出在微机上运行的模拟人工解题的计算程序和应用示例。关键词 克莱姆法则 程序一、引 言我们知道,在代数课的教学中无论是工科院校的线代数还是数学专业的高等代数都离不开克莱姆法则。由于该法则涉及到行列式的计算,在教学中只是挑选一些简单的例子进行教学,作业也比较少,致使学生练习不够充分。现在...
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
线性代数辅助程序
参加了一个程序设计大赛,有点数学建模的模式,差不多是校级的,而且看之前的题目都是比较简单,有的就是我们的实验题或者课设题目,所以还是想水一水的(万恶之源***) 题目是这样的 题目 请开发一个《线性代数》课程学习辅助软件,自主设计界面,现实以下功能: (1)计算两个矩阵的加法、减法、乘法功能 (2)求方阵的行列式 (3)求方阵的逆矩阵 具体要求如下: (1)界面简...
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
Python矩阵计算类:计算矩阵加和、矩阵乘积、矩阵转置、矩阵行列式值、伴随矩阵和逆矩阵
基于Python设计的矩阵计算类,可以进行若干种常见的矩阵计算操作。
c语言程序计算四阶行列式
c语言程序计算四阶行列式 #include <stdio.h> #include <stdlib.h> int main() {while(1){ int a[4][4],i,j,m,n,b[24],k=0,l=0; printf("请输入四阶矩阵:\n"); for(i=0;i<4;i++) //输入四阶方...
计算行列式的值
计算行列式的值
6117



被折叠的 条评论
为什么被折叠?



