+ -
当前位置:首页 → 问答吧 → 化上三角解行列式

化上三角解行列式

时间:2007-01-11

来源:互联网

代码仍需要修改,修改好后这一行去掉
突然想起来有个程序要编,就这个

这几天忙着考试,连我的资源管理器也放了

现在把这个简单的程序编写流程写下

首先分析
复制PHP内容到剪贴板
PHP代码:
$a[0][0] = 1;$a[0][1] = 1;$a[0][2] =  1;
$a[1][0] = 1;$a[1][1] = 2;$a[1][2] =  4;
$a[2][0] = 1;$a[2][1] = 3;$a[2][2] =  9;

$i=1;

$j=1,k=0;
$a[1][0]=($a[1][0]*$a[0][0]-$a[0][0]*$a[1][0])/$a[0][0];
$j=1,k=1;
$a[1][1]=($a[1][1]*$a[0][0]-$a[0][1]*$a[1][0])/$a[0][0];
$j=1,k=2;
$a[1][2]=($a[1][2]*$a[0][0]-$a[0][2]*$a[1][0])/$a[0][0];


$j=2,k=0;
$a[2][0]=($a[2][0]*$a[0][0]-$a[0][0]*$a[2][0])/$a[0][0];
$j=2,k=1;
$a[2][1]=($a[2][1]*$a[0][0]-$a[0][1]*$a[2][0])/$a[0][0];
$j=2,k=2;
$a[2][2]=($a[2][2]*$a[0][0]-$a[0][2]*$a[2][0])/$a[0][0];


$i=2;

$j=2;$k=1;
$a[2][1]=($a[2][1]*$a[1][1]-$a[1][1]*$a[2][1])/$a[1][1];
$j=2;$k=2;
$a[2][2]=($a[2][2]*$a[1][1]-$a[1][2]*$a[2][1])/$a[1][1];

然后得到
复制PHP内容到剪贴板
PHP代码:
/*01*/$a[0][0] = 1;$a[0][1] = 1;$a[0][2] = 1;
/*02*/$a[1][0] = 1;$a[1][1] = 2;$a[1][2] = 4;
/*03*/$a[2][0] = 1;$a[2][1] = 3;$a[2][2] = 9;
/*04*/for($i=1;$i<3;$i++){
/*05*/    for($j=$i;$j<3;$j++){
/*06*/        for($k=$i-1;$k<3;$k++){
/*07*/            $a[$j][$k]=($a[$j][$k]*$a[$i-1][$i-1]-$a[$i-1][$k]*$a[$j][$i-1])/$a[$i-1][$i-1];
/*08*/        }
/*09*/    }
/*10*/}
/*12*/for($i=0;$i<3;$i++){
/*13*/    for($j=0;$j<3;$j++){
/*14*/        echo $a[$i][$j]."   ";
/*15*/    }
/*16*/    echo "<br>";
/*17*/}

运行一下不对,问题出现在哪?赶紧找
找到了哈?
第07行
$a[$j][$k]=($a[$j][$k]*$a[$i-1][$i-1]-$a[$i-1][$k]*$a[$j][$i-1])/$a[$i-1][$i-1];
红色部分是不对的,它应该是for($k=$i-1;$k<3;$k++)未开始循环$a[$j][$i-1]的值,所以改了过后的程序如下
复制PHP内容到剪贴板
PHP代码:

<?php
$a[0][0] = 1;$a[0][1] = 1;$a[0][2] = 1;
$a[1][0] = 1;$a[1][1] = 2;$a[1][2] = 4;
$a[2][0] = 1;$a[2][1] = 3;$a[2][2] = 9;
for($i=1;$i<3;$i++){
    for($j=$i;$j<3;$j++){
        $rem = $a[$j][$i-1];
        for($k=$i-1;$k<3;$k++){
            $a[$j][$k]=($a[$j][$k]*$a[$i-1][$i-1]-$a[$i-1][$k]*$rem)/$a[$i-1][$i-1];
        }
    }
}
for($i=0;$i<3;$i++){
    for($j=0;$j<3;$j++){
        echo $a[$i][$j]."   ";
    }
    echo "<br>";
}
?>

后面就是添枝加叶的问题了,核心代码已完成

[ 本帖最后由 muqiao 于 2007-1-10 21:18 编辑 ]

作者: muqiao   发布时间: 2007-01-10

恩,不错啊,

作者: popoo   发布时间: 2007-01-10

收了先:P :P

作者: popoo   发布时间: 2007-01-10

完整的程序如下
复制PHP内容到剪贴板
PHP代码:

<?php
function calculate($a,$rank){
    for($i=1;$i<$rank;$i++){
        for($j=$i;$j<$rank;$j++){
            $rem = $a[$j][$i-1];
            for($k=$i-1;$k<$rank;$k++){
                $a[$j][$k]=($a[$j][$k]*$a[$i-1][$i-1]-$a[$i-1][$k]*$rem)/$a[$i-1][$i-1];
            }
        }
    }
    $result= 1;
    for($n=0;$n<$rank;$n++){
        $result*=$a[$n][$n];
    }
    return $result;
}
/*
$a[0][0] = 1;$a[0][1] = 1;$a[0][2] = 1;
$a[1][0] = 1;$a[1][1] = 2;$a[1][2] = 4;
$a[2][0] = 1;$a[2][1] = 3;$a[2][2] = 9;
*/
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-10

还有错,不知道你们发现没有

我要改改

作者: muqiao   发布时间: 2007-01-10

先学习一下。
muqiao 辛苦了

:)

作者: jefsun   发布时间: 2007-01-10