sor迭代法求解线性方程组(Matlab)
函数文件(sor.m)
该函数不含停止的误差判断条件
function [x,n] = sor(A,b,x,w,it_max)
% 求线性方程组的sor(successive over-relaxation)迭代法,调用格式为
% [x, n] = sor(A,b,x,w,it_max)
% 其中, A 为线性方程组的系数矩阵,w为权重值,b 为常数项
% it_max 为最大迭代次数
% x 为线性方程组的解,n-1为迭代次数
D = diag(diag(A));%求A的对角矩阵
L = tril(A,-1);%求A的下三角矩阵
U = triu(A,1);%求A的上三角矩阵
M = (D+w.*L)\((1-w).*D-w.*U);
beta = w.*((D+w.*L)\b);
n = 1;%迭代次数
while n <= it_max
x_after = diag(diag(M*x+beta));
x = x_after; %储存计算的值
n = n+1;
end
end
主函数文件(sor_calculate.m)
clear
clc
%A为线性方程组的系数矩阵
A = [4,3,0;
3,4,-1;
0,-1,4];
%b为常数项
b = [24,30,-24]';
%x0为迭代初始值
x0 = [1,1,1]';
%N为迭代次数
N = 2;
%w为权重值
w = 1.25;
for i = 1:N
[x, n] = sor(A,b,x0,w,i);
fprintf('第%d次sor_%.2f迭代计算的结果:\n',n-1,w);
disp(x);
end