雅克比迭代法……
- 格式:doc
- 大小:133.50 KB
- 文档页数:12
雅克比迭代法雅克比迭代法是一种数值计算方法,用于求解非线性方程组的数值解。
它是一种层层逼近的迭代法,能够计算出不容易解析求解出的最终解。
而雅克比迭代法以德国数学家康托尔(Carl Gustav Jakob Jacobi)于1846年发明,因此也称为“Jacobi方法”或“Jacobi迭代法”。
它属于收敛性迭代,相比较其他迭代法,其优点在于可以减少有限步数达到收敛的程度。
许多工程应用要求精确地求解非线性方程组,因此雅克比迭代法受到了热烈关注,因而被广泛用于科学计算和工程问题中。
以其解决非线性方程组求解为主要应用,例如工程中的确定型求解,最佳化求解,和物理系统模拟,例如核物理、计算物理;可以满足复杂系统的非线性方程求解需求。
雅克比迭代法的四个基本步骤如下:(1)确定非线性方程组,包括初始猜测和期望的精度;(2)逐步求解非线性方程组。
计算第一步的近似解,使用Jacobi 迭代法,即:使用当前的近似解求出新的近似解;(3)根据Jacobi迭代法的收敛特性,采用误差判断准则判断结果的准确度,根据有关条件决定是否继续迭代;(4)得到足够精确的非线性方程组的解,并根据求解结果对后续工作进行分析和决策。
雅克比迭代法虽然十分有用,但仍有一些局限性。
其一,它只适用于方程组的求解;其二,它只适用于可容易矩阵求解的非线性方程;其三,它不能保证收敛而算法很难预估;最后,它的复杂度较高,求解方程组需要大量的计算。
雅克比迭代法在解决工程问题时发挥了重要作用。
它可以有效地求解非线性方程,可以用于复杂系统分析模型中。
因此,雅克比迭代法仍被广泛应用于许多不同的工程应用和科学计算中。
自雅克比迭代法发明以来,许多理论和应用都开发出来,为许多工程和科学应用提供了可靠的计算解决方案。
例如,在工程应用领域,雅克比迭代法的应用包括求解复杂的动态系统、控制系统优化设计、机械结构分析、结构设计与优化、热学模拟、流体力学、图像处理、卫星轨道动力学、经济模拟和遗传算法等。
Jacobi 迭代法设方程组Ax=b 中的A 是n n ⨯阶矩阵,x 和b 都是n 维列向量。
若系数矩阵A 为非奇异的且0,1,2,ii a i n ≠=L ,将A 分解为:A=D+L+U其中1122(,,,)nn D diag a a a =L21120000000n n a L a a ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦L L M M O L, 121200000n n a a a U ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦L L M M OM L 将方程组1,1,2,,nijji j a xb i n ===∑L乘以1iia ,得到等价的方程组 11(),1,2,,ni i ij j j ii j ix b a x i n a =≠=-=∑L简记为:X Bx f =+其中 B=I-D1-A=-D1-(L+U), f= D1-b我们称()x Bx f ϕ=+为迭代函数,任取初始向量(0)x x =,按照(1)()k k xBx f +=+用矩阵运算表示,完成这一步骤相当于用k L 左乘以第k-1步所形成的方程组,即形式,称这种迭代方法为Jacobi 迭代法。
Jacobi 迭代法算法简单描述:(0)(0)(0)(0)12(,,,),T n x x x x =L ( 向量初始)For 1,2,k =L For 1,2,,k n =L如果()(1)k k xx ε--≤ 停止,否则Next k用Jacobi 迭代法求解方程组实例为:1231231222213225x x x x x x x x x +-=⎧⎪++=⎨⎪++=⎩,的解,初始向量(0)(0,0,0),T x = 解 由公式知,Jacobi 迭代法为:(1)()()123(1)()()213(1)()()3121223522k k k k k k k k k x x x x x x x x x +++⎧=-+⎪=--⎨⎪=--⎩ 由初始向量(0)(0,0,0),T x=迭代可得(1)(1,3,5),T x =(2)(5,3,3),T x =--(3)(1,1,1),T x =(4)(1,1,1),T x =所以方程组的解为(1,1,1)T x =。
雅克比迭代实验目的:1.学习和掌握线性代数方程组的jacobi 迭代法。
2.运用jacobi 迭代法进行计算。
方法原理:设方程组Ax=b 的系数矩阵A 非奇异而且),...,2,1(0n i a ii =≠,将A 分裂为 A=D+L+U,可以使计算简便。
其中),,...,,(2211nn a a a diag D = ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0...............0...00 (002121)n n a a a L ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0...00...............00...02112n n a a a U A=D+L+U ,其中),,...,,(2211nn a a a diag D =⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0...............0...00 (002)121n n a a a L ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0...00...............00...02112n n a a a U 将方程组n ,...,2,1i ,b x a i n 1j j ij ==∑=乘以ii a 1,得到等价的方程组⎪⎪⎪⎭⎫ ⎝⎛-=∑≠=n i j 1j j ij i ii i x a b a 1x ,i=1,2,…n ,简记为x Bx f =+。
其中 11()B I D A D L U --=-=-+, 1f D b -=.我们称()x Bx f ϕ=+为迭代函数。
任取初始向量(0)x x =,按照(1)()k k x Bx f +=+形成迭代格式,称这种迭代方法为Jacobi 迭代法。
算法描述:Step1:给定一组x ,即初值。
Step2:用for 循环计算:x[k+1]=(b[i]-∑∑+=-=-n1i j 1i 1j ]j [x ]j ][i [a ]j [x ]j ][i [a )/a[i][i].Step3:当fabs(x[k+1]-x[k])<eps时停止。
jacobi迭代法原理一、引言Jacobi迭代法是一种数值方法,用于解线性方程组。
它是一种简单而又实用的方法,可以在计算机上高效地实现。
本文将详细介绍Jacobi 迭代法的原理。
二、线性方程组在介绍Jacobi迭代法之前,我们先来了解一下线性方程组。
一个线性方程组可以表示为:A*x = b其中A是一个n×n的矩阵,x和b是n维列向量。
我们的目标是求解x。
三、Jacobi迭代法的基本思想Jacobi迭代法的基本思想是将矩阵A分解为两个部分:D和R。
其中D是A的对角线部分,R是除对角线外的部分。
例如,对于下面这个3×3的矩阵:A = [4 1 0; 1 4 1; 0 1 4]我们可以将其分解为:D = [4 0 0; 0 4 0; 0 0 4]R = [0 -1 0; -1 0 -1; 0 -1 0]然后我们可以将原方程组表示为:(D+R)*x = b进一步化简得到:D*x = b - R*x这就是Jacobi迭代法的基本式子。
四、Jacobi迭代法的算法流程Jacobi迭代法的算法流程如下:1. 将矩阵A分解为D和R。
2. 初始化x为一个任意的向量。
3. 对于每个迭代步骤,计算新的x值:x(i) = (b(i) - R(i)*x(i-1)) / D(i,i)4. 重复第3步,直到收敛。
五、Jacobi迭代法的收敛性Jacobi迭代法并不总是能够收敛。
如果矩阵A不满足对角线严格占优条件,则可能会出现发散的情况。
对于一个n×n的矩阵A,如果它满足以下条件之一,则称其为对角线严格占优:1. 对于所有i=1,2,...,n,有|a(i,i)| > ∑|a(i,j)| (j≠i)2. 对于所有i=1,2,...,n,有|a(i,i)| > ∑|a(j,i)| (j≠i)如果矩阵A满足对角线严格占优条件,则Jacobi迭代法一定会收敛。
六、Jacobi迭代法的优缺点Jacobi迭代法具有以下优点:1. 简单易懂:相较于其他数值方法,Jacobi迭代法更加简单易懂。
jacobi迭代法原理Jacobi迭代法是一种解线性方程组的方法,用于求解形如Ax=b的线性方程组。
其基本原理是通过迭代逼近的方法逐步优化解的精度,直至满足所需的精度要求。
假设我们要求解的线性方程组为n个未知数,即有n个方程。
Jacobi迭代法的关键思想是将每个未知数的解按照某种次序进行更新,并且在更新过程中以当前的解作为项的更新依据,而不是使用“全局”的解。
首先,我们将线性方程组表示为一个矩阵形式:Ax=b,其中A是n×n的系数矩阵,x是n×1的未知数向量,b是n×1的常数向量。
然后,我们将A矩阵分解为两个矩阵D和R,其中D是A的对角线矩阵,R是A去掉对角线元素后的剩余矩阵。
即A=D+R。
接下来,我们将方程组改写为迭代的形式:Dx^{(k+1)} = -R*x^{(k)} + b,其中x^{(k)}表示第k次迭代的解。
根据上述迭代公式,我们可以得到每次迭代的更新公式为x_i^{(k+1)} = (-1/D_{ii}) * (Sum(R_{ij} * x_j^{(k)}) - b_i),其中Sum表示对j的求和,i表示第i个未知数。
Jacobi迭代法的迭代过程就是根据上述更新公式,依次对每个未知数进行更新,直至解满足所需精度要求或达到最大迭代次数。
需要注意的是,为了Jacobi迭代法的收敛,系数矩阵A中的对角线元素必须非零,并且非对角线元素的绝对值之和必须小于每个对角线元素的绝对值。
总的来说,Jacobi迭代法通过逐个更新未知数的解,通过迭代逼近的方式求解线性方程组。
它的优点是易于理解和实现,但缺点是收敛速度较慢,对于大型问题可能需要较多的迭代次数。
解:由x=[1;2;3],算出b=[-3; 7;6]知:X1=(2*X3-3)/3X2=(-X3+7)/2X3=(2X1-X2+6)/21.雅克比法:X1(1)=0;X2(1)=0;X3(1)=0;for i=1:50X1(i+1)= (2*X3(i)-3)/3;X2(i+1)=(-X3(i)+7)/2;X3(i+1)=(2*X1(i)-X2(i)+6)/2;End迭代50次结果如下:X1 =Columns 1 through 110 -1.0000 1.0000 -0.8333 1.0000 -0.6806 1.0000 -0.5405 1.0000 -0.4121 1.0000Columns 12 through 22-0.2945 1.0000 -0.1866 1.0000 -0.0877 1.0000 0.0029 1.0000 0.0860 1.0000 0.1622Columns 23 through 331.0000 0.2320 1.0000 0.2960 1.0000 0.3547 1.0000 0.4085 1.0000 0.4577 1.0000Columns 34 through 440.5029 1.0000 0.5444 1.0000 0.5823 1.0000 0.61711.0000 0.6490 1.0000 0.6783Columns 45 through 511.0000 0.7051 1.0000 0.7297 1.0000 0.7522 1.0000X2 =Columns 1 through 110 3.5000 2.0000 3.3750 2.0000 3.2604 2.0000 3.1554 2.0000 3.0591 2.0000Columns 12 through 222.9708 2.0000 2.8899 2.0000 2.8158 2.0000 2.7478 2.0000 2.6855 2.0000 2.6284Columns 23 through 332.0000 2.5760 2.0000 2.5280 2.0000 2.4840 2.0000 2.4437 2.0000 2.4067 2.0000Columns 34 through 442.3728 2.0000 2.3417 2.0000 2.3133 2.0000 2.2871 2.0000 2.2632 2.0000 2.2413Columns 45 through 512.0000 2.2212 2.0000 2.2027 2.0000 2.1859 2.0000X3 =Columns 1 through 110 3.0000 0.2500 3.0000 0.4792 3.0000 0.6892 3.0000 0.8818 3.0000 1.0583Columns 12 through 223.0000 1.2201 3.0000 1.3684 3.0000 1.5044 3.0000 1.6290 3.0000 1.7433 3.0000Columns 23 through 331.8480 3.0000 1.9440 3.00002.03203.0000 2.1127 3.0000 2.1866 3.0000 2.2544Columns 34 through 443.0000 2.3165 3.0000 2.3735 3.0000 2.4257 3.0000 2.4736 3.0000 2.5174 3.0000Columns 45 through 512.55763.0000 2.5945 3.0000 2.6283 3.0000 2.6593 2.高斯-赛德法:XX1(1)=0;XX2(1)=0;XX3(1)=0;for i=1:50XX1(i+1)= (2*X3(i)-3)/3;XX2(i+1)=(-X3(i)+7)/2;XX3(i+1)=(2*X1(i+1)-X2(i+1)+6)/2;End迭代50次结果如下:X1 =Columns 1 through 110 -1.0000 1.0000 -0.8333 1.0000 -0.6806 1.0000 -0.5405 1.0000 -0.4121 1.0000Columns 12 through 22-0.2945 1.0000 -0.1866 1.0000 -0.0877 1.0000 0.0029 1.0000 0.0860 1.0000 0.1622Columns 23 through 331.0000 0.2320 1.0000 0.2960 1.0000 0.3547 1.0000 0.4085 1.0000 0.4577 1.0000Columns 34 through 440.5029 1.0000 0.5444 1.0000 0.5823 1.0000 0.61711.0000 0.6490 1.0000 0.6783Columns 45 through 511.0000 0.7051 1.0000 0.7297 1.0000 0.7522 1.0000X2 =Columns 1 through 110 3.5000 2.0000 3.3750 2.0000 3.2604 2.0000 3.1554 2.0000 3.0591 2.0000Columns 12 through 222.9708 2.0000 2.8899 2.0000 2.8158 2.0000 2.7478 2.0000 2.6855 2.0000 2.6284Columns 23 through 332.0000 2.5760 2.0000 2.5280 2.0000 2.4840 2.0000 2.4437 2.0000 2.4067 2.0000Columns 34 through 442.3728 2.0000 2.3417 2.0000 2.3133 2.0000 2.2871 2.0000 2.2632 2.0000 2.2413Columns 45 through 512.0000 2.2212 2.0000 2.2027 2.0000 2.1859 2.0000X3 =Columns 1 through 110 3.0000 0.2500 3.0000 0.4792 3.0000 0.6892 3.0000 0.8818 3.0000 1.0583Columns 12 through 223.0000 1.2201 3.0000 1.3684 3.0000 1.5044 3.0000 1.6290 3.0000 1.7433 3.0000Columns 23 through 331.8480 3.0000 1.9440 3.00002.03203.0000 2.1127 3.0000 2.1866 3.0000 2.2544Columns 34 through 443.0000 2.3165 3.0000 2.3735 3.0000 2.4257 3.0000 2.4736 3.0000 2.5174 3.0000Columns 45 through 512.55763.0000 2.5945 3.0000 2.6283 3.0000 2.6593结果分析:从上面的雅可比迭代法和高斯—赛德尔迭代法这两种方法所得的实验结果可知,对于同样的矩阵,对于同样的精度,雅可比迭代法要比高斯-赛德尔迭代法慢。
雅克比迭代法和高斯赛德尔迭代法的算法描述一. 雅克比迭代法雅克比迭代法(Jacobi Iteration)是计算数值解的一种迭代方法,它遵循一个简单的步骤:给定问题的初始值,按照一定的规则,用求出某一个矩阵元素,替换当前值,得到下一个矩阵值,重复这个步骤,直到满足某一个条件,即为所求解的结果。
雅克比迭代法求解矩阵问题的一般步骤为:(1)给定初始矩阵A和右端值矩阵B,将第i行第j列的元素表示为aij,bi;(2)第i行其它元素之和定义为s(i) =∑(j≠i)|a(i, j)|,亦即∑|aij|;(3)如果s(i)不等于0,则第i行第i列元素的值更新为xi=1 (b(i) ∑(j≠i)[a(i, j)x(j)])/a(i, i)(4)重复步骤3,直到满足|X(i)X(i)|<ε(ε为设定的误差),此时x即为所求解的结果。
二. 高斯-赛德尔迭代法高斯-赛德尔迭代法(Gauss-Seidel Iteration)是另一种迭代方法,算法的基本思想也是:通过迭代,计算出当前矩阵的第i行第j列的元素xi;然后更新第i行第j列元素的值,继续迭代,直到某种条件满足,即可求出矩阵的解。
高斯-赛德尔迭代法的基本步骤为:(1)给定初始矩阵A和右端值矩阵B,将第i行第j列的元素表示为aij,bi;(2)第i行其它元素之和定义为s(i) =∑(j≠i)|a(i, j)|,亦即∑|aij|;(3)如果s(i)不等于0,则第i行第i列元素的值更新为xi=1 (b(i) ∑(j<i)[a(i, j)x(j)]∑(j>i)[a(i,j)x(j)] )/a(i, i)(4)重复步骤3,直到满足|X(i)X(i)|<ε(ε为设定的误差),此时x即为所求解的结果。
总结从上面的对比来看,雅克比迭代法和高斯赛德尔迭代法的步骤基本一致,均采用迭代的方式求解矩阵A的解X,不同的是,高斯赛德尔迭代法在更新矩阵A的第i行第i列元素时,采用把小于i的j元素的值替换成当前迭代求得的值来计算,而雅克比迭代法采用把全部j元素的值替换成当前迭代求得的值来计算。
雅克比迭代法马来西亚雅克比迭代法(Marey Jacobs Iterative Method)是一种功能最优化的数值分析方法,又称无约束最优化算法,其目的是找到函数最优值,这是一种全局最优解法,可以有效求解多变量非线性方程和非凸优化问题。
1. 雅克比迭代法的概念雅克比迭代法是数值分析方法的一种,他可以搜索多变量非线性函数的最优值。
该方法的核心思想是:在每次迭代中,通过计算函数的梯度(或偏导数)来找到新的最优值,以及搜索方向。
它基于雅克比矩阵求解多元非线性方程组,需要迭代计算,来自动找到变量最优值点,比如从一个初始点开始,沿着局部函数增加最快的方向,一直搜索到某一程度,就可以得到全局最优结果。
2. 雅克比迭代法的特点①雅克比迭代法可以基于非凸优化,这就使得在多元变量函数中找到最优解更加容易。
②它的收敛速度极快,一般只需一定的迭代周期就可以解出比较精确的解。
③雅克比迭代法具有很大的数值稳定性,它可以适应多元函数的各种变化而取得精确的结果。
3. 雅克比迭代法的应用(1)雅克比迭代法可以用于非线性最优化,用于非线性方程组和非凸优化问题。
(2)它可以用于解决多元、非线性优化问题,特别是在功能最优化技术中经常应用。
(3)它广泛应用于多目标最优化,在这种问题中,可以使用雅可比迭代法来求解最优值。
(4)它可以有效地解决期望、约束类优化问题,其中,约束可以通过增加惩罚函数的系数来改变。
4. 雅克比迭代法的缺点(1)雅可比迭代法的最佳初值特征和求解准确度有较大的依赖,这意味着对于不同的情况,要使用不同的参数,这就耗费了较多的时间;(2)雅可比迭代法因为受函数从原点出发的假定条件,所以只能较不理想的收敛到局部最优解,而不能较好的收敛到全局最优解;(3)雅可比迭代法实现起来较为复杂,对于复杂的非凸优化问题,往往可能导致求解的困难;(4)雅可比迭代法有一定的假定条件,一旦这些假定发生变化,那么最终计算出的结果就可能发生改变。
jacobi迭代法例题Jacobi迭代法是一种用于解线性方程组的迭代算法。
它的基本思想是通过迭代逼近的方式,不断更新方程组的解,直到达到所需的精度或最大迭代次数。
对于线性方程组Ax=b,Jacobi迭代法的迭代公式如下:x_i+1 = D^(-1) * (b - (L+U)x_i)其中,x_i表示第i次迭代的解向量,D是A的对角矩阵,L是A的下三角部分,U是A的上三角部分。
下面我们通过一个简单的例题来说明Jacobi迭代法的应用。
假设有以下线性方程组:3x + 2y - z = 12x - 2y + 4z = -2-x + 0.5y - z = 0首先,我们需要将方程组转化为矩阵形式。
将系数矩阵A和常数向量b分别表示为:A = [[3, 2, -1],[2, -2, 4],[-1, 0.5, -1]]b = [1, -2, 0]接下来,我们需要将系数矩阵A进行分解。
分解后的A可以表示为A = D - L - U,其中D是对角矩阵,L是严格下三角矩阵,U是严格上三角矩阵。
通过分解,我们得到:D = [[3, 0, 0],[0, -2, 0],[0, 0, -1]]L = [[0, 0, 0],[-2, 0, 0],[1, -0.5, 0]]U = [[0, -2, 1],[0, 0, 4],[0, 0, 0]]现在,我们可以开始使用Jacobi迭代法来逼近方程组的解。
首先,我们初始化解向量x为一个初始猜测向量,例如x = [0, 0, 0]。
然后,根据迭代公式进行迭代计算。
迭代计算的过程如下:第一次迭代:x_1 = D^(-1) * (b - (L+U)x_0)= [[1/3, 0, 0],[0, -1/2, 0],[0, 0, -1]] * ([1, -2, 0] - ([0, 0, 0] + [0, -2, 1] * [0, 0, 0]))= [1/3, 1, 0]第二次迭代:x_2 = D^(-1) * (b - (L+U)x_1)= [[1/3, 0, 0],[0, -1/2, 0],[0, 0, -1]] * ([1, -2, 0] - ([0, 0, 0] + [0, -2, 1] * [1/3, 1, 0]))= [4/9, 1, 1/3]继续进行迭代计算,直到满足所需的精度或达到最大迭代次数。
实验课程名称:数值分析
流程图:
②Gauss-Seidel迭代法
#include<stdio.h>
int main()
{
double x[3] = {0, 0, 0};
double a[3][3] = {6,2,-1,1,4,-2,-3,1,4}; double y[3] = {-3,2,4}; 开始
阶数n,系数矩
阵,初始向量
for(i=0;i<n;i++)
i=j
Y
N
total += a[i][j] *
x[j]
e = e +
ABS(x[j],
结束
double d[3][3],g[3];
int round = 5, i,j;
for (i=0; i<3; ++i)
{
g[i] = y[i] / a[i][i];
for (j=0; j<3; ++j)
{
d[i][j] = i==j ? 0 : -a[i][j]/a[i][i]; }
}
while (round--) {
for (i=0; i<3; ++i)
{
x[i] = g[i];
for (j=0; j<3; ++j)
{
x[i] += d[i][j] * x[j];
}
printf("%lf", x[i]);
}
printf("\n");
}
}
结果:
流程图:
{ a[i]=(float *)malloc(n*sizeof(float)); } return a;
}
float matrix_category(float* x,int n)
{ int i; float temp=0; for(i=0;i<n;i++)
{ temp=temp+fabs(x[i]); }
return temp;
}
结果:
流程图:
return 0; }
结果:
流程图:
⑤欧拉显式方法
#include <stdio.h>
#include <conio.h>
#include <math.h>
double f(double x,double y) {
return x*pow(y,1.0/3);
}
int main()
{
int i;
开始
矩阵阶数系数矩阵
for(k=1;k<=i-1;k++)
m=m+a[i][k]*a[k][j];
a[i][j]= a[i][j]-m;
a[k][num+1]=(a[k][
num+1]-q)/a[k][k]
结束
double x,y,y0=1,dx=0.1;
double xx[11];
double euler[11],euler_2[11];
double temp;
double f(double x,double y);
for (i=0;i<11;i++)
xx[i]=i*dx;
euler[0]=y0;
for (i=1,x=0;i<11;i++,x+=dx)
euler[i]=euler[i-1]+dx*f(x,euler[i-1]);
euler_2[0]=y0;
for (i=1,x=0;i<11;i++,x+=dx)
{
temp=euler_2[i-1]+dx*f(x,euler_2[i-1]);
euler_2[i]=euler_2[i-1]+dx*(f(x,euler_2[i-1])+f(x+dx,temp))/2;
}
for (i=0,x=0;i<11;i++,x+=dx)
printf("x=%lf\teluer=%lf\teuler_2=%lf\taccu=%lf\n",x,euler[i],euler_2[i],pow(1+x*x,1.0/3)); getch();
}
结果:
流程图:
⑥欧拉隐式方法
#include<stdio.h>
#include<math.h>
#define f(x,y)(x+y)
int main()
{int m;
int i;
double a,b,y0;
double xn,yn,xn1,yn1,yn1b;
double h;
printf("\nInput the begin and end of x:");
scanf("%lf%lf",&a,&b);
printf("Input the y value at %f:",a);
scanf("%lf",&y0);
printf("Input m value[divide(%f,%f)]:",a,b);
scanf("%d",&m);
if(m<=0)
{printf("Please input a number larger than 1.\n");
return(1);
}
h=(b-a)/m;
xn=a;yn=y0;
for(i=1;i<=m;i++)
{xn1=xn+h;
yn1b=yn+h*f(xn,yn);
yn1=yn+h/2*(f(xn,yn)+f(xn1,yn1b));
printf("x%d=%f,y%d=%f\n",i,xn1,i,yn1);
xn=xn1;
yn=yn1;
}return(0);
}
结果:
流程图:
二、实验结果及分析
雅克比迭代法的全部分量都是间接利用,由于新值比旧值好,Gauss-Seidel迭代法直接对算出的分量加以使用,这样使得迭代的收敛情况有所改善,而超松弛法是在Gauss-Seidel迭代法的基础上,应用加速收敛思想而构造的一种方法;欧拉公式和梯形公式在计算上有明显的区别,
欧拉公式的特点是可以有U
N 直接计算U
n+1
,也就是显式的,而梯形公式右端也有U
n+1
,必须通过解
方程才能求得,这类是隐式的。
从算法的角度看显式远比隐式方便,隐式通常用迭代法求解。
三、实验小节、建议及体会
任何一种方法都有它的优点和局限性,只有找到一种方法能够解决我们的问题,又尽量减少出错,减少计算量就是符合这个问题的好方法。
良好的编程习惯有助于检查错误,也可以增强程序的可阅读性。