用php计算行列式
因为有课程设计要计算多元一次方程组,所以想编个程序实现,多元一次方程组的计算最系统的方法就是利用克拉默法则求解方程组,所以只需要编写一个类或者方法求出多元一次方程组系数行列式的值和和其他几个行列式,如果系数行列式不等于零则方程组有唯一解,直接做除法运算即可,方法如下:
function Hanglieshi($arr,$num){
$num--;
for ($k=0; $k < $num; $k++) {
for ($i=$k; $i < $num; $i++) {
$temp=$arr[$i+1][$k];
$arr[$i+1][$k]=0;
for ($j=$k+1; $j <= $num; $j++) {
if($arr[$k][$k]!=0){
$arr[$i+1][$j]=$arr[$i+1][$j]-($temp/$arr[$k][$k])*$arr[$k][$j];
}else{
$arr[$k][$k]=0.00000000000001; //分母为0时控制精度
$arr[$i+1][$j]=$arr[$i+1][$j]-($temp/$arr[$k][$k])*$arr[$k][$j];
}
}
}
}
//计算返回值
$result=1.0;
for ($n=0; $n <= $num; $n++) {
$result*=$arr[$n][$n];
}
return $result;
}
需要注意的地方是分母为0时因为行列式交换行较为复杂,所以在这里直接赋一个很小的值,接近于0这样求出的结果和真实值几乎没有区别,另外也没想到好的方法,希望那天有大神指出,这个方法有2个参数,就是行列式组成的二维数组和行列式阶数,关于里面的算法部分用了3次循环,可能还会有更优的方法
另外我总结了一个很简单的方法写循环有个技巧对于像矩阵行列式这样的有规律的变换,如果一下子写不出来可以找个阶数比较低的,比如4阶的将算法按顺序结构直接摆下来,然后根据规律和执行次数依次转化为for循环,把表达式里面的常数经过对比替换成for循环里面的变量,转化多次不要怕麻烦,最后形成一个嵌套的循环这样就是符合一般规律的算法了,这个方法非常简单,对于搞不清楚的变换,最后可以轻易把代码写出来,写出来之后就不要考虑太多了,关键是要有耐心,肯定可以写出来的
直接调用这个方法,就可以计算多元一次方程了,不过带常数项的数组要和原系数行列式数组变换一下,这个也很简单。
测试网址:http://www.xingkong001.com/gongju/fangchengzu/
用php计算行列式的更多相关文章
- 降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)
今天用此函数做方程求解时发现有误,特此更正: /// <summary> /// 降阶法计算行列式 /// </summary> /// <param name=&quo ...
- Java实现 蓝桥杯 算法提高 计算行列式
试题 算法提高 计算行列式 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 //据说很多人的题目会有一大堆废话,本傻×就不在这里废话了. 给定一个N×N的矩阵A,求|A|. 输入格式 ...
- c++算法:计算行列式的值(详细讲解)
参考了:https://blog.csdn.net/u011885865/article/details/42032229 需要的基础:学过<线性代数>,知道行列式值的求法 基本公式:对于 ...
- ADV-292 计算行列式 java
问题描述 //据说很多人的题目会有一大堆废话,本傻×就不在这里废话了. 给定一个N×N的矩阵A,求|A|. 输入格式 第一行一个正整数N. 接下来N行,每行N个整数,第i行第j个数字表示A[i][j] ...
- 【原创】开源Math.NET基础数学类库使用(15)C#计算矩阵行列式
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 上个月 ...
- 行列式计算(C#)
最近几天学习高等代数老师说要写个程序算行列式的结果,闲来无事就简单写了一下. 不多说了,上代码 using System; using System.Collections.Generic; usin ...
- n阶行列式计算----c语言实现(完结)
花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...
- 开源Math.NET基础数学类库使用(15)C#计算矩阵行列式
原文:[原创]开源Math.NET基础数学类库使用(15)C#计算矩阵行列式 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p ...
- 方阵行列式并行化计算(OpenMP,MPI),并计算加速比
00][100].在创建方阵时,方阵的阶数N(N<100)由外部输入.然后用两层"for循环"来给方阵 p左上角 N×N个位置赋值.具体实现如下: /* * 定义矩阵阶数N ...
随机推荐
- Shell编程中Shift的用法
Shell编程中Shift的用法 位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shif ...
- 【CodeForces 604B】F - 一般水的题1-More Cowbe
Description Kevin Sun wants to move his precious collection of n cowbells from Naperthrill to Exeter ...
- Yii2分页
Yii中的分页功能主要由yii\web: Linkable接口.yii\widgets: LinkPager类和yii\data: Pagination类三个组成 yii\data: Paginati ...
- 【Matplotlib】 移动spines
相关文档: Spines Axis container Transformations tutorial Spines 是连接轴刻度标记的线,而且标明了数据区域的边界. 他们可以被放置在任意位置.直到 ...
- Oracle修改数据表
(1)修改数据表中某个字段值为空: update 表明 别名 set 别名.字段名 例子:update JWT_JYWF t set t.jdsbh=''(2)设置数据表中某个字段值和rownu ...
- JSTL标签库简介
核心标签库 http://java.sun.com/jsp/jstl/core <c:catch>,<c:url>的使用 <!-- 捕获异常 --> <c:c ...
- Why Deep Learning Works – Key Insights and Saddle Points
Why Deep Learning Works – Key Insights and Saddle Points A quality discussion on the theoretical mot ...
- jsp页面添加一个集合数组到action(用序列化提交)
页面的js //点击a标签增加删除 var i=0; $("#a").on("click",function(){ var $newtr = $("& ...
- C# 三种实现抖屏的方式
//int a = -2; //this.BringToFront(); //for (int i = 0; i < 20; i++) //{ // a = -a; // this.Locati ...
- 对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
一. AES对称加密: AES加密 分组 二. 分组密码的填充 分组密码的填充 e.g.: PKCS#5填充方式 三. 流密码: 四. 分组密码加密中的四种模式: 3.1 ECB模式 优点: 1. ...