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


newton法迭代过程

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值