码迷,mamicode.com
首页 > 其他好文 > 详细

牛顿法与拟牛顿法(一)

时间:2018-05-13 13:49:49      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:速度   while   sdn   bubuko   分享   技术分享   class   误差   log   

求解非线性优化问题的有效手段

牛顿法:优点:收敛速度快      缺点:定步长迭代,有时会使函数值上升。计算量大,要求函数必须有连续的一、二阶偏导数,海森矩阵必须正定

拟牛顿法:在牛顿法的基础上加入了寻求最优步长因子

技术分享图片技术分享图片技术分享图片技术分享图片

 示例代码:求解目标函数的局部最小值

主函数:

% Newton法求解目标函数的局部最小值
% Meringue
% 2018/5/13
% ---------------------------
clc;
clear;

% 迭代参数
x0 = -10; % 初始值
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)

目标函数:

%目标函数
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;

运行结果:

技术分享图片

 

牛顿法与拟牛顿法(一)

标签:速度   while   sdn   bubuko   分享   技术分享   class   误差   log   

原文地址:https://www.cnblogs.com/Aaron12/p/9031620.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!