计算行列式
时间:2006-12-28
来源:互联网
PHP代码:
<?php
function fetch_left_array($array,$n,$line){//取得余子式函数
for($i=0;$i< ($n-1);$i++)
for($j=0,$k=0;$j<$n;$j++){
if($j==$line){
continue;
}
$push_array[$i][$k] = $array[$i+1][$j];
$k++;
}
return $push_array;
}
function com_each_array($array,$n){//递归算出余子式的值,给出的行列式本身其实也可以算是余子式
if($n>3){
for($line=0;$line<$n;$line++){
if($line%2){
if($array[0][$line]==0){
$result -= 0;
}else{
$result -= $array[0][$line]*com_each_array(fetch_left_array($array,$n,$line),$n-1);
}
}else{
if($array[0][$line]==0){
$result += 0;
}else{
$result += $array[0][$line]*com_each_array(fetch_left_array($array,$n,$line),$n-1);
}
}
}
}elseif($n==3){
$result = $array[0][0]*$array[1][1]*$array[2][2]+$array[0][1]*$array[1][2]*$array[2][0]+$array[0][2]*$array[1][0]*$array[2][1]-($array[0][2]*$array[1][1]*$array[2][0]+$array[0][0]*$array[1][2]*$array[2][1]+$array[0][1]*$array[1][0]*$array[2][2]);
}elseif($n==2){
$result = $array[0][0]*$array[1][1]-$array[0][1]*$array[1][0];
}elseif($n==1){
$result = $array[0][0];
}
return $result;
}
/*
$n = 4;
$array[0][0] = 0; $array[0][1] = 2; $array[0][2] = 3; $array[0][3] = 4;
$array[1][0] = 5; $array[1][1] = 6; $array[1][2] = 7; $array[1][3] = 8;
$array[2][0] = 9; $array[2][1] = 10;$array[2][2] = 10;$array[2][3] = 12;
$array[3][0] = 13;$array[3][1] = 14;$array[3][2] = 15;$array[3][3] = 16;
echo com_each_array($array,$n);
*/
if($_POST['rows_cols']){
$n = $_POST['rows_cols'];
if($n>=10&&$n<=35){
echo "<center>计算大于等于10阶的行列式较慢</center>";
}elseif($n > 35){
echo "<center>难道你跟电脑过不去,还是在考验PHP?</center>";
exit;
}
echo "<center><form action={$_SERVER['PHP_SELF']} method=\"post\">";
for($i=0;$i < $n;$i++){
for($j=0;$j < $n;$j++){
echo "<input name=\"determinant[]\" size=\"2\" value=0>";
}
echo "<br>";
}
echo "<input type=\"hidden\" name=\"rank\" value=\"{$n}\"><input type=\"submit\" name=\"calculation\" value=\"计算\"></form></center>";
} elseif($_POST['calculation']) {
set_time_limit(0);
$begin = explode(' ', microtime());
$i=0;
$j=0;
$postarray = $_POST['determinant'];
foreach($postarray as $value){
$array[$i][$j] = $value;
if($j+1==$_POST['rank']) {
$i++;
$j = 0;
}else{
$j++;
}
}
$rs = com_each_array($array,$_POST['rank']);
echo "<center><font color=red size=5>".$rs."</font></center>";
$end = explode(' ', microtime());
$time = ($end[0]+$end[1]) - ($begin[0]+$begin[1]);
echo '<br>';
echo "执行时间:{$time}秒";
} else {
echo "<center>计算";
echo "<form action={$_SERVER['PHP_SELF']} method=\"post\"><input name=\"rows_cols\" value=1><input type=\"submit\" value=\"设 定\"></form>";
echo "阶行列式</center>";
}
?>
作者: muqiao 发布时间: 2006-12-27
:) :)
作者: jefsun 发布时间: 2006-12-28
PHP代码:
/*按行张开行列式参数说明:
$array 送进的行列式
$n 送进的行列式阶数
$line 取得$array第一行,第$line列得余子式
*/
function fetch_left_array($array,$n,$line){//取得余子式函数,
for($i=0;$i< ($n-1);$i++)
for($j=0,$k=0;$j<$n;$j++){
if($j==$line){
continue;
}
$push_array[$i][$k] = $array[$i+1][$j];
$k++;
}
return $push_array;
}
function com_each_array($array,$n){//递归算出余子式的值,给出的行列式本身其实也可以算是余子式
if($n>3){
for($line=0;$line<$n;$line++){
if($line%2){ //(-1)^($line)=-1时就减
if($array[0][$line]==0){//如果元$array[0][$line]=0,直接跳过计算后面余子式,加快运算速度
$result -= 0;
}else{
$result -= $array[0][$line]*com_each_array(fetch_left_array($array,$n,$line),$n-1);
}
}else{ //(-1)^($line)=+1时就加
if($array[0][$line]==0){//如果元$array[0][$line]=0,直接跳过计算后面余子式,加快运算速度
$result += 0;
}else{
$result += $array[0][$line]*com_each_array(fetch_left_array($array,$n,$line),$n-1);
}
}
}
}elseif($n==3){//3阶行列式得计算
$result = $array[0][0]*$array[1][1]*$array[2][2]+$array[0][1]*$array[1][2]*$array[2][0]+$array[0][2]*$array[1][0]*$array[2][1]-($array[0][2]*$array[1][1]*$array[2][0]+$array[0][0]*$array[1][2]*$array[2][1]+$array[0][1]*$array[1][0]*$array[2][2]);
}elseif($n==2){//2阶行列式得计算
$result = $array[0][0]*$array[1][1]-$array[0][1]*$array[1][0];
}elseif($n==1){//1阶行列式得计算
$result = $array[0][0];
}
return $result;
}
作者: muqiao 发布时间: 2006-12-29
作者: 玉面修罗 发布时间: 2006-12-29
作者: Verdana 发布时间: 2006-12-31
PHP代码:
<?php
function num_sort($array){//计算指定排列逆序数
$t = 0;
$length = strlen($array);
for($j=1;$j < $length;$j++){
for($i=0;$i<$length-$j;$i++){
if($array[$i]>$array[$i+1]){
$temp = $array[$i];
$array[$i] = $array[$i+1];
$array[$i+1] = $temp;
$t++;
}
}
}
return $t;
}
function gosort($array,$len){//全排列
if($len<=2){
$rs_array[0]=$array[0].$array[1];
$rs_array[1]=$array[1].$array[0];
}else{
for($i=0;$i<$len;$i++){
$leave_one=$array[$i];
$k=0;
for($j=0;$j<$len;$j++){
if($j==$i){
continue;
}else{
$tosent[$k]= $array[$j];
$k++;
}
}
$fetch = gosort($tosent,$len-1);
foreach($fetch as $comein){
$rs_array[] = $leave_one.$comein;
}
}
}
return $rs_array;
}
function calculate($array,$rank){//计算
for($k=0;$k < $rank;$k++){
$tosort[$k]=$k;
}
$sort_array = gosort($tosort,$rank);
foreach($sort_array as $menu){
$ready=pow(-1,num_sort($menu));
for($i=0;$i<$rank;$i++){
$ready *= $array[$i][$menu[$i]];
}
$result += $ready;
}
return $result;
}
/*
$n = 4;
$array[0][0] = 1; $array[0][1] = 1; $array[0][2] = 1; $array[0][3] = 1;
$array[1][0] = 1; $array[1][1] = 2; $array[1][2] = 4; $array[1][3] = 8;
$array[2][0] = 1; $array[2][1] = 3; $array[2][2] = 9; $array[2][3] = 27;
$array[3][0] = 1; $array[3][1] = 4; $array[3][2] = 16;$array[3][3] = 64;
echo calculate($array,$n);
*/
if($_POST['rows_cols']){
$n = $_POST['rows_cols'];
if($n>=10&&$n<=35){
echo "<center>计算大于等于10阶的行列式较慢</center>";
}elseif($n > 35){
echo "<center>难道你跟电脑过不去,还是在考验PHP?</center>";
exit;
}
echo "<center><form action={$_SERVER['PHP_SELF']} method=\"post\">";
for($i=0;$i < $n;$i++){
for($j=0;$j < $n;$j++){
echo "<input name=\"determinant[]\" size=\"2\" value=0>";
}
echo "<br>";
}
echo "<input type=\"hidden\" name=\"rank\" value=\"{$n}\"><input type=\"submit\" name=\"calculation\" value=\"计算\"></form></center>";
} elseif($_POST['calculation']) {
set_time_limit(0);
$begin = explode(' ', microtime());
$i=0;
$j=0;
$postarray = $_POST['determinant'];
foreach($postarray as $value){
$array[$i][$j] = $value;
if($j+1==$_POST['rank']) {
$i++;
$j = 0;
}else{
$j++;
}
}
$rs = calculate($array,$_POST['rank']);
echo "<center><font color=red size=5>".$rs."</font></center>";
$end = explode(' ', microtime());
$time = ($end[0]+$end[1]) - ($begin[0]+$begin[1]);
echo '<br>';
echo "执行时间:{$time}秒";
} else {
echo "<center>计算";
echo "<form action={$_SERVER['PHP_SELF']} method=\"post\"><input name=\"rows_cols\" value=1><input type=\"submit\" value=\"设 定\"></form>";
echo "阶行列式</center>";
}
?>
作者: muqiao 发布时间: 2007-01-02
作者: 86800787 发布时间: 2007-01-03
作者: jefsun 发布时间: 2007-01-03
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28