多元牛顿迭代法的 Matlab 实现
这学期的《最优化方法》课和《矩阵与数值分析》课都用到了牛顿迭代法,在《优化》里需要多元函数的牛顿迭代法,在《矩阵》里只用到一元函数的牛顿迭代法。
设计
这两门课程的上机作业都需要自己编写一个牛顿迭代法的程序,我希望这个牛顿迭代法的实现要能同时用于求解多元函数问题和一元函数问题,还要能指定初始迭代点、目标精度和最大迭代次数。
代码
最后写出来就这样:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30function [fval, xval, precision, iteration] = Newton(...
calc_fval, calc_grad, initial_point, target_precision, max_iteration)
%% 牛顿迭代法(一元或多元函数)
% INPUT:
% calc_fval (function_handle): 计算目标函数值的函数句柄
% calc_gard (function_handle): 计算目标函数梯度的函数句柄
% initial_point (vector): 初始迭代点
% target_precision (scalar): 目标精度
% max_iteration (scalar): 最大迭代次数
%
% OUTPUT:
% fval (scalar): 函数值
% xval (vector): 迭代值
% precision (scalar): 精度
% iteration (scalar): 迭代次数
%%
N = 0; % 迭代次数
xval = initial_point; % 迭代解
precision = inf;
while precision >= target_precision
if (N >= max_iteration); break; end
N = N + 1;
fval = calc_fval(xval);
grad = calc_grad(xval);
d = grad \ fval;
xval = xval - d;
precision = norm(d);
end
iteration = N;
end
多元牛顿迭代法的 Matlab 实现