>백엔드 개발 >PHP 튜토리얼 >数值分析(php兑现)二:线性方程组的两个解法

数值分析(php兑现)二:线性方程组的两个解法

WBOY
WBOY원래의
2016-06-13 10:38:351105검색

数值分析(php实现)二:线性方程组的两个解法
其实这个程序是早就写好的,只不过一直没有时间写上来.
这两个程序都是通过迭代的方法得到线性方程组的解的方法,一个是高斯-塞德尔迭代法,一个是雅可比迭代法

<?phpclass Gs{    private $matrix;    public function __construct($array){        $this->matrix = $array;    }    public function solve(){        $preX = array();        $nowX = array();        $cishu = 17;        $delta = 0.0001;        $matN = count($this->matrix);        for($i = 0;$i<$matN;$i++){            $preX[$i] = 1;        }        $min = 100000000;        for($n = 0;$n<$cishu;$n++){            for($i = 0;$i<$matN;$i++){//xi                $sum1 = 0;                $sum2 = 0;                for($j = 0;$j < $matN;$j++){                    if($j < $i) $sum1 += ($this->matrix[$i][$j] * $nowX[$j]);                    if($j > $i) $sum2 += ($this->matrix[$i][$j] * $preX[$j]);                }                $nowX[$i] = ($this->matrix[$i][$matN] - $sum1 - $sum2)/$this->matrix[$i][$i];                $tempMin = $nowX[$i] > $preX[$i] ? $nowX[$i]-$preX[$i]:$preX[$i]-$nowX[$i];                if($min > $tempMin) $min = $tempMin;            }             $preX = $nowX;            $str = implode(",",$nowX);            echo ($n+1).":($str)"."<br>";            if($min < $delta) break;        }    }}$a = array(    array(5,2,1,-12),    array(-1,4,2,20),    array(12,-3,10,3));$x = new Gs($a);$x->solve();?>

接下来的是雅可比方法,
<?phpclass Yacobi{    private $matrix;    public function __construct($array){        $this->matrix = $array;    }    public function solve(){        $preX = array();        $nowX = array();        $cishu = 17;        $matN = count($this->matrix);        for($i = 0;$i<$matN;$i++){            $preX[$i] = 1;        }        for($n = 0;$n<$cishu;$n++){            for($i = 0;$i<$matN;$i++){//xi                $sum = 0;                for($j = 0;$j < $matN;$j++){                    if($j != $i) $sum += ($this->matrix[$i][$j] * $preX[$j]);                }                $nowX[$i] = ($this->matrix[$i][$matN] - $sum)/$this->matrix[$i][$i];            }             $preX = $nowX;            $str = implode(",",$nowX);            echo ($n+1).":($str)"."<br>";        }    }}$a = array(    array(5,2,1,-12),    array(-1,4,2,20),    array(12,-3,10,3));$x = new Yacobi($a);$x->solve();?>

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.