Jacobi(雅可比)迭代原理与matlab代码
Jacobi(雅可比)迭代原理与matlab代码
Jacobi(雅可比)迭代原理与matlab,C代码
Jacobi迭代分量形式:
x
i
(
k
+
1
)
=
1
/
a
i
i
(
b
i
?
∑
j
≠
i
i
=
1
n
a
i
j
x
j
(
k
)
)
\ x_i^{(k+1)}=1/a_{ii}(b_i-\sum_{\stackrel{i=1}{ j\neq i} }^na_{ij}x_j^{(k)})
xi(k+1)?=1/aii?(bi??j?=ii=1?∑n?aij?xj(k)?)
矩阵形式:
X
(
k
+
1
)
=
D
?
1
(
L
+
U
)
X
(
k
)
+
D
?
1
b
\ X^{(k+1)}=D^{-1}(L+U)X^{(k)}+D^{-1}b
X(k+1)=D?1(L+U)X(k)+D?1b
比较gauss seidel迭代法与J迭代法解方程组差异见图1(以3*3方程组为例),gauss seidel迭代法每次计算使用解x的最新值,而J迭代法使用上一次x的解,如果解是收敛的,那么gauss seidel迭代过程使用的最好的估计值,性能应该比J迭代法好:
Jacobi迭代法:
根据A=D-L-U将A拆分成对角矩阵D,下三角矩阵L,上三角矩阵U;
循环迭代操作迭代矩阵
x
(
k
+
1
)
=
B
J
x
(
k
)
+
g
,
其
中
B
J
=
D
?
1
?
(
L
+
U
)
,
g
=
D
?
1
b
\ x^{(k+1)}=B_Jx^{(k)}+g,其中B_J=D^{-1}*(L+U),g=D^{-1}b
x(k+1)=BJ?x(k)+g,其中BJ?=D?1?(L+U),g=D?1b;
使用为无穷范数小于等于E-6终止条件;
% Jacobi method A*X=b
clear
clc
n=input('输入问题维度 n: ');
A = zeros(n,n); %生成矩阵需要的储存单元
b = zeros(n,1); %生成矩阵需要的储存单元
Xnow = zeros(n); %生成解向量需要的储存单元
Xafter = zeros(n); %生成解向量需要的储存单元
tol = input('输入你题目中的误差: '); %生成解向量误差x(k+1)-x(k)需要的储存单元
m = 300; %最多迭代300次。超过可能有问题?
A=[4 2 3; 3 -5 2; -2 3 8];
b=[8 -14 27 ];
Xnow=[0 0 0];
k = 1; %记录迭代次数
while k <= m
err = 0;
for i = 1 : n
s = 0;
for j = 1 : n
s = s-A(i,j)*Xnow(j);
end
s = (b(i)+s)/A(i,i);
if abs(s) > err
err = abs(s);
end
Xafter(i) = Xnow(i)+s;
end
if err <= tol
break;
else
k = k+1;
for i = 1 : n
Xnow(i) = Xafter(i);
end
end
end
fprintf('Jacobi方法迭代了 %d 次 :\n', k-1);
for i = 1 : n
fprintf(' %11.8f \n', Xafter(i));
end
clear
clc
n = input('Enter number of equations, n: '); %根据提示输入题目要求的n
%构造矩阵A
for m=n
A=zeros(m,m);
for m=1:m
A(m,m)=20;
end
for m=2:m
A(m,m-1)=-8;
A(m-1,m)=-8;
end
for m=3:m
A(m,m-2)=1;
A(m-2,m)=1;
end
end
x = ones(n,1);
b = zeros(n,1);
D = diag(diag(A)); %求A的对角矩阵
L = tril(A,-1); %求A的下三角矩阵
U = triu(A,1); %求A的上三角矩阵
err = 1E-6;
%Jacobil迭代
I=eye(n);%生成单位矩阵
BJ=I-D\A; %生成迭代矩阵BJ
pJ=vrho(BJ); % 矩阵的谱半径
R_j = -log(pJ); %J迭代渐进收敛速度
g=D\b;
jacobilk = 1; %jacobil迭代次数
xJ = ones(n,1);%初始迭代向量(1,1,1,1,..)T
it_max = 200; %设定上限,万一无限循环
while jacobilk <= it_max
xjafter=BJ*xJ+g;
xJ=xjafter;
if norm(xJ,inf)
break;
end
jacobilk = jacobilk +1;
end
Jacobi(雅可比)迭代原理与matlab代码相关教程
JavaSE# 笔记【 Collection集合 Iterator迭代器 增强for循环 泛
JavaSE# 笔记【 Collection集合 Iterator迭代器 增强for循环 泛型 List接口】@Gray 第一章 Collection集合 数组 :int[] arr = new int[3]; 1、数组是引用类型。 2、数组长度是固定 3、数组可以按照索引进行查找。 4、数组可以定义为保存任意类型的数组。int[
设计模式之迭代器模式
设计模式之迭代器模式 迭代器模式 需求:编写程序展示一个学校院系结构 传统设计 问题 将学院看作学校的子类,系看作学院的子类,这样实际上是站在组织大小来进行分层次的 这样不能很好实现遍历的操作 迭代器模式是常用的设计模式,属于行为性设计模式。 如果
leetcode_树_94. 二叉树的中序遍历(前序中序后序迭代讲解)
leetcode_树_94. 二叉树的中序遍历(前序中序后序迭代讲解) 大家好,我是被白菜拱的猪。 一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy。 文章目录 文章目录 一、题目内容 二、解题思路 1、前序遍历 2、中序遍历 3、后序遍
js迭代器与生成器
js迭代器与生成器 背景 1.什么是迭代器 从一个数据集合中按照一定的顺序,不断取出数据的过程 2.迭代和循环有什么区别? 迭代强调的是依次去数据,并不保证取多少,也不保证所有的数据都要取完 遍历:把整个数据依次的全部取出 3.迭代器 对迭代过程的封装,在
Leetcode236. 二叉树的最近公共祖先--迭代
Leetcode236. 二叉树的最近公共祖先--迭代 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeN
面试题:vector迭代器什么时候会失效?
面试题:vector迭代器什么时候会失效? 在vector中,我们经常会使用迭代器iterator对vector中的元素进行索引,也经常需要将迭代器作为参数传递到vector的成员函数中,迭代器使用非常方便,但使用不当也会给我们带来巨大的麻烦,下面就深入分析vector迭代器失
「leetcode」617. 合并二叉树:【三种递归】【一种迭代】详解
「leetcode」617. 合并二叉树:【三种递归】【一种迭代】详解 本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你
「leetcode」700. 二叉搜索树中的搜索:【递归法】【迭代法】详解
「leetcode」700. 二叉搜索树中的搜索:【递归法】【迭代法】详解 本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果