matlab 二阶导(海森矩阵)的数值计算(附代码和示例)

这篇具有很好参考价值的文章主要介绍了matlab 二阶导(海森矩阵)的数值计算(附代码和示例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

海森矩阵中就是单值函数对自变量(可以是向量,如 x = [ x 1 , x 2 , x 3 , . . . ] \mathbf{x}=[x_1,x_2,x_3,...] x=[x1,x2,x3,...])的二阶导数:
matlab中怎么求二阶导数,matlab,最优化,matlab,矩阵,线性代数
其中元素,如G的第一行第二列元素的定义如下:
matlab中怎么求二阶导数,matlab,最优化,matlab,矩阵,线性代数
可以看出是两个一阶导数的差再除以一个微小增量。如果 x \mathbf{x} x是个二元自变量,那么:

matlab中怎么求二阶导数,matlab,最优化,matlab,矩阵,线性代数

Talk is cheap. Show me the code:

function [H]=hessian_numerical(f,x0,dx,dh)
    %计算数量场f在x0处的海森矩阵H(数值计算,差分距离dx)仅适用于实数
    n=length(x0);   
    H=zeros(n,n);
    for i=1:n
        for j=1:n
            x1=x0;
            x1(i)=x1(i)+dx;
            g2=(f(x1)-f(x0))/dx;%偏导定义

            x2=x1;
            x2(j)=x2(j)+dh;
            x3=x0;
            x3(j)=x3(j)+dh;
            g1=(f(x2)-f(x3))/dx;%偏导定义

            H(i,j)=(g1-g2)/dh;%偏导定义
        end
    end
end

如果自变量是复数,而单值函数是实数,那么可以把实部和虚部分开,当做二元函数考虑,分别求二阶偏导,相应代码修改如下:

function [H]=hessian_numerical_CtoR(f,x0,dx,dh)
    %计算数量场f在x0处的海森矩阵H(数值计算,差分距离dx)实值函数对复数的二阶导
    n=length(x0);   
    %% 实数
    Hr=zeros(n,n);
    for i=1:n
        for j=1:n
            x1=x0;
            x1(i)=x1(i)+dx;
            g2=(f(x1)-f(x0))/dx;%偏导定义

            x2=x1;
            x2(j)=x2(j)+dh;
            x3=x0;
            x3(j)=x3(j)+dh;
            g1=(f(x2)-f(x3))/dx;%偏导定义

            Hr(i,j)=(g1-g2)/dh;%偏导定义
        end
    end
     %% 复数
    Hi=zeros(n,n);
    for i=1:n
        for j=1:n
            x1=x0;
            x1(i)=x1(i)+1i*dx;
            g2=(f(x1)-f(x0))/dx;%偏导定义

            x2=x1;
            x2(j)=x2(j)+1i*dh;
            x3=x0;
            x3(j)=x3(j)+1i*dh;
            g1=(f(x2)-f(x3))/dx;%偏导定义

            Hi(i,j)=(g1-g2)/dh;%偏导定义
        end
    end
    H=Hr+1i.*Hi;%合成海森矩阵
end

注意此处并没有考虑目标函数是个复变函数,hessian_numerical_CtoR可能存在问题,请谨慎使用。

试一下hessian_numerical函数和已知解析解的对比:

fx =@(x) norm(x,2)^2; %目标函数(标量)
gx=@(x) 2.*x;%梯度解析解
Gx=@(x0) 2.*eye(3);%海森矩阵(二阶导数)解析解
rng(0)
x0=rand(3,1);
Gx_num=hessian_numerical(fx,x0,1e-6,1e-6)%数值计算海森矩阵
Gx_ana=Gx(x0)%海森矩阵解析式

结果表示虽然有些误差,但还是可以接受:
matlab中怎么求二阶导数,matlab,最优化,matlab,矩阵,线性代数
如果把微分量从1e-6调高到1e-3可以解决数值不稳定的问题:

Gx_num=hessian_numerical(fx,x0,1e-3,1e-3)%数值计算海森矩阵

matlab中怎么求二阶导数,matlab,最优化,matlab,矩阵,线性代数文章来源地址https://www.toymoban.com/news/detail-775940.html

到了这里,关于matlab 二阶导(海森矩阵)的数值计算(附代码和示例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【图像处理】海森矩阵(Hessian Matrix)及用例(基于Steger的中心提取_含代码)

    Hess矩阵是一个多元函数的二阶偏导数构成的方阵,描述了函数的 局部曲率 。Hess矩阵经常用在牛顿法中求多元函数的极值问题,将目标函数在某点领域内进行二阶泰勒展开,其中的二阶导数就是Hess矩阵。 应用在图像中,将图像中在某点领域内进行泰勒展开:   F ( x 1 + Δ x

    2023年04月08日
    浏览(40)
  • C#,数值计算,矩阵的乔莱斯基分解(Cholesky decomposition)算法与源代码

    安德烈·路易斯·乔尔斯基出生于法国波尔多以北的查伦特斯海域的蒙古扬。他在波尔多参加了Lycée e,并于1892年11月14日获得学士学位的第一部分,于1893年7月24日获得第二部分。1895年10月15日,乔尔斯基进入莱科尔理工学院,在当年223名入学学生中排名第88位。他在莱科尔理工

    2024年02月22日
    浏览(38)
  • Hessian 矩阵(海森矩阵)

    Hessian 矩阵(海森矩阵)是一个包含二阶偏导数信息的方阵,在数学和优化中起着重要作用。对于一个多元函数,其 Hessian 矩阵是由其各个变量的二阶偏导数组成的矩阵。 假设有一个函数 f ( x 1 , x 2 , … , x n ) f(x_1, x_2, dots, x_n) f ( x 1 ​ , x 2 ​ , … , x n ​ ) ,其 Hessian 矩阵

    2024年02月04日
    浏览(40)
  • 【配电网重构】基于混合整数二阶锥配电网重构研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,a半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 随着经

    2024年02月07日
    浏览(55)
  • Matlab:从文本文件中读取数值数据到矩阵

    Matlab:从文本文件中读取数值数据到矩阵 在Matlab中,我们常常需要将保存在文本文件中的数值数据读取到程序中,以便进行数据处理和分析。本文将介绍如何使用Matlab将文本文件中的数值数据导入到矩阵中。 首先,我们需要创建一个文本文件,其中包含我们希望读取的数值

    2024年02月15日
    浏览(44)
  • 用于分析脉冲类信号的二阶瞬态提取变换研究(Matlab代码实现)

      💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 ​ 文

    2024年02月08日
    浏览(47)
  • MATLAB 之 数值数据,矩阵的表示和变量及其操作

    MATLAB 数据类型较为丰富,既有数值型、字符串等基本数据类型,又有结构(Structure)、单元(Cell)等复杂的数据类型。 在 MATLAB 中,没有专门的逻辑型数据,而以数值 1 (非零)表示真,以数值 0 表示假。 MATLAB 各种数据类型都以矩阵形式存在,所以矩阵是 MATLAB 最基本的数据

    2024年02月04日
    浏览(43)
  • Matlab:将文本文件中的数值数据导入矩阵

    从存储为逗号分隔的或带分隔符的文本文件的文件中,将数值数据导入为 MATLAB® 数组。 以下示例说明如何从文本文件中导入逗号分隔的数值数据。创建样本文件,读取文件中的所有数据,然后仅读取从指定位置开始的部分数据。 创建一个名为 ph.dat 且包含逗号分隔的数据的

    2024年02月01日
    浏览(38)
  • 扩展卡尔曼滤波(EKF)估计SOC代码2详解,基于二阶RC模型(附MATLAB代码)

           上次分享了一个扩展卡尔曼滤波估计SOC的代码,得到了很多小伙伴的支持,今天再分享一个很好用的扩展卡尔曼滤波估计SOC的程序。使用MATLAB语言完成程序的编写。         有关EKF的推导及原理请看我写的另一个博客:基于扩展卡尔曼滤波的SOC估计(附MATLAB代码)文章

    2024年02月06日
    浏览(58)
  • MATLAB | 有关数值矩阵、颜色图及颜色列表的技巧整理

    这是一篇有关数值矩阵、颜色矩阵、颜色列表的技巧整合,会以随笔的形式想到哪写到哪,可能思绪会比较飘逸请大家见谅,本文大体分为以下几个部分: 数值矩阵用颜色显示 从颜色矩阵提取颜色 从颜色矩阵中提取数据 颜色列表相关函数 颜色测试图表的识别 heatmap 我们最

    2024年02月03日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包