java编程实现行列式计算应用_Java实现行列式计算

本文介绍了作者在学习Java编程时尝试实现行列式计算的过程。通过编写递归算法,作者经历了错误与修正,最终理解了静态变量在递归计算中的影响,并成功实现了行列式的正确计算。分享了这段学习经历,提醒读者0可能是正确结果,不要轻易认为错误。
摘要由CSDN通过智能技术生成

前天我看线代书,看到行列式,发现是个递归的式子,恰巧又正在学java,产生写程序实现的想法。写了两个小时,觉得实现了,写了个行列式放进去测试,我放的是

这个行列式,经过程序计算后发现结果是0。我以为我错了,于是我就去找错,发现返回结果的变量好像应该用静态变量,否则可能面临每次调用都初始化为0的情况,我以为这是结果是0的原因 。于是,我把结果变量改为静态变量,得到的结果不是0了,甚是高兴。于是用计算器验证我放进去的1-9的那个行列式的结果,发现竟然是0。 此时,我没有意识到我原本写的是对的,以为我这次是函数的结构或者其他啥的问题。几经折腾,发现改完之后只能计算二阶行列式能得到正确结果,三阶就不正确。再几经思考,发现在递归调用过程中,把结果储存到静态变量里时会进行重复的加,递归内加了一次,递归完成后又加了一次。遂改回原来的,得正确结果 。全程历时四小时有余,两小时写完代码,再两小时把代码改错且难受的思考再把代码改回原样。

从这个故事我学会一件事,0不一定是错误结果

下面是我写的代码。

public class recursive {

public static void main(String[] args) {

// 定义一个数组

int a[][] = {{1,2},{2,1}};

aij b = new aij();

System.out.println(b.det(a));

}

}

class aij {

// A函数可用于求余子阵

int[][] A(int[][] a, int row, int column) {

int[][] ans = new int[a.length - 1][a.length - 1];// ans用于储存返回的最终结果

int[] temp = new int[(a.length - 1) * (a.length - 1)];// 临时一维数组temp用于按顺序储存剔除相应行和列元素后的数组

int k = 0;

// 剔除行和列并按顺序储存到temp内

for (int i = 0; i < a.length; i++) {

for (int j = 0; j < a[i].length; j++) {

if (i == row - 1) {

continue;

} else if (j == column - 1) {

continue;

}

temp[k++] = a[i][j];

}

}

// 按顺序从temp中读取数据并储存到ans内

k = 0;

for (int i = 0; i < ans.length; i++) {

for (int j = 0; j < ans[i].length; j++) {

ans[i][j] = temp[k++];

}

}

return ans;

}

// det用于求行列式

int det(int[][] a) {

if (a.length == 1) {

return a[0][0];

} else {

int ans=0;

for (int i = 0; i < a.length; i++) {

ans+=a[i][0]*(int)Math.pow(-1, i)*det(A(a,i+1,1));

}

return ans;

}

}

}

行列式计算(C&num;)

最近几天学习高等代数老师说要写个程序算行列式的结果,闲来无事就简单写了一下. 不多说了,上代码 using System; using System.Collections.Generic; usin ...

【Java】Float计算不准确

大家可能都遇到过,float在计算某些值时,会有不准确的情况. 比如如下情况: > 计算不准确 package com.nicchagil.study.java.demo.No10float计算 ...

n阶行列式计算----c语言实现(完结)

花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...

Java闰年的计算,Calendar的用法

Java闰年的计算,Calendar的用法 代码如下: package com.aaa.zuoye; import java.text.ParseException; import java.util ...

Java基础-时间复杂度计算方式

Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

MyMathLib系列&lpar;行列式计算&rpar;

靠人不如靠己,准备做自己得MathLib,在学校的时候,就想过把数学数理的东西都计算机化.但一直没有时间去做这件事情,如今认为空余 时间比較闲,就做做这件事情,先从线性代数開始,毕竟这里面的非常多算法 ...

MyMathLib系列&lpar;行列式计算2&rpar;

/// /// 行列式计算,本程序属于MyMathLib的一部分.欢迎使用,參考,提意见. /// 有时间用函数语言改写,做自己得MathLib,里面的算法经过验证,但 ...

Java Convention 公约数计算

Java Convention 公约数计算 /** * *

*

Copyright 1994-2018 JasonInterna ...

Java练习 SDUT-1586&lowbar;计算组合数

计算组合数 Time Limit: 1000 ms Memory Limit: 32768 KiB Problem Description 计算组合数.C(n,m),表示从n个数中选择m个的组合数. ...

随机推荐

走进缓存的世界(三) - Memcache

系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...

Mysql 学习笔记2

(1)MySQL查看表占用空间大小 //先进去MySQL自带管理库:information_schema //自己的数据库:dbwww58com_kuchecarlib //自己的表:t_carmod ...

C&num; ADO&period;NET 连接Sybase 数据库

using Sybase.Data.AseClient;//反编译修改后的DLL public class SybaseHelper { public AseConnection con; publi ...

C&num; 数据回滚

public int GetExecteQuery(string strAddSql, string strUpdateSql, string strDelSql) { SqlConnection c ...

java OJ题目判断输入结束(与C语言的EOF结束等价)

/* * java 作Oj题目是会有输入若干数据的情况,不好判断输入结束符, * 类似于C语言中的EOF符号 * 在这里提供了一种方法 * */ import java.util.Iterator; ...

解决sql和beans中名字不一致问题

第二图使用别名 tid为sql中的名字,id为beans中的名字,推荐此方式

&lbrack;Swift&rsqb;LeetCode933&period; 最近的请求次数 &vert; Number of Recent Calls

Write a class RecentCounter to count recent requests. It has only one method: ping(int t), where t r ...

如何重置mate的面板到初始化时的默认设置?

在你的任何终端中敲入如下命令: gsettings reset-recursively org.mate.panel

20155332 mybash的实现

mybash 的实现 码云链接 https://gitee.com/bestiisjava2017/laura5332/blob/master/%E4%BF%A1%E6%81%AF%E5%AE%89% ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值