MATLAB中利用牛頓法求解目標函式的區域性最小值
主函式(main_newton.m)
% Newton法求解目標函式的區域性最小值
% Meringue
% 2017/4/1
% ---------------------------
% ---------------------------
clc
clear all
close all
% 迭代引數
x0 = -100; % 初始值
err0 = inf; % 誤差初始設為inf
iter = 0;% 迭代次數
errMax = 1e-3; % 最大容許誤差
iterMax = 100; % 最大迭代次數
% 迭代過程
x(iter+1) = x0;
while err0>errMax
% 迭代終止條件1:達到最大迭代次數
if iter == iterMax
disp('達到最大迭代次數!');
break;
end
% Newton迭代過程
iter = iter+1;
[~,dy,d2y] = func1(x(iter));
x(iter+1) = x(iter)-dy/d2y;
% 迭代終止條件2:找到滿足精度要求的解
if abs(x(iter+1)-x(iter))<errMax
disp('找到滿足精度要求的解!')
disp(['x = ',num2str(x(iter+1 ))]);
disp(['迭代次數為',num2str(iter-1)]);
break;
end
end
% 迭代結果展示
plot(x)
xlabel('t');ylabel('x')
目標函式(func1.m)
function [y,dy,d2y] = func1(x)
% y = x.^2-2
y = x.^4-2*x^2+1;
dy = 4*x^3-4*x;
d2y = 12*x^2-4;
執行結果
目標函式在x = -1取得極小值
迭代次數為10