IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【最优化理论】牛顿法+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?)(x?x0?) ,则 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?=x0??f(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?=x1??f(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?=xn??f(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?)(x?x0?)+2!f(x0?)(x?x0?)2?+?+n!f(n)(x0?)(x?x0?)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?)(x?x0?)=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?=x0??f(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?=xn??f(xn?)f(xn?)?

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


3 牛顿法推导

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


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

在这里插入图片描述
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:26:10  更:2022-06-01 15:27:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:32:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码