MATLAB中利用牛顿法求解目标函数的局部最小值

来源:互联网 发布:mac桌面怎么建立文件 编辑:程序博客网 时间:2024/06/08 11:36

主函数(main_newton.m)

% Newton法求解目标函数的局部最小值% Meringue% 2017/4/1% ---------------------------% ---------------------------clcclear allclose all% 迭代参数x0 = -100; % 初始值err0 = inf; % 误差初始设为infiter = 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;    endend% 迭代结果展示plot(x)xlabel('t');ylabel('x')

目标函数(func1.m)

function [y,dy,d2y] =  func1(x)% y = x.^2-2y = x.^4-2*x^2+1;dy = 4*x^3-4*x;d2y = 12*x^2-4;

运行结果

目标函数在x = -1取得极小值
迭代次数为10


newton法迭代过程

0 3
原创粉丝点击