matlab - 最速下降求解具有希尔伯特矩阵的线性系统

标签 matlab optimization mathematical-optimization numerical-methods gradient-descent

我正在使用最速下降 方法来计算具有 5x5 希尔伯特矩阵的线性系统的解。我相信代码很好,因为它给了我正确的答案。

我的问题是:

  1. 我认为需要太多迭代才能得到正确答案。我相信我可能错过了算法中的某些内容,但我现在不确定是什么。

  2. 我不确定这是否是实现该算法的最有效方法,此外,选择哪个“tol”有点令人困惑。

任何关于这些的见解都将不胜感激(尤其是 1.)。谢谢!

% Method of Steepest Descent with tol 10^-6
h = hilb(5);                            %Hilbert 5x5 matrix
b = [1;1;1;1;1];                        %solution matrix
solution = zeros(d,1);                  %Initialization 
residual = h*solution - b;
tol = 10^(-6)
count = 0; 

while residual'*residual > tol;
    roe = (residual'*residual)/(residual'*h*residual);
    solution = solution - roe*residual;
    residual = h*solution - b;
    count = count + 1;
end

count 
solution 


%Method of Steepest Descent with tol 10^-12
solution = zeros(d,1);
residual = h*solution - b;
tol = 10^(-12)
count = 0; 

while residual'*residual > tol;
    roe = (residual'*residual)/(residual'*h*residual);
    solution = solution - roe*residual;
    residual = residual - roe*h*residual;
    count = count + 1;
end

count
solution

%another_solution = invhilb(5)*b           %Check for solution

最佳答案

看起来您正确地实现了该算法(最速下降/梯度下降与精确线搜索以最小化凸二次函数)。

收敛缓慢是因为问题病态:您考虑的希尔伯特矩阵的条件数大于 400000。已知梯度下降在问题病态时很慢。 p>

改为考虑条件良好的问题,例如通过将恒等式添加到希尔伯特矩阵 (h = hilb(5)+eye(5)),相同的代码仅在 7 次迭代后终止(以及该问题的条件数矩阵小于3)。

关于matlab - 最速下降求解具有希尔伯特矩阵的线性系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39886741/

相关文章:

python - 获取 O(1) 中总和最小的数的因子

matlab - 为什么 Matlab 警告我 "preallocation not recommended"

matlab - 具有不同颜色图的子图 matlab

java - 关于HotSpot动态反优化

c - 给定数组中两个元素之间的最小距离

c - 您使用什么编码技术来优化C程序?

max - 在整数线性规划*内*使用最小/最大

multithreading - 我怎样才能在MATLAB中 'tell'每个CPU核心做什么?

c++ - MATLAB任意代码执行

julia - NLopt SLSQP 放弃了好的解决方案,取而代之的是旧的、更差的解决方案