clear; % 清空工作空间 clc; % 清空命令窗口 n = 3; % 定义矩阵维度为3 H = hilb(n) % 生成Hilbert矩阵H b = H * ones(n, 1); % 生成列向量b,其值为H的每一行元素之和 e = 0.00001; % 定义迭代停止误差阈值 for i = 1:n if H(i, i)==0
disp('对角元为零,不能求解'); % 判断H的主对角线元素是否为0,若为0则无法求解 end end %x = zeros(n, 1); x = ones(n,1)+rand(n,1); % 初始化解向量x,其值为1加上n个随机小数 k = 0; % 初始化迭代次数 kmax = 1000; % 设置最大迭代次数 r = 1; % 初始化误差 while k<=kmax & r>e
x0 = x; % 保存上一次迭代的解 for i = 1:n
s = 0;
for j = 1:i - 1 s = s + H(i, j) * x0(j); % 求解Ax=b中的Ax部分
end for j = i + 1:n s = s + H(i, j) * x0(j); % 求解Ax=b中的Ax部分 end x(i) = b(i) / H(i, i) - s / H(i, i); % 求解第i个未知数 end r = norm(x - x0, inf); % 计算误差 k = k + 1; % 迭代次数加1 end if k>kmax
disp('迭代不收敛,失败'); % 若迭代次数超过最大次数则表示迭代失败 else disp('求解成功'); x % 输出解向量x k % 输出迭代次数 end

MATLAB代码逐行解析:希尔伯特矩阵求解线性方程组

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

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