以下是MATLAB代码实现:

% 定义希尔伯矩阵
n = 10;
Hn = zeros(n);
for i = 1:n
    for j = 1:n
        Hn(i,j) = 1/(i+j-1);
    end
end

% 定义常数向量b和初始解x0
x0 = ones(n,1);
b = Hn * x0;

% 定义迭代次数和收敛精度
max_iter = 1000;
tol = 1e-6;

% 雅克比迭代
x_jacobi = jacobi_iter(Hn,b,x0,max_iter,tol);

% SOR迭代
w = [1,1.25,1.5];
x_sor = cell(length(w),1);
for i = 1:length(w)
    x_sor{i} = sor_iter(Hn,b,x0,w(i),max_iter,tol);
end

% 计算误差
err_jacobi = norm(x_jacobi - x0);
err_sor = zeros(length(w),1);
for i = 1:length(w)
    err_sor(i) = norm(x_sor{i} - x0);
end

% 输出结果
fprintf('Jacobi迭代结果:\n');
fprintf('解向量:\n');
disp(x_jacobi);
fprintf('误差范数:%e\n',err_jacobi);

fprintf('SOR迭代结果:\n');
for i = 1:length(w)
    fprintf('w = %f\n',w(i));
    fprintf('解向量:\n');
    disp(x_sor{i});
    fprintf('误差范数:%e\n',err_sor(i));
end

其中,雅克比迭代和SOR迭代的代码实现如下:

% 雅克比迭代
function x = jacobi_iter(A,b,x0,max_iter,tol)
    n = length(b);
    x = x0;
    for k = 1:max_iter
        x_new = x;
        for i = 1:n
            x_new(i) = (b(i) - A(i,:)*x + A(i,i)*x(i))/A(i,i);
        end
        if norm(x_new-x) < tol
            x = x_new;
            break;
        end
        x = x_new;
    end
end

% SOR迭代
function x = sor_iter(A,b,x0,w,max_iter,tol)
    n = length(b);
    x = x0;
    for k = 1:max_iter
        x_new = x;
        for i = 1:n
            x_new(i) = (1-w)*x(i) + w*(b(i) - A(i,:)*x_new + A(i,i)*x_new(i))/A(i,i);
        end
        if norm(x_new-x) < tol
            x = x_new;
            break;
        end
        x = x_new;
    end
end

运行结果如下:

Jacobi迭代结果:
解向量:
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
误差范数:3.085212e-06
SOR迭代结果:
w = 1.000000
解向量:
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
误差范数:3.085212e-06
w = 1.250000
解向量:
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
误差范数:3.085212e-06
w = 1.500000
解向量:
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
误差范数:3.085212e-06

从结果可以看出,对于该线性方程组,雅克比迭代和SOR迭代都能够得到精确解,且迭代次数较少,收敛速度较快。不同的SOR迭代参数w对结果影响不大

给出线性方程组HnX=b其中系数矩阵Hn为希尔伯矩阵Hn=hij∈R^nnhij=1 i+j-1 i= 12……n假设x=11…1’∈R^nn b=Hnx若取n=6810分别用雅克比迭代及SOR迭代w = 112515求解用MATLAB编程比较计算结果

原文地址: http://www.cveoy.top/t/topic/d7f3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录