使用Matlab实现:Jacobi、Gauss-Seidel迭代
使用Matlab实现:Jacobi、Gauss-Seidel迭代
- 例题
- Jacobi迭代
- Gauss-Seidel迭代
例题
方程组 { 5 x 1 + 2 x 2 + x 3 = − 12 − x 1 + 4 x 2 + 2 x 3 = 20 2 x 1 − 3 x 2 + 10 x 3 = 3 \begin{cases} 5x_1 + 2x_2 + x_3 = -12\\ -x_1 + 4x_2 + 2x_3 = 20\\ 2x_1 - 3x_2 + 10x_3 = 3\\ \end{cases} ⎩⎪⎨⎪⎧5x1+2x2+x3=−12−x1+4x2+2x3=202x1−3x2+10x3=3 求解,当 m a x ∣ x i ( k + 1 ) − x i ( k ) ∣ ≤ 1 0 − 5 max|x_i^{(k + 1)} - x_i^{(k)}| \leq 10^{-5} max∣xi(k+1)−xi(k)∣≤10−5 时候迭代终止。
以下解答过程,上标表示迭代次数,下标表示序号。
Jacobi迭代
定义变量:
D = d i a g ( a 11 , a 22 , . . . , a n n ) , L = [ 0 − a 21 0 . . . − a i 1 . . . − a i , i − 1 0 . . . − a n 1 . . . − a n , i − 1 . . . − a n , n − 1 0 ] , U = [ 0 − a 12 . . . − a 1 , i . . . − a 1 , n . . . 0 − a i − 1 , i . . . − a i − 1 , n . . . 0 − a n − 1 , n . . . 0 ] D = diag(a_{11}, a_{22}, ..., a_{nn}),\\ L = \left[\begin{array}{cccccc} 0\\ -a_{21} & 0\\ ...\\ -a_{i1} & ... & -a_{i,i-1} & 0\\ ...\\ -a_{n1} & ... & -a_{n,i-1} & ... & -a_{n,n-1} & 0\\ \end{array}\right],\\ U = \left[\begin{array}{cccccc} 0 &-a_{12} & ... & -a_{1,i} & ... & -a_{1,n}\\ ...\\ & & 0 & -a_{i-1,i} & ... & -a_{i-1,n}\\ ...\\ & & & & 0 & -a_{n-1,n}\\ ...\\ & & & & & 0\\ \end{array}\right] D=diag(a11,a22,...,ann),L=⎣⎢⎢⎢⎢⎢⎢⎡0−a21...−ai1...−an10......−ai,i−1−an,i−10...−an,n−10⎦⎥⎥⎥⎥⎥⎥⎤,U=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0.........−a12...0−a1,i−ai−1,i......0−a1,n−ai−1,n−an−1,n0⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
其矩阵迭代形式为:
x ( k + 1 ) = B J ⋅ x ( k ) + f J B J = D − 1 ⋅ ( L + U ) , f J = D − 1 ⋅ b x^{(k+1)} = B_J \cdot x^{(k)} + f_J\\ B_J = D^{-1} \cdot (L + U), \quad f_J = D^{-1} \cdot b x(k+1)=BJ⋅x(k)+fJBJ=D−1⋅(L+U),fJ=D−1⋅b。
写出分量形式:
{ x 1 ( k + 1 ) = 1 5 ( − 12 − 2 x 2 ( k ) − x 3 ( k ) ) x 2 ( k + 1 ) = 1 4 ( 20 + x 1 ( k ) − 2 x 3 ( k ) ) x 3 ( k + 1 ) = 1 10 ( 3 − 2 x 1 ( k ) + 3 x 2 ( k ) ) \begin{cases} x_1^{(k + 1)} = \frac15 (-12 - 2 x_2^{(k)} - x_3^{(k)} )\\ x_2^{(k + 1)} = \frac14 (20 + x_1^{(k)} - 2x_3^{(k)} )\\ x_3^{(k + 1)} = \frac1{10} (3 - 2 x_1^{(k)} + 3x_2^{(k)} )\\ \end{cases} ⎩⎪⎨⎪⎧x1(k+1)=51(−12−2x2(k)−x3(k))x2(k+1)=41(20+x1(k)−2x3(k))x3(k+1)=101(3−2x1(k)+3x2(k))
写成矩阵形式:
[ x 1 ( k + 1 ) x 2 ( k + 1 ) x 3 ( k + 1 ) ] = [ 0 − 0.4 − 0.2 0.25 0 − 0.5 − 0.2 0.3 0 ] ⋅ [ x 1 ( k ) x 2 ( k ) x 3 ( k ) ] + [ − 2.4 5 0.3 ] \left[\begin{array}{c} x_1^{(k + 1)}\\ x_2^{(k + 1)}\\ x_3^{(k + 1)}\\ \end{array}\right] = \left[\begin{array}{cccc} 0 & -0.4 & -0.2\\ 0.25 & 0 & -0.5\\ -0.2 & 0.3 & 0\\ \end{array}\right] \cdot \left[\begin{array}{c} x_1^{(k)}\\ x_2^{(k)}\\ x_3^{(k)}\\ \end{array}\right] + \left[\begin{array}{c} -2.4\\ 5\\ 0.3\\ \end{array}\right] ⎣⎢⎡x1(k+1)x2(k+1)x3(k+1)⎦⎥⎤=⎣⎡00.25−0.2−0.400.3−0.2−0.50⎦⎤⋅⎣⎢⎡x1(k)x2(k)x3(k)⎦⎥⎤+⎣⎡−2.450.3⎦⎤
取初始向量: x 0 = ( 0 , 0 , 0 ) T x^0 = (0, 0, 0)^T x0=(0,0,0)T,依次按照上式进行迭代。使用Matlab进行编程求解。
a=[0,-0.4,-0.2;0.25,0,-0.5;-0.2,0.3,0];
b = [-2.4;5;0.3];
x = [0;0;0];
xx = a * x + b;
i = 0;
while norm(x - xx, inf) >= 1e-5x = xx;xx = a * x + b;i = i +1;
end
以上代码,最终 x = x i , x x = x ( i + 1 ) x = x^{i}, xx = x^{(i + 1)} x=xi,xx=x(i+1) ,最终迭代次数位 i + 1 i + 1 i+1 次,如果你需要看到更长的小数位置,可以使用以下Matlab代码,表示使用15位浮点或定点数。
format long g
运行结果为:
即精确解为 x = ( − 4 , 3 , 2 ) T x = (-4,3,2)^T x=(−4,3,2)T 。
Gauss-Seidel迭代
其矩阵迭代形式为:
x ( k + 1 ) = B G ⋅ x ( k ) + f G B G = ( D − L ) − 1 ⋅ U , f G = ( D − L ) − 1 ⋅ b x^{(k+1)} = B_G \cdot x^{(k)} + f_G\\ B_G = (D - L) ^{-1} \cdot U, \quad f_G = (D - L) ^{-1} \cdot b x(k+1)=BG⋅x(k)+fGBG=(D−L)−1⋅U,fG=(D−L)−1⋅b
使用Matlab编程求解:
d = [5,0,0;0,4,0;0,0,10];
l = [0,0,0;1,0,0;-2,3,0];
u = [0,-2,-1;0,0,-2;0,0,0];
b = [-12;20;3];
t = inv(d - l);
bg = t * u;
fg = t * b;
x = [0;0;0];
xx = [-2.4;4.4;2.1];
i = 0;
while norm(x - xx, inf) >= 1e-5x = xx;xx = bg * x + fg;i = i +1;
end
运行结果为:
同样求得精确解为 x = ( − 4 , 3 , 2 ) T x = (-4,3,2)^T x=(−4,3,2)T 。
使用Matlab实现:Jacobi、Gauss-Seidel迭代相关推荐
- 数值计算大作业:Jacobi与Gauss -Seidel迭代求解线性方程组(Matlab实现)
作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业. 我把Jacobi与Gauss -Seidel迭代求解线性方程组的数值计算作业在MATLAB中编程实现.具体的程序详细标注后放在文 ...
- 高斯—赛德尔(Gauss - Seidel)迭代法解线性方程组(Matlab程序)
%---高斯-赛德尔迭代法----- %---Gauss - Seidel iteration method clear;clc; % A=[10,-1,-2;-1,10,-2;-1,-1,5]; % ...
- jacobi matlab程序,jacobi迭代法实验MATLAB程序数值分析
jacobi迭代法实验MATLAB程序数值分析 例1. 求线性方程组 得近似解.精确解为x*=[3,2,1]'. 解:对方程进行移项就得 记为Ax=b,或写为x=B0 x+f,其中 取初始值,代入原方 ...
- 六、线性方程组求解--Jacobi和Gauss-Seidel迭代求解
六.线性方程组求解-Gauss消去.Jacobi和Gauss-Seidel迭代求解 1.消去法求解原理 求解Ax = b,首先对增广矩阵(A|b)进行初等行变换为如下三种矩阵对角阵.上三角阵.下三角阵 ...
- matlab编jacobi方法,jacobi迭代法matlab
h Matlab 线性方程组的迭代解法(Jacobi 迭代法 Gauss-Seidel 迭代法)实验报告 2008年11月09日 星期日 12:49 1.熟悉 Jacobi 迭代法,并编写 Matla ...
- C语言实现高斯-赛德尔迭代gauss seidel(附完整源码)
实现C语言高斯-赛德尔迭代gauss seidel 高斯-赛德尔迭代gauss seidel的完整源码(实现,main函数测试) 高斯-赛德尔迭代gauss seidel的完整源码(实现,main函数 ...
- Jacobi 和 Gauß-Seidel 迭代方法
Jacobi 和 Gauß-Seidel 迭代方法 这两种方法是求解线性方程组Ax = b 的方法.即使用迭代方式在已知A和b的情况下,如何求解x. Jacobi 方法 取任意x向量作为初值,迭代即可 ...
- 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组(转载)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yyywww666/article/details/42805071 算法介绍(迭代法介绍): 代码C ...
- 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组
算法介绍(迭代法介绍): 代码C语言实现; # include<stdio.h> # include<math.h> # define N 6 /* *使用雅可比迭代法和高斯- ...
最新文章
- jquery easyui datagrid 排序列
- 如何获取NumPy数组中N个最大值的索引?
- 误删除Exchange默认的会议室如何恢复?
- 这位电子工程师,你不能错过。
- 牛客题霸 [合并两个有序的数组] C++题解/答案
- [HNOIAHOI2018] 转盘(线段树维护单调栈)
- 《走遍中国》珍藏版(十一)
- opencv:灰色和彩色图像的像素直方图及直方图均值化的实现与展示
- 提交表单到弹出窗口 Submit a form into a popup
- OpenShift 4 MTC - 从 OpenShift 3 向 OpenShift 4 迁移应用
- golang for循环时修改自身的值
- 用python代码将原图转化为手绘图
- Python智能对话机器人实现
- 基于onvif协议的嵌入式设备(摄像头)开发(客户端)
- 上古卷轴ol服务器正在维护,上古卷轴ol服务器在哪 | 手游网游页游攻略大全
- 两道2016年美国高中数学竞赛题
- mysql分表 ---Merge
- 第三章微分中值定理与导数应用
- 自贸港有志青年,捂碳星球旧衣回收项目,成功引起团中央的重视
- HP V3500简要拆机流程
热门文章
- 时序数据库基本概念学习
- python:shape和reshape函数基本讲解
- Bitwig Studio 4.0.1 x64 Windows+Linux 音乐制作宿主软件
- python pdf分割_Python分割PDF
- AltiumDesigner如何绘制PCB封装
- 爬虫(2)之re 爬取淘宝网
- GestureOverlayView
- ACP slave interface 学习
- 全球与中国便携式USB摄像机市场现状及未来发展趋势(2022)
- Ubuntu 16.04 一系列软件安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法...