SOR方法:Matlab实现及示例
SOR(Successive Over-Relaxation)方法是一种迭代法,用于求解线性方程组。下面是使用 MATLAB 实现SOR方法的代码示例:
function [x, iter] = sor(A, b, omega, tolerance, maxIterations)
% 获取方程组的维度
n = size(A, 1);
% 初始化解向量和迭代次数
x = zeros(n, 1);
iter = 0;
% 开始迭代
while iter < maxIterations
xPrevious = x;
for i = 1:n
sigma = 0;
for j = 1:i-1
sigma = sigma + A(i, j) * x(j);
end
for j = i+1:n
sigma = sigma + A(i, j) * xPrevious(j);
end
x(i) = (1 - omega) * xPrevious(i) + (omega / A(i, i)) * (b(i) - sigma);
end
% 计算当前解的误差
error = norm(x - xPrevious, inf);
% 判断是否满足停止条件
if error < tolerance
break;
end
iter = iter + 1;
end
end
使用时,将系数矩阵 A、常数向量 b、松弛因子 omega、容差 tolerance 和最大迭代次数 maxIterations 传递给 sor 函数,该函数将返回线性方程组的解向量 x 和实际迭代次数 iter。
以下是一个示例,演示如何使用SOR方法求解线性方程组:
% 定义系数矩阵 A 和常数向量 b
A = [4, -1, 0; -1, 4, -1; 0, -1, 4];
b = [2; 4; 6];
% 设置SOR方法的参数
omega = 1.2;
tolerance = 1e-6;
maxIterations = 1000;
% 调用SOR方法求解
[x, iter] = sor(A, b, omega, tolerance, maxIterations);
% 输出结果
disp('线性方程组的解:');
disp(x);
disp(['实际迭代次数:' num2str(iter)]);
请注意,SOR方法的收敛性和最佳松弛因子值依赖于具体的线性方程组,可能需要进行调试和调整参数以获得最佳的结果。
原文地址: https://www.cveoy.top/t/topic/cGwj 著作权归作者所有。请勿转载和采集!