用php计算行列式

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

 1 function Hanglieshi($arr,$num){
 2             $num--;
 3             for ($k=0; $k < $num; $k++) { 
 4                 for ($i=$k; $i < $num; $i++) { 
 5                     $temp=$arr[$i+1][$k];
 6                     $arr[$i+1][$k]=0;
 7                     for ($j=$k+1; $j <= $num; $j++) { 
 8                         if($arr[$k][$k]!=0){
 9                             $arr[$i+1][$j]=$arr[$i+1][$j]-($temp/$arr[$k][$k])*$arr[$k][$j];
10                         }else{
11                             $arr[$k][$k]=0.00000000000001;    //分母为0时控制精度
12                             $arr[$i+1][$j]=$arr[$i+1][$j]-($temp/$arr[$k][$k])*$arr[$k][$j];
13                         }
14                     }
15                 }
16             }
17             //计算返回值
18             $result=1.0;
19             for ($n=0; $n <= $num; $n++) { 
20                 $result*=$arr[$n][$n];
21             }
22             return $result;
23     }

  需要注意的地方是分母为0时因为行列式交换行较为复杂,所以在这里直接赋一个很小的值,接近于0这样求出的结果和真实值几乎没有区别,另外也没想到好的方法,希望那天有大神指出,这个方法有2个参数,就是行列式组成的二维数组和行列式阶数,关于里面的算法部分用了3次循环,可能还会有更优的方法

  另外我总结了一个很简单的方法写循环有个技巧对于像矩阵行列式这样的有规律的变换,如果一下子写不出来可以找个阶数比较低的,比如4阶的将算法按顺序结构直接摆下来,然后根据规律和执行次数依次转化为for循环,把表达式里面的常数经过对比替换成for循环里面的变量,转化多次不要怕麻烦,最后形成一个嵌套的循环这样就是符合一般规律的算法了,这个方法非常简单,对于搞不清楚的变换,最后可以轻易把代码写出来,写出来之后就不要考虑太多了,关键是要有耐心,肯定可以写出来的

  直接调用这个方法,就可以计算多元一次方程了,不过带常数项的数组要和原系数行列式数组变换一下,这个也很简单。

  测试网址:http://www.xingkong001.com/gongju/fangchengzu/

posted @ 2015-07-05 17:33  小得盈满  阅读(717)  评论(0编辑  收藏  举报