如何高效求解大规模Hilbert矩阵?
摘要:博客地址:https:www.cnblogs.comzylyehuo 运行效果 运行代码 clear; clc; close all; % 参数定义 n = 2; % Hilbert矩阵的维数 maxIter = 40; % 最大迭
博客地址:https://www.cnblogs.com/zylyehuo/
运行效果
运行代码
clear; clc; close all;
% ============================================ 参数定义 ============================================
n = 2; % Hilbert矩阵的维数
maxIter = 40; % 最大迭代次数
omega = 0.75; % SOR松弛因子
epsilon = 1e-2; % 迭代绝对误差限
% ============================================ 主函数调用 ============================================
main(n, maxIter, omega, epsilon);
% ============================================ SOR松弛因子优化模块 ============================================
fprintf('\n\n=========================================== SOR松弛因子优化分析 ===========================================\n');
findOptimalOmega(n, maxIter, epsilon, omega);
% ============================================ 主函数模块 ============================================
function main(n, maxIter, omega, epsilon)
fprintf('=========================================== 主程序开始 ===========================================\n');
% 生成 Hilbert 矩阵
H = myHilbert(n);
fprintf('生成的 Hilbert(%d) 矩阵为:\n', n);
disp(H);
fprintf('------------------------------------------------------------------------------------------------------------------------\n');
x_exact = ones(n, 1);
fprintf('精确解 x* = [' );
fprintf('%.16f, ', x_exact(1:end-1));
fprintf('%.16f]^T\n', x_exact(end));
% 计算右端向量 b = H * x_exact
b = H * x_exact;
fprintf('右端向量 b = [' );
fprintf('%.16f, ', b(1:end-1));
fprintf('%.16f]^T\n', b(end));
fprintf('------------------------------------------------------------------------------------------------------------------------\n');
% 高斯消去法
x_gauss = gaussianElimination(H, b);
err_gauss = norm(x_gauss - x_exact);
fprintf('高斯消去法求得解 x = [' );
fprintf('%.16f, ', x_gauss(1:end-1));
fprintf('%.16f]^T\n', x_gauss(end));
fprintf('高斯消去法绝对误差 = %.6e\n', err_gauss);
fprintf('------------------------------------------------------------------------------------------------------
