行列式计算程序设计

用java写计算器(包括保存记录到文件和计算行列式功能) 这个计算器是我上大二java课时写的程序设计,现在已经研一啦。记得当时可是写了好多天呢,以前不懂起名的讲究,大多用的都是ABCD代替,大家凑合看看,可以作为java课程设计的参考,主要有三个界面,主界面是A类,保存计算记录是B类,行列式的计算是C类 下面是A类代码及界面图(主界面)。 package yuxiaoye; import java.awt.*; import yuxiaoye.B;... 阅读详情

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

综合上面的分析,现定义一个函数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,如下图所示:

创建3x3矩阵并计算行列式:C#程序设计指南 在探讨矩阵的高级应用之前,我们必须从基础开始,理解什么是矩阵以及与之紧密相关的行列式。矩阵是由数字按照特定的行和列排列构成的矩形阵列,而行列式则是一个与矩阵相关的数值,它可视为矩阵的某些特征属性的量化表示。行列式是线性代数中一个重要的概念,它不仅涉及到矩阵的性质,还有着实际的应用场景,比如在判断线性方程组是否有唯一解,或者在几何中计算多维空间下的体积。在本章中,我们将详细解释矩阵和行列式的定义,以及它们的基本性质,为后续更深入的讨论打下坚实的基础。在数学的线性代数领域中,行列式起源于求解线性方程组。 阅读详情

相关推荐

行列式计算的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

luoshiyong123的博客 6117

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

用VB编写的行列式计算器,用递归算法,原则上可以是N阶,可运行超过12阶后,计算速度很慢

程序员的自我修养之数学基础01:行列式(定义、意义、计算方法和伴随矩阵)

行列式的定义 行列式是由一些数据排列成的方阵经过规定的计算方法而得到的一个数,如果行列式中含有未知数,那么行列式就是一个多项式。 行列式本质上代表一个数值,这点请与矩阵区别开来。矩阵只是一个数表,行列式还要对这个数表按照规则进一步计算,最终得到一个实数、复数或者多项式。 下面是几种常见行列式的计算方式: 一阶行列式: | a | = a 二阶行列式: 三阶行列式: n 阶行列式:...

M&Q的博客 3206

行列式计算程序 c语言 code:block通过

行列式计算程序 c语言 code:block通过 先输入阶数 读c盘根目录c:\in.txt 先输入阶数

从零到自动化:用Python脚本搞定华为CE12800的NETCONF初始配置(含完整代码)

本文详细介绍了如何使用Python脚本实现华为CE12800交换机的NETCONF初始配置自动化。从环境准备、脚本架构设计到SSH连接与NETCONF配置实战,提供了完整的代码示例和错误处理建议,帮助运维工程师高效完成网络设备自动化配置,提升工作效率。

weixin_42525551的博客 401

行列式求值(C++)

C++实现行列式计算

m0_50793313的博客 3365

C#程序突然崩溃怎么办?5分钟学会分析Dump文件(Visual Studio 2022实战)

本文详细介绍了在C#程序崩溃或无响应时,如何捕获并分析Dump文件以快速定位问题。通过Visual Studio 2022实战演示,重点讲解了配置符号服务器、解读调用堆栈与内存状态,以及针对CPU飙高、内存泄漏等典型场景的分析方法,帮助开发者高效进行故障诊断。

docker8compose的博客 474

[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...

TZR986981442的博客 9199

告别臃肿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开发环境搭建,特别适合追求性能和资源优化的开发者。

weixin_30340617的博客 351

Zemax操作40--序列模式中LD光源模拟

LD模拟

lzy750750的博客 9122

C语言程序设计整理(3)求n阶行列式的值(n<100)

本文主要讲述行列式应该怎么样用C语言来求值。行列式可以按行展开,利用代数余子式来求值,其中运用到递归的算法。

HXR_plume的博客 695

python实现边缘检测Canny算子 (附完整源码)

python实现边缘检测Canny算子 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 457

线代一开始学起来行列式计算起来真麻烦,自己尝试用C++编代码计算N阶行列式

老师让我们课余时间利用所学编写一个程序计算1600阶行列式的值,我一开始使用归纳法的思想去想的,先编出一个二阶行列式的代码,再编一个三阶行列式,二者一组合,得到他们的共有部分,但是我发现for 结构太多了,没法进行合并,我把一开始的代码先粘上给大家一些思考。 在这里插入代码片 ...

MR_bai1的博客 1045

【华为OD机试真题】4、字符统计及重排 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数, 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。 如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前

KJ.JK 3289

YOLO11优化:TGRS2026 CKConv结合C3k2 | 方向特征与跨阶段融合协同,小目标漏检率大幅下降

多尺度适配小目标尺寸变化:在 C3k2 不同阶段配置 CKConv 不同核尺度(浅层小核捕获精细纹理,深层大核聚合上下文),兼顾局部细节与全局感知,提升对舰船、车辆等小尺寸目标及红外热目标的检测鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 565

用php计算行列式

  因为有课程设计要计算多元一次方程组,所以想编个程序实现,多元一次方程组的计算最系统的方法就是利用克拉默法则求解方程组,所以只需要编写一个类或者方法求出多元一次方程组系数行列式的值和和其他几个行列式,如果系数行列式不等于零则方程组有唯一解,直接做除法运算即可,方法如下: 1 function Hanglieshi($arr,$num){ 2 $num...

weixin_30646315的博客 120

手把手入门YOLO到改进优化教程专栏介绍与说明——列表目录查阅(持续更新)

手把手入门YOLO到改进优化教程专栏介绍与说明——列表目录查阅(持续更新)

嵌入式阿齐Archie 2万+

c语言程序设计行列式,新手作品:行列式计算C语言版

该楼层疑似违规已被系统折叠隐藏此楼查看此楼对话 ControlHeightDecrease Shift+Up Arrow 向上调整选定的控件或对话一个对话单位对话 ControlHeightIncrease Shift+Down Arrow 向下调整选定的控件或对话一个对话单位对话 ControlMoveDown Down Arr...

weixin_31025595的博客 109

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

c语言编写克莱姆法则,求克莱姆法则解方程组的c语言代码,能正确运行的

满意答案用C语言设计克莱姆法则的计算程序【摘要】 本文以线性代数中的克莱姆法则为依据,讨论其计算程序的设计方法,并给出在微机上运行的模拟人工解题的计算程序和应用示例。关键词 克莱姆法则 程序一、引 言我们知道,在代数课的教学中无论是工科院校的线代数还是数学专业的高等代数都离不开克莱姆法则。由于该法则涉及到行列式的计算,在教学中只是挑选一些简单的例子进行教学,作业也比较少,致使学生练习不够充分。现在...

weixin_35607083的博客 2371

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

线性代数辅助程序

参加了一个程序设计大赛,有点数学建模的模式,差不多是校级的,而且看之前的题目都是比较简单,有的就是我们的实验题或者课设题目,所以还是想水一水的(万恶之源***) 题目是这样的 题目 请开发一个《线性代数》课程学习辅助软件,自主设计界面,现实以下功能: (1)计算两个矩阵的加法、减法、乘法功能 (2)求方阵的行列式 (3)求方阵的逆矩阵 具体要求如下: (1)界面简...

weixin_30755709的博客 266

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python矩阵计算类:计算矩阵加和、矩阵乘积、矩阵转置、矩阵行列式值、伴随矩阵和逆矩阵

基于Python设计的矩阵计算类,可以进行若干种常见的矩阵计算操作。

qq_62576604的博客 3798

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++) //输入四阶方...

z2742431760的博客 5066

计算行列式的值

计算行列式的值

爱学习的小蜗牛的博客 2320
上一篇: 土石方开挖量计算
下一篇: Cholesky分解法
大侠肖
博客等级 码龄19年 419粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值