使用matlab编制雅可比迭代法、高斯—赛德尔迭代法和超松弛迭代法解方程组Ax=b的程序。
时间: 2023-11-03 14:04:48 浏览: 126
雅可比迭代法使用matlab
以下是三种迭代法的matlab程序:
雅可比迭代法:
function [x, iter] = jacobi(A, b, x0, tol, maxiter)
% A: 系数矩阵
% b: 右端向量
% x0: 初始向量
% tol: 容差
% maxiter: 最大迭代次数
% x: 迭代得到的解
% iter: 实际迭代次数
n = length(b);
x = x0;
iter = 0;
while iter < maxiter
iter = iter + 1;
for i = 1:n
x(i) = (b(i) - A(i, 1:i-1)*x(1:i-1) - A(i, i+1:n)*x(i+1:n)) / A(i, i);
end
if norm(A*x-b) < tol
return;
end
end
高斯—赛德尔迭代法:
function [x, iter] = gauss_seidel(A, b, x0, tol, maxiter)
% A: 系数矩阵
% b: 右端向量
% x0: 初始向量
% tol: 容差
% maxiter: 最大迭代次数
% x: 迭代得到的解
% iter: 实际迭代次数
n = length(b);
x = x0;
iter = 0;
while iter < maxiter
iter = iter + 1;
for i = 1:n
x(i) = (b(i) - A(i, 1:i-1)*x(1:i-1) - A(i, i+1:n)*x(i+1:n)) / A(i, i);
end
if norm(A*x-b) < tol
return;
end
end
超松弛迭代法:
function [x, iter] = sor(A, b, x0, omega, tol, maxiter)
% A: 系数矩阵
% b: 右端向量
% x0: 初始向量
% omega: 松弛因子
% tol: 容差
% maxiter: 最大迭代次数
% x: 迭代得到的解
% iter: 实际迭代次数
n = length(b);
x = x0;
iter = 0;
while iter < maxiter
iter = iter + 1;
for i = 1:n
x(i) = (1-omega)*x(i) + omega*(b(i) - A(i, 1:i-1)*x(1:i-1) - A(i, i+1:n)*x(i+1:n)) / A(i, i);
end
if norm(A*x-b) < tol
return;
end
end
阅读全文