第九课 线性联立方程的高斯赛德尔迭代

在雅可比迭代中,{x}k+1(在上一课中被称为xnew)的所有分量都是使用{x}k(在上一课中为x)的分量推出的。因此,新的向量值完全是根据旧的向量值获得的。
然而,在对等式

第一行进行评估后,有一个新的(x1)k+1可用,它可能比(x1)k更接近真实解。在高斯-塞德尔技术中,新值(x1)k+1立即由“旧”解x中的(x1)k值来替换。在对第二行进行计算后,(x2)k+1由(x2)k进行替换,以此类推。下表显示了上式运行过程的收敛性。

很明显,比上一课的迭代速度更快
高斯-塞德尔迭代过程和上一课的因数是完全一样的,但具有一个不同的排列方式

因为在运算[U]{x}k中,行i的评估不依赖于Xi、Xi-1等,因此可以在需要时采取更新变量,看了下面的展开式能更好的理解。

右手边的值需要通过一个矩阵向量乘法和一个向量加法完成,得到下面这个方程:

这个方程为下面这个形式
这个方程和我们之前提到的‘从前迭代法’完全相同,所以可以使用subfor子程序。
计算实例:通过高斯赛德尔解方程

每个向量除以主对角线值然后重新排列得到:

因此

假设开始值为

得到

经过‘从前迭代法’,得到
第二次迭代方程为

再使用‘从前迭代法’,得到

收敛过程仍然有些慢,但会比雅可比迭代快一些。
代码如下:其中有一个主程序和两个子程序,分别为‘从前迭代法’子程序subfor,检查是否收敛的子程序checkit。

#线性联立方程的高斯赛德尔迭代
import numpy as np
import math
import B
n=3
converged=np.array([False])
u=np.zeros((n,n))
xnew=np.zeros((n,1))
a=np.array([[16,4,8],[4,5,-4],[8,-4,22]],dtype=np.float)
b=np.array([[4],[2],[5]],dtype=np.float)
x=np.array([[1],[1],[1]],dtype=np.float)
tol=1.0e-5
limit=100
print('系数矩阵')
print(a[:,0])
print('右手边向量',b[:,0])
print('初始猜测值',x[:,0])
for i in range(1,n+1):diag=a[i-1,i-1]a[i-1,:]=a[i-1,:]/diagb[i-1,0]=b[i-1,0]/diag
u[:]=0
for i in range(1,n+1):u[i-1,i:]=-a[i-1,i:]a[i-1,i:]=0
print('前几次迭代值')
iters=0
while(True):iters=iters+1xnew[:]=b[:]+np.dot(u,x)B.subfor(a,xnew)if iters<5:print(x[:,0])B.checkit(xnew,x,tol,converged)if converged==True or iters==limit:breakx[:,0]=xnew[:,0]
print('到收敛需要迭代次数',iters)
print('解向量',x[:,0])
subfor
def subfor(a,b):
#一个下三角的从前迭代法n=a.shape[0]for i in range(1,n+1):total=b[i-1]if i>1:for j in range(1,i):total=total-a[i-1,j-1]*b[j-1]b[i-1]=total/a[i-1,i-1]
checkit
def checkit(loads,oldlds,tol,converged):
#检查前后两个量的收敛性neq=loads.shape[0]big=0.0 converged[:]=Truefor i in range(1,neq+1):if abs(loads[i-1,0])>big:big=abs(loads[i-1,0])for i in range(1,neq+1):if abs(loads[i-1,0]-oldlds[i-1,0])/big>tol:converged[:]=False

终端输出结果如下:

程序结果与计算结果一致。

线性联立方程的高斯赛德尔迭代(Gauss-Seidel iteration)(python,数值积分)相关推荐

  1. C语言实现高斯-赛德尔迭代gauss seidel(附完整源码)

    实现C语言高斯-赛德尔迭代gauss seidel 高斯-赛德尔迭代gauss seidel的完整源码(实现,main函数测试) 高斯-赛德尔迭代gauss seidel的完整源码(实现,main函数 ...

  2. 线性联立方程的雅可比迭代解(jacobi Iteration).(python,数值积分)

    第八课 线性联立方程的雅可比迭代 迭代方法 在前面几节中,已经描述了线性代数方程组的"直接"解法.我们所说的"直接"是指求解方法是通过固定次数的运算得到答案.由 ...

  3. 高斯勒让德(Gauss-legendre)求解多重积分(python,数值积分)

    第四十四篇 高斯勒让德求解多重积分 多重积分 在工程分析中,经常需要在一个面积或体积上对函数进行积分.多重积分的解析方法在有限的情况下是可能的,但在这一篇中使用数值积分去求解.一维的函数积分详见重复牛 ...

  4. 高斯—赛德尔(Gauss - Seidel)迭代法解线性方程组(Matlab程序)

    %---高斯-赛德尔迭代法----- %---Gauss - Seidel iteration method clear;clc; % A=[10,-1,-2;-1,10,-2;-1,-1,5]; % ...

  5. 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组(转载)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yyywww666/article/details/42805071 算法介绍(迭代法介绍): 代码C ...

  6. 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组

    算法介绍(迭代法介绍): 代码C语言实现; # include<stdio.h> # include<math.h> # define N 6 /* *使用雅可比迭代法和高斯- ...

  7. 预处理共轭梯度(PCG)解线性联立方程(python,数值积分)

    第十四课 线性联立方程的预处理共轭梯度(PCG) 系数矩阵病态 百度解释:求解方程组时如果对数据进行较小的扰动,则得出的结果具有很大波动,这样的矩阵称为病态矩阵 在直接求解的诸多方法中,线性方程可能无 ...

  8. Python——高斯赛德尔迭代求线性方程组的根

    高斯赛德尔迭代 与雅克比迭代对比:Python--雅克比迭代求线性方程组的根 计算代码 矩阵A--方程组的系数.代码中只需改变矩阵系数即可 矩阵B--方程组等号右侧的常数. #高斯赛德尔迭代 #求解方 ...

  9. 雅可比迭代与高斯-赛德尔迭代的C++实现,及判断收敛性

    随机生成若干个 nnn 阶方阵与 nnn 阶向量构成 Ax=bAx=bAx=b 分别判断J法和GS法的收敛性 是否能收敛 报告中应生成部分不收敛的矩阵 估计J法和GS法收敛速度哪个更快 实现用J法和G ...

最新文章

  1. pandas 删除数据
  2. Android实用代码(不定期更新)
  3. Leetcode 94. 二叉树的中序遍历 解题思路及C++实现
  4. 微信公众开放平台开发05---jetty部署异常:rg.apache.jasper.JasperException: PWC6345: There is an error in invoking ja
  5. L1-051 打折 (5 分)—团体程序设计天梯赛
  6. 毕业设计《项目管理》总结06之ajax的初步使用经验
  7. 程序流程图的switch怎么表示_算法是程序的灵魂,让我们从基础开始
  8. java与python结合使用_Java与Python使用grpc跨平台调用
  9. python反编译安卓_APK反编译得工具总结(转载)
  10. 机器学习算法——GBDT
  11. 统计模型评价准则 AIC
  12. Gestalt laws
  13. 第六周助教工作总结——NWNU李泓毅
  14. 给你一个全自动的屏幕适配方案(基于SW方案)!—— 解放你和UI的双手
  15. python unpacking_python packing unpacking 组包解包
  16. 机器学习-周志华-学习记录-第一章绪论
  17. PyDraw 所见即所得的 Python GUI 绘制框架 开源代码源自 JY Lin
  18. 微信多图上传,解决android多图上传失败问题
  19. Electron理论知识 1-GN语法及使用介绍
  20. 浅谈FTP(文件传输协议)

热门文章

  1. Adobe无法写入注册表值,请检查权限(错误代码:160)
  2. 达人评测 骁龙898参数
  3. 3D设计软件快速建模你会用吗?全新设计方式等你来体验!
  4. 如何在Vivado创建一个FIFO的IP核并使用ILA工具验证
  5. 基础1-单位长度的解析
  6. Spring Boot 工程启动报错“org.springframework.context.ApplicationContextException: Unable to start ...“解决方案
  7. windows的IOCP(Input Output Completion Port,输入输出完成端口)
  8. 登陆千牛时显示服务器失败,千牛登陆云服务器
  9. mysql rds 迁移_数据库迁移:如何将数据库从本地MySQL迁移到服务器RDS上?
  10. 全球与中国4-叔戊基苯酚市场深度研究分析报告