如何高效求解大规模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('------------------------------------------------------------------------------------------------------
阅读全文