其实这个程序是早就写好的,只不过一直没有时间写上来.
这两个程序都是通过迭代的方法得到线性方程组的解的方法,一个是高斯-塞德尔迭代法,一个是雅可比迭代法
<?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();
?>
分享到:
相关推荐
解线性方程组的直接方法,数值分析实验报告, 解线性方程组的迭代法
数值分析mathematic 实现 实验1 非线性方程和方程组解法
数值分析实验之求解非线性方程组java实现的
数值分析课程的第四章 线性方程组的迭代解法课件,电子科技大学
这是数值分析的一些作业实验,文件中有详细的文档对理论,实验和算法的说明,用于病态方程组求解的源代码
数值分析实验之求解线性方程组实现 java实现的
信息与计算科学专业——一篇适用于数值计算方法期末考试的复习笔记
线性方程组的数值解法实验线性方程组的数值解法实验
数值分析课件--PPT文件,第二章:解线性方程组的直接方法,本课件介绍了解方程组的直接方法.
数值分析 计算方法 数学建模 实验报告 matlab程序
华北电力大学数值分析资料和实践,文件里面有数值计算实践代码和python3相应实现 1. 实践1:数值计算的基本概念 2. 实践2:非线性方程求根 3. 实践3:插值与拟合 4. 实践4:数值积分 5. 实践5:常微分方程...
实验名称: 求解线性方程组的迭代法 实验目的: 1. 实现三种迭代法; 2. 比较三种迭代法的差异; 3. 分析方程组的好坏以及算法的稳定性
数值计算方法课件:线性方程组的Gauss消元法.ppt
用分片二次代数插值解非线性方程组及曲面拟合的具体c语言程序,可运行!
通过本课程的学习,学会编写全主原消去法的计算程序。...要求:用随机函数随机产生一个n阶线性方程组,用不换行列的全主元法求解线性方程组,并且对该解进行验证。 matlab7.0以上版本 图形界面 实验报告
数值计算:线性方程组算法,插值法,数值积分 以上的几个算法,经本人二十小时所作。
数值分析 高斯赛德尔迭代解线性方程组 源代码matlab
线性方程组的数值解法可以分为直接法和迭代法两类。所谓直接法,就是经过有限步算术运算可求得方程组精确解的方法(不考虑舍入误差);而迭代法就是用某种极限过程去逐步逼近其精确解的方法。