最速下降法求解线性方程组matlab代码
时间: 2023-07-09 09:40:17 浏览: 98
下面是最速下降法求解线性方程组的Matlab代码实现:
```matlab
% 定义系数矩阵A和常数向量b
A = [4 -1 0; -1 4 -1; 0 -1 4];
b = [15; 10; 10];
% 定义初始点x0和最大迭代次数
x0 = [0; 0; 0];
max_iter = 100;
% 定义最速下降法迭代
for i = 1:max_iter
% 计算梯度
grad = A*x0 - b;
% 计算迭代步长
alpha = (grad'*grad)/(grad'*A*grad);
% 计算下一个点
x1 = x0 - alpha*grad;
% 判断是否收敛
if norm(x1-x0) < 1e-6
break;
end
% 更新x0
x0 = x1;
end
% 输出结果
disp(['迭代次数:' num2str(i)]);
disp(['最优解:' num2str(x0')]);
```
在这个例子中,我们使用最速下降法求解线性方程组 $Ax=b$,其中 $A$ 是系数矩阵,$b$ 是常数向量。在代码中,我们首先定义了系数矩阵 $A$ 和常数向量 $b$,然后定义了初始点 $x_0$ 和最大迭代次数。接下来,我们使用一个 for 循环进行最速下降法的迭代,直到满足收敛条件为止。最后,我们输出了迭代次数和最优解。
需要注意的是,这里我们没有输出最优值,因为求解线性方程组的最优值是固定的,即 $f(x)=\frac{1}{2}x^TAx-b^Tx+\frac{1}{2}b^Tb$ 的最小值为 $-\frac{1}{2}b^T(A^{-1})b$。
阅读全文