【最优化理论】牛顿法+Matlab代码实现

这篇具有很好参考价值的文章主要介绍了【最优化理论】牛顿法+Matlab代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1 牛顿法简介

牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻找方程的近似根就显得特别重要。方法使用函数 f ( x ) f(x) f(x) 的泰勒级数的前面几项来寻找方程 f ( x ) = 0 f(x)=0 f(x)=0 的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 f ( x ) = 0 f(x)=0 f(x)=0 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线 性收㪉。另外该方法广泛用于计算机编程中。


2 牛顿法原理

r r r f ( x ) = 0 f(x)=0 f(x)=0 的根,选取 x 0 x_{0} x0 作为 r r r 的初始近似值,过点 ( x 0 , f ( x 0 ) ) \left(x_{0}, f\left(x_{0}\right)\right) (x0,f(x0)) 做曲线 y = f ( x ) y=f(x) y=f(x) 的切线 L L L
L : y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) L: y=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right) L:y=f(x0)+f(x0)(xx0) ,则 L L L x x x 轴交点的横坐标 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_{1}=x_{0}-\frac{f\left(x_{0}\right)}{f^{\prime}\left(x_{0}\right)} x1=x0f(x0)f(x0) ,称 x 1 x_{1} x1 r r r 的一次近似值。过点 ( x 1 , f ( x 1 ) ) \left(x_{1}, f\left(x_{1}\right)\right) (x1,f(x1)) 做曲线 y = f ( x ) y=f(x) y=f(x) 的切线,并求该切线与 × \times × 轴交点的横坐标 x 2 = x 1 − f ( x 1 ) f ′ ( x 1 ) x_{2}=x_{1}-\frac{f\left(x_{1}\right)}{f^{\prime}\left(x_{1}\right)} x2=x1f(x1)f(x1) ,称 x 2 x_{2} x2 r \mathrm{r} r 的二次近似值。重曷 以上过程,得 r r r 的近似值序列,其中, x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_{n}-\frac{f\left(x_{n}\right)}{f^{\prime}\left(x_{n}\right)} xn+1=xnf(xn)f(xn) 称为 r r r n + 1 n+1 n+1 次近似值,上式称为牛顿迭代公式。

用牛顿迭代法解非线性方程,是把非线性方程 f ( x ) = 0 f(x)=0 f(x)=0 线性化的一种近似方法。把 f ( x ) f(x) f(x) 在点 x 0 x_{0} x0 的桌邻域内展开成泰勒 级数 f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) ( x − x 0 ) 2 2 ! + ⋯ + f ( n ) ( x 0 ) ( x − x 0 ) n n ! + R n ( x ) f(x)=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)+\frac{f^{\prime \prime}\left(x_{0}\right)\left(x-x_{0}\right)^{2}}{2 !}+\cdots+\frac{f^{(n)}\left(x_{0}\right)\left(x-x_{0}\right)^{n}}{n !}+R_{n}(x) f(x)=f(x0)+f(x0)(xx0)+2!f′′(x0)(xx0)2++n!f(n)(x0)(xx0)n+Rn(x) ,取其线性部分 (即泰勒展开的前两项),并令其等于 0 ,即 f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = 0 f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)=0 f(x0)+f(x0)(xx0)=0 ,以此作为非线性方程 f ( x ) = 0 f(x)=0 f(x)=0 的近似方程, 若 f ′ ( x 0 ) ≠ 0 f^{\prime}\left(x_{0}\right) \neq 0 f(x0)=0 ,则其解为 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_{1}=x_{0}-\frac{f\left(x_{0}\right)}{f^{\prime}\left(x_{0}\right)} x1=x0f(x0)f(x0) ,这样,得到牛顿迭代法的一个朱代关系式: x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_{n}-\frac{f\left(x_{n}\right)}{f^{\prime}\left(x_{n}\right)} xn+1=xnf(xn)f(xn)

已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那 么牛顿法必定收敛。并且,如果不为 0 , 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每造代一次,牛顿法结果的有效 数字将增加一倍。


3 牛顿法推导

【最优化理论】牛顿法+Matlab代码实现
【最优化理论】牛顿法+Matlab代码实现
【最优化理论】牛顿法+Matlab代码实现


4 Matlab代码实现

下面用Matlab代码求解上面的示例。

clear;clc;

% 定义原函数
syms xx yy
fy(xx,yy) = 0.5 * xx^2 + 2 * yy^2;

% 确定迭代次数
n = 10
% 确定初始点
x0 = 1
y0 = 1
% 求初始点函数值
fy(x0,y0)
% 求函数梯度
xf = -5:0.2:5;
yf = xf';
ff = 0.5 * xf.^2 + 2 * yf.^2;
surf(xf,yf,ff)
xlabel('x')
ylabel('y')
zlabel('z')
view([119.1 40.8])
[fx,fy] = gradient(ff,0.2);

% 提取点初始点处的梯度值
t = (xf == x0) & (yf == y0);
indt = find(t);
f_grad = [fx(indt) fy(indt)]
% 求海森矩阵
syms x y
f(x,y) = 0.5 * x^2 + 2 * y^2;
H = hessian(f,[x,y])
% 迭代
for i=1:n

    % 判断是否可以跳出(如果梯度向量都接近0,就跳出)
    b = 0;
    for j = 1:length(f_grad)
        if f_grad(j) > 0.000001
            b = 1;
            break
        end
    end
    if b==0
        break
    end

    % 确定下降方向
    d = -inv(H)*(f_grad)';
    dk = d(x0,y0);
    
    % 确定步长,牛顿法步长为1
    a = 1;

    % 获取下一状态的点
    newX = [x0,y0] + dk' .* a
    x0 = newX(1);
    y0 = newX(2);

    % 更新梯度信息
    t = (xf == x0) & (yf == y0);
    indt = find(t);
    f_grad = [fx(indt) fy(indt)];

end

【最优化理论】牛顿法+Matlab代码实现
【最优化理论】牛顿法+Matlab代码实现

5 低版本Matlab报错

最近有朋友向我反应代码运行会报错,具体报错内容如下:
【最优化理论】牛顿法+Matlab代码实现
他使用的matlab版本是2016a,推测可能是低版本不支持(151)的矩阵和(511)的矩阵直接做运算,如果大家有遇到这样的报错的话,可以试一下将原代码的16、17行删去,换成以下代码应该就可以了:文章来源地址https://www.toymoban.com/news/detail-406565.html

yf = xf;
s = size(xf,2);
ff = zeros(s,s);
for i = 1 : s
    for j = 1 : s
        obj = 0.5 * xf(i)^2 + 2*yf(j)^2;
        ff(i,j) = obj;
    end
end

到了这里,关于【最优化理论】牛顿法+Matlab代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习笔记之最优化理论与方法(一)最优化问题概述

    从本节开始,将对 最优化理论与方法 进行简单认识。 无论是 最优化理论 还是 最优化方法 ,讨论的 对象 都是 最优化问题 。 关于 最优化问题 的一种简单描述:最优化问题本质上属于 决策问题 。 例如 路径选择 问题:确定达到目的地最佳路径的计量标准 。其中问题的 目

    2024年02月11日
    浏览(47)
  • 鲜奶配送站点的最优化设置问题 - MATLAB 实现

    鲜奶配送站点的最优化设置问题 - MATLAB 实现 问题描述: 鲜奶配送站点的最优化设置问题是一个经典的运筹学问题,它涉及确定最佳的鲜奶配送站点位置,以最小化总体运输成本。本文将使用 MATLAB 编程来解决这个问题,并提供相应的源代码。 解决方法: 为了解决鲜奶配送站

    2024年02月03日
    浏览(41)
  • 最优化:建模、算法与理论(优化建模)

    目前在学习 最优化:建模、算法与理论这本书,来此记录一下,顺便做一些笔记,在其中我也会加一些自己的理解,尽量写的不会那么的条条框框(当然最基础的还是要有) 本章将从常用的建模技巧开始,接着介绍统计学、信号处理、图像处理以及机器学习中常见的优化模

    2024年02月10日
    浏览(190)
  • 最优化:建模、算法与理论(优化建模——2)

    聚类分析是 统计学中的一个基本问题,其在机器学习,数据挖掘,模式识别和图像分析中有着重要应用。聚类不同于分类,在聚类问题中我们仅仅知道数据点本身,而不知道每个数据点具体的标签。聚类分析的任务就是将一些无标签的数据点按照某种相似度来进行归类,进而

    2024年02月09日
    浏览(51)
  • 最优化:建模、算法与理论(典型优化问题

    4.1.1 基本形式和应用背景 再次说明一下,其实这本书很多的内容之前肯定大家都学过,但是我觉得这本书和我们之前学的东西的出发角度不一样,他更偏向数学,也多一个角度让我们去理解 线性规划问题的一般形式如下: min ⁡ x ∈ R n c T x s . t . A x = b G x ≤ e (4.1.1) min_{x{

    2024年02月09日
    浏览(271)
  • 风光柴储微电网最优化经济调度模型(Matlab+Yalmip+Cplex)——附代码

    目录 摘要: 1.微电网模型 2.微电网经济调度的目标函数 3.微电网经济调度的约束条件 3.1设备自身约束: 3.2功率平衡约束: 4.Yalmip+Cplex 4.1 Yalmip 4.2 Cplex 5.运行图片: 6.本文Matlab代码实现 微电网优化调度作为智能电网优化的重要组成部分,对降低能耗、环境污染具有重要 意义

    2024年02月02日
    浏览(65)
  • (最优化理论与方法)第一章最优化简介-第二节:最优化典型实例之稀疏优化和低秩矩阵恢复

    考虑下面线性方程组的求解问题,其中 x ∈ R n , b ∈ R m xin R^{n},bin R^{m} x ∈ R n , b ∈ R m ,矩阵 A ∈ R m × n Ain R^{m×n} A ∈ R m × n ,且向量 b b b 的维数远小于向量 x x x 的维数,也即 m m m n n n A x = b Ax=b A x = b 在相关问题中,当我们建立这样的模型后,常常希望 解出向量

    2024年02月08日
    浏览(46)
  • 最优化理论-线性规划的标准形

    目录 一、引言 二、线性规划的标准形 1. 线性规划的定义 2. 线性规划的标准形 3. 线性规划的约束条件 三、线性规划的求解方法 1. 单纯形法 2. 内点法 3. 割平面法 四、线性规划的应用 1. 生产计划 2. 运输问题 3. 投资组合问题 五、总结 最优化理论是数学中的一个重要分支,它

    2024年02月07日
    浏览(37)
  • 利用 MATLAB 编程实现乘子法求解约束最优化问题。 拟 Newton 法

    1、画出 PH 法的算法流程图; 2、MATLAB 编写 PH 法求解约束优化问题的函数,无约束子问题用精确一 维搜索的拟 Newton 法((函数式 M 文件,精度设为 epson 可调);编写程序(命 令式 M 文件),调用 PH 法,求解如下问题:   初始点取(10,10),按教材 P217,例 12 取不同的参

    2024年02月11日
    浏览(51)
  • 机器学习笔记之最优化理论与方法(五)凸优化问题(上)

    本节将介绍 凸优化问题 ,主要介绍 凸优化问题的基本定义 、 凸优化与非凸优化问题的区分 。 关于最优化问题 P mathcal P P 描述如下: P ⇒ { min ⁡ f ( x 1 , x 2 , ⋯   , x n ) s.t.  { G i ( x 1 , x 2 , ⋯   , x n ) ≤ 0 i = 1 , 2 , ⋯   , m H j ( x 1 , x 2 , ⋯   , x n ) = 0 j = 1 , 2 , ⋯   ,

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包