其实这个程序是早就写好的,只不过一直没有时间写上来.
这两个程序都是通过迭代的方法得到线性方程组的解的方法,一个是高斯-塞德尔迭代法,一个是雅可比迭代法
<?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();
?>
分享到:
相关推荐
《数值分析实验报告——解线性方程组的直接方法》 线性方程组是数学中的基础问题,广泛应用于工程、物理、经济等领域。...这对于深化理解数值分析中的线性方程组解法具有重要意义,也为实际问题的求解提供了有力工具。
二、非线性方程组数值解法应用实训 实验 7:非线性方程(组)数值解法的应用实训 实验目的:理解非线性方程求根的过程和算法,学习用计算机求根的一些科学计算方法和简单的编程技术。 实验内容: 1. 程序设计...
本资源是一个使用C语言实现的数值分析程序,旨在解决非线性方程组问题。该程序使用迭代法和分片二次代数插值方法来解决非线性方程组,并进行曲面拟合。 知识点1:非线性方程组 非线性方程组是指由多个非线性方程...
在数值分析领域,非线性方程组是一个重要的研究对象,它广泛存在于各种科学和工程问题中,如物理、化学、经济学、工程计算等。非线性方程组的求解是解决这些问题的关键步骤,而Java作为一种通用的编程语言,为实现...
数值计算实验报告之线性方程组直接解法 数值计算实验报告的主要目的是学习线性方程组的直接解法,并了解科学计算的方法和简单的编程技术。在本实验中,我们将学习三种不同的方法来解线性方程组:Doolittle 分解法、...
数值计算方法是信息与计算科学领域的重要分支,主要研究如何...通过大量的练习和实际案例分析,方能对这些数值方法的优缺点有更加深刻的认识,进而在面对具体的非线性方程问题时,能够灵活选择和应用合适的数值解法。
解线性方程组可以通过解两个下三角方程组实现。 4. **改进平方根法** 适用于对称矩阵,通过L-D-L^T分解,其中D是对角矩阵,L是单位下三角矩阵。这种方法能有效计算L和D,进而求解线性方程组。 5. **追赶法** 是...
总结来说,这个数值计算实验通过具体实例让学生深入理解线性方程组的直接解法,培养了他们的编程能力和科学计算思维。同时,通过使用Mathematica这样的工具,学生能够直观地看到算法的执行过程,有助于深化理论知识...
本次实验的主题是“数值分析实验之求解线性方程组实现”,主要关注如何使用编程语言(这里是Java)来解决这类问题。线性方程组通常表示为Ax = b的形式,其中A是一个系数矩阵,x是未知数向量,而b是常数项向量。解决...
线性方程组的直接解法是数值分析中的核心内容,它涉及到了多种经典算法,如高斯消去法、LU分解法、平方根法和追赶法。这些方法各有其特点和适用范围,在解决不同类型的线性方程组时能发挥重要作用。 1. **高斯消去...
本篇文章将深入探讨线性方程组的解法及其在MATLAB中的实现。 线性方程组通常表示为AX=b的形式,其中A是一个矩阵,X是未知数向量,b是常数向量。解决这类问题的关键在于理解方程组的解的存在性和唯一性。对于非齐次...
在数值分析中,由于某些线性方程组的规模过大,直接使用高斯消元法或其他直接解法可能非常耗时,这时迭代解法成为了一种有效选择。 迭代法的基本思想是利用方程组的结构,构造一个迭代公式,从一个初始猜测值开始,...
这是数值分析的一些作业实验,文件中有详细的文档对理论,实验和算法的说明,用于病态方程组求解的源代码
2. **Doolittle分解法**:这种方法将系数矩阵分解为下三角矩阵L和上三角矩阵U的乘积,即A = LU,从而将解线性方程组转化为解两个三角形系统的序列。 3. **平方根法**:通过特定的分解方式,如Cholesky分解(适用于...
实验目的主要是通过MATLAB实现线性方程组的数值解法,理解直接法和迭代法的基本思想和步骤,同时通过编程实践提高对数值计算的理解和应用能力。实验中提供的各种函数示例,有助于学生深入理解高斯消去法的不同变体...
### 数值计算实验10:非线性方程组的解法 #### 实验背景与目标 本实验属于数值计算领域中的一个重要组成部分,主要聚焦于非线性方程组的求解方法。实验旨在帮助学生深入理解并掌握两种基本的数值求解技术:二分法...
线性方程组的数值解法实验线性方程组的数值解法实验
### 数值分析求解线性方程组的迭代法实验报告知识点详解 #### 实验名称与目的概述 本次实验名为“求解线性方程组的迭代法”,旨在通过编程实现三种不同的迭代方法来求解线性方程组,并通过实际操作比较这三种方法...
"数值分析线性方程组迭代解法" 数值分析线性方程组迭代解法是数值分析中的一种重要方法,用于解决线性方程组的问题。在这篇文章中,我们将讨论线性方程组的迭代解法,包括 Jacobi 迭代法、Gauss-Seidel 迭代法、...
在数值分析领域,解线性方程组是基础且重要的任务。线性方程组的一般形式为 \( \sum_{j=1}^{n} a_{ij}x_j = b_i \),其中 \( A \) 是一个 \( n \times n \) 矩阵,\( x \) 和 \( b \) 分别是 \( n \) 维列向量。如果...