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

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

<?php
class 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();
?>

接下来的是雅可比方法,

<?php
class 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();
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值