目录

前言

一、对行列式的某行或某列进行操作

二.缩小矩阵的大小

三、正负号处理和值存储之后进行除法运算

四.代码使用过程

五.整体代码


前言

行列式求值对于刚刚学习完线性代数的大学生再熟悉不过了,同样于上一篇文章,这也是我们学习线性代数这个课程必须要掌握的知识点,但对于许多比较难算的题目,我依然想用代码帮助解决计算的问题,这种通过写代码来帮助我解决学习上的问题,能很大程度的提高我们写代码的能力,对于行列式的求值所需要写代码就简单多了。


一、对行列式的某行或某列进行操作

对于行列式的求值,我们通过公式就可以知道,需要将行列式的某一行或某一列的所有数通过加法或减法运算将该行或该列化为只有一个数不为0。同时再用这个数与它所对应的代数余子式相乘,通过不断的降低阶数,就能得到最终的运算结果。
        输入很简单,与上一篇文章一样。
        对于一阶二阶三阶这样的行列式直接进行简单的运算就可以了,而对于三阶以上的行列式我们需要做进一个操作。
         代数余子式其中有一个(-1)(i+j)次方,为了确保这部分方程的值为1,我们可以将第一行第一个数作为第一列不需要改变的数,再将第一列其他的数通过与第一列进行运算使其他列的数全为0。因此,我们也要对第一行的第一个数进行判断是否为0。如果为0,那么在与其他行第一个数不为0的进行交换。如果某一列的所有数全为零,那么运算就直接结束了,最后输出0。

             do {for(int i=0;i<A-C;i++){if(B[i][0]!=0){if(B[i][0]<0){for(int j=0;j<A-C;j++){D=-B[i][j];B[i][j]=B[0][j];B[0][j]=D;}if(i!=0){fuhao*=(-1);}E=1;fuhao*=(-1);break;}else{for(int j=0;j<A-C;j++){D=B[i][j];B[i][j]=B[0][j];B[0][j]=D;}if(i!=0){fuhao*=(-1);}E=1;break;}}}

确定第一行第一个数不为0之后,再将其他行的第一个数,通过与第一行进行运算使其结果为0。

                    for(int i=1;i<A-C;i++){if(B[i][0]!=0){if(B[i][0]<0){for(F=B[0][0];F%(-B[i][0])!=0;)F+=B[0][0];F1=F/B[0][0];F2=F/(-B[i][0]);for(int j=0;j<A-C;j++){B[i][j]=B[i][j]*F2+B[0][j]*F1;}G*=F2;}else{for(F=B[0][0];F%B[i][0]!=0;)F+=B[0][0];F1=F/B[0][0];F2=F/B[i][0];for(int j=0;j<A-C;j++){B[i][j]=B[i][j]*F2-B[0][j]*F1;}G*=F2;}}}

二.缩小矩阵的大小

之后一步操作比较关键,我们如何缩小我们的矩阵呢,最好的方法就是将矩阵中除第一行和第一列其他所有的数向左上角移动一位,这里需要一个数来记录化简过程中矩阵的大小,这个数最重要的作用是能知道在do——while语句中循环的次数。

I[C]=B[0][0];
C++;
System.out.println();
for(int i=0;i<A-C;i++)
{for(int j=0;j<A-C;j++){B[i][j]=B[i+1][j+1];}
}

三、正负号处理和值存储之后进行除法运算

行列式的计算与矩阵的计算不同,行列式每一次行与行的交换或列与列的交换都会改变正负号。因此,我们要定义一个变量来记录这个正负号,同时行列式的计算当某一行或某一列乘以一个数时,那么这个行列式的计算结果就会扩大到所乘数的这么多倍。因此,还需要建立一个数组,将这些所乘的数储存起来,最后再统一做除法运算。

四.代码使用过程

五.整体代码

package zuopin;
import java.util.Scanner;
public class str {public static void main(String[] args) {Scanner input=new Scanner(System.in);int A;System.out.println("行列式求值系统");System.out.println("请输入行列式的阶数:");do {A=input.nextInt();if(A<=0){System.out.println("输入的行列式的阶数错误!");System.out.println("请重新输入:");}}while (A<=0);int [][]B=new int[A][A];for(int i=0;i<A;i++){System.out.printf("请输入第%d行的所有数,每一个数之间用空格(或回车)隔开\n",i+1);for(int j=0;j<A;j++){B[i][j]=input.nextInt();}}if(A==1){System.out.println("运算结果为:"+B[0][0]);}elseif(A==2){System.out.println("运算结果为:"+(B[0][0]*B[1][1]-B[0][1]*B[1][0]));}elseif(A==3){System.out.println("运算结果为:"+(B[0][0]*B[1][1]*B[2][2]+B[0][1]*B[1][2]*B[2][0]+B[0][2]*B[1][0]*B[2][1]-(B[2][0]*B[1][1]*B[0][2]+B[1][0]*B[0][1]*B[2][2]+B[0][0]*B[2][1]*B[1][2])));}else{int C=0,D,E=0,F,F1,F2,G=1,fuhao=1;int []I=new int[A-3];do {for(int i=0;i<A-C;i++){if(B[i][0]!=0){if(B[i][0]<0){for(int j=0;j<A-C;j++){D=-B[i][j];B[i][j]=B[0][j];B[0][j]=D;}if(i!=0){fuhao*=(-1);}E=1;fuhao*=(-1);break;}else{for(int j=0;j<A-C;j++){D=B[i][j];B[i][j]=B[0][j];B[0][j]=D;}if(i!=0){fuhao*=(-1);}E=1;break;}}}if(E==0){System.out.println("运算结果为:0");System.exit(0);}else{for(int i=1;i<A-C;i++){if(B[i][0]!=0){if(B[i][0]<0){for(F=B[0][0];F%(-B[i][0])!=0;)F+=B[0][0];F1=F/B[0][0];F2=F/(-B[i][0]);for(int j=0;j<A-C;j++){B[i][j]=B[i][j]*F2+B[0][j]*F1;}G*=F2;}else{for(F=B[0][0];F%B[i][0]!=0;)F+=B[0][0];F1=F/B[0][0];F2=F/B[i][0];for(int j=0;j<A-C;j++){B[i][j]=B[i][j]*F2-B[0][j]*F1;}G*=F2;}}}}I[C]=B[0][0];C++;System.out.println();for(int i=0;i<A-C;i++){for(int j=0;j<A-C;j++){B[i][j]=B[i+1][j+1];}}}while(C<A-3);float H;H=B[0][0]*B[1][1]*B[2][2]+B[0][1]*B[1][2]*B[2][0]+B[0][2]*B[1][0]*B[2][1]-(B[2][0]*B[1][1]*B[0][2]+B[1][0]*B[0][1]*B[2][2]+B[0][0]*B[2][1]*B[1][2]);H=H*fuhao/(float)G;for(int i=0;i<A-3;i++){H=H*I[i];}if(H==0){System.out.println("运算结果为:0");}else{System.out.println("运算结果为:"+H);}}}
}

行列式求值Java语言实现———线性代数相关推荐

  1. 行列式求值、矩阵求逆

    #include <iostream> #include <string> #include <assert.h> #include <malloc.h> ...

  2. 高斯消元与行列式求值 part1

    两道模板题,思路与算法却是相当经典. 先说最开始做的行列式求值,题目大致为给一个10*10的行列式,求其值 具体思路(一开始看到题我的思路): 1.暴算,把每种可能组合试一遍,求逆序数,做相应加减运算 ...

  3. 行列式求值 按照代数余子式求和 基于python

    行列式求值 按照代数余子式求和 基于python 本代码固定了行索引,从一开始 代数余子式百度百科介绍 import numpy as npn_array = np.array([[1,2,3,4], ...

  4. 行列式求值的两种方法——Java实现

    基本概念: 行列式是数,矩阵是一个式子!!! 余子式与代数余子式: 余子式:在 n 阶行列式中,把某个元素所在的行列都去掉之后,剩下的 n-1 阶行列式就叫做该元素的余子式: 代数余子式: 基本性质: ...

  5. U66785 行列式求值

    二更:把更多的行列式有关内容加了进来(%%%%%Jelly Goat奆佬) 题目描述 给你一个N(n≤10n\leq 10n≤10)阶行列式,请计算出它的值 输入输出格式 输入格式: 第一行有一个整数 ...

  6. c语言编程实现表达式求值,c语言实现表达式求值的方法

    c语言实现表达式求值的方法 发布时间:2020-06-22 16:45:46 来源:亿速云 阅读:82 作者:Leah 这期内容当中小编将会给大家带来有关c语言实现表达式求值的方法,以专业的角度为大家 ...

  7. 逆波兰式求值 —Java

    首先我们了解一下什么叫逆波兰表达式? 逆波兰式,也叫后缀表达式(即运算符写在操作数之后) 例: 9 3 / 而我们日常所用的表达式都是中缀表达式,与逆波兰式是不一样的 上述的逆波兰式可能大家已经知道了 ...

  8. 1035: 分段函数求值 C语言

    1035: 分段函数求值 时间限制: 1 Sec 内存限制: 30 MB 提交: 33715 解决: 23213 [状态] [讨论版] [提交] [命题人:admin] 题目描述 已知:y是x的函数, ...

  9. 表达式求值(C语言)

    题目 表达式求值,(中缀表达式,平时数学中的表达式) 思路 首先,建立两个栈的结构,一个用于存储数字,一个用于存储符号 遍历表达式,如果对应的字符是数字符号则依次向后判断,将连续的数字符号转换成数字, ...

最新文章

  1. pytorch神经网络之卷积层与全连接层参数的设置
  2. html如何将段落对齐,如何用CSS设置段落的垂直对齐(附代码)
  3. 1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入
  4. mysql empty table_【MySQL】 empty table and delete table.
  5. oracle数据库提示无监听,【原创】PL/SQL连数据库提示无监听程序
  6. CS安装卸载测试总结
  7. 常见报错_【办公】文档打印常见报错,怎么办?
  8. android版 wifi伴侣,wifi伴侣下载|wifi伴侣安卓版2016最新版 3.7.5 - 系统天堂
  9. 游戏引擎渲染管线的总结
  10. Timer already cancelled 或者 Task already scheduled or cancelled
  11. python基础个人总结
  12. HP EVA4400简介
  13. 怎样将腾讯视频qlv格式转换成mp3音频
  14. 5G通信技术及技术特点
  15. CSDN聊ChatGPT
  16. C#开发微信门户及应用(46)-基于Bootstrap的微信门户应用管理系统功能介绍
  17. 大数据基石python学习_资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段!...
  18. 【webrtc】RTPSender
  19. teamview不能用的解决方法
  20. Android 通过百度地图实现膜拜单车首界面效果

热门文章

  1. A component required a bean of type ‘com.dmsd.spm.provider.service.BookServi
  2. 数据库实验报告 创建学生关系数据表、课程表、选课表 SQL Kingbase
  3. 基于HTML的环境网站设计 HTML+CSS环保网站项目实现 带设计说明psd
  4. ffmpeg安装教程(支持10bit编码)
  5. smarty 的安装与使用
  6. windows xp 安装python3
  7. 计算机科学与技术专业实践范文,计算机科学与技术专业毕业实习报告范文.docx...
  8. 微信小程序开发中调用button组件添加微信客服功能
  9. Android事件传递简单分析
  10. 模式识别的概念、方法及应用