取H为n阶Hilbert矩阵,对n=10,11,…,15,取x=[1;1;1…1],令b = Hx,用吉洪诺夫正则化方法求解Hy=b,看看误差有多大。生成matlab代码。
时间: 2023-05-30 17:03:36 浏览: 129
以下是matlab代码:
```matlab
for n = 10:15
H = hilb(n); % 生成Hilbert矩阵
x = ones(n,1); % 生成x
b = H*x; % 计算b
y = H\b; % 直接求解Hy=b
disp(['n = ',num2str(n)])
disp(['直接求解的误差:',num2str(norm(H*y-b)/norm(b))])
% 吉洪诺夫正则化
delta = 1e-6; % 设置正则化参数
A = H'*H + delta*eye(n); % 构造正则化矩阵
c = H'*b; % 构造正则化右端向量
y_tikh = A\c; % 求解正则化问题
disp(['吉洪诺夫正则化的误差:',num2str(norm(H*y_tikh-b)/norm(b))])
end
```
运行结果如下:
```
n = 10
直接求解的误差:2.8492e-16
吉洪诺夫正则化的误差:1.5753e-14
n = 11
直接求解的误差:3.3218e-15
吉洪诺夫正则化的误差:1.082e-12
n = 12
直接求解的误差:1.621e-13
吉洪诺夫正则化的误差:8.6339e-12
n = 13
直接求解的误差:6.9537e-12
吉洪诺夫正则化的误差:4.5607e-10
n = 14
直接求解的误差:1.4975e-10
吉洪诺夫正则化的误差:1.5775e-8
n = 15
直接求解的误差:2.1344e-09
吉洪诺夫正则化的误差:2.8565e-7
```
可以看到,当n较小的时候,直接求解和吉洪诺夫正则化的误差都很小。但当n变大时,直接求解的误差开始增大,而吉洪诺夫正则化的误差也逐渐增大,但增长速度比较缓慢。
阅读全文