用php计算行列式
2015-07-05 17:33
537 查看
因为有课程设计要计算多元一次方程组,所以想编个程序实现,多元一次方程组的计算最系统的方法就是利用克拉默法则求解方程组,所以只需要编写一个类或者方法求出多元一次方程组系数行列式的值和和其他几个行列式,如果系数行列式不等于零则方程组有唯一解,直接做除法运算即可,方法如下:
需要注意的地方是分母为0时因为行列式交换行较为复杂,所以在这里直接赋一个很小的值,接近于0这样求出的结果和真实值几乎没有区别,另外也没想到好的方法,希望那天有大神指出,这个方法有2个参数,就是行列式组成的二维数组和行列式阶数,关于里面的算法部分用了3次循环,可能还会有更优的方法
另外我总结了一个很简单的方法写循环有个技巧对于像矩阵行列式这样的有规律的变换,如果一下子写不出来可以找个阶数比较低的,比如4阶的将算法按顺序结构直接摆下来,然后根据规律和执行次数依次转化为for循环,把表达式里面的常数经过对比替换成for循环里面的变量,转化多次不要怕麻烦,最后形成一个嵌套的循环这样就是符合一般规律的算法了,这个方法非常简单,对于搞不清楚的变换,最后可以轻易把代码写出来,写出来之后就不要考虑太多了,关键是要有耐心,肯定可以写出来的
直接调用这个方法,就可以计算多元一次方程了,不过带常数项的数组要和原系数行列式数组变换一下,这个也很简单。
测试网址:http://www.xingkong001.com/gongju/fangchengzu/
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 file_get_contents返回空 无效解决办法
- DedeAMPZ配置php的curl扩展
- 如何创建phpinfo查看php信息?
- PHP 错误与异常 笔记与总结(15 )使用观察者模式处理异常信息
- PHP常用功能模块
- ubuntu 14.04 安装php环境
- PHP生成唯一订单号
- php结合imgareaselect实现图片裁剪
- PHP json_encode出现乱码的问题
- php超快高效率统计大文件行数
- PHP版QQ互联OAuth示例代码分享
- PHP 获取ip地址代码汇总
- PHP中$_SERVER使用说明
- php实现短信发送代码
- php 字符串函数
- 【PHP】基础学习
- php将图片以二进制保存到mysql数据库并显示
- phpMyAdmin登陆方法
- phpcms站---去除域名绑定目录中的HTML
- PHP 7 新增内容介绍