算法设计克林伯格pdf_LSTM算法

算法设计克林伯格pdf_LSTM算法第一部分 levmar的安装与使用 Levenberg-Marquardt算法是求解非线性问题的一个非常好用的算法。该算法属于信赖域算法的一种,关于信赖域算法的解释可以参考这一博主的解释:关于信赖域算法理解,个人感觉很好。    Levenberg-Marquardt算法是一个开源的算法,其文件下载地址如下:http://www.netlib.org/clapack/C

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

第一部分  levmar的安装与使用 

Levenberg-Marquardt算法是求解非线性问题的一个非常好用的算法。该算法属于信赖域算法的一种,关于信赖域算法的解释可以参考这一博主的解释:关于信赖域算法理解,个人感觉很好。

       Levenberg-Marquardt算法是一个开源的算法,其文件下载地址如下:

http://www.netlib.org/clapack/CLAPACK-3.1.1-VisualStudio.zip 下载clapack

http://www.ics.forth.gr/~lourakis/levmar/levmar-2.5.tgz       下载LEVMAR

http://www.cmake.org/files/v2.8/cmake-2.8.0-win32-x86.exe   下载cmake

利用cmake将源码组织成一个工程,其具体安装可参照这篇博客:levmar安装

下面说明下dlevmar_dif()函数的参数内容。

dlevmar_dif()函数共有11个参数:

参数1:void (*func)(double *p, double *hx, int m, int n, void *adata)

就是求解的函数,需要自己构造。以其demo中wood函数为例:

void wood(double *p, double *x, int m, int n, void *data)   /* 非线性目标函数f(x1,x2,x3,x4)  */
{

register int i;
  for(i=0; i<n; i+=6){

    x[i]=10.0*(p[1] – p[0]*p[0]);                  // f(x1,x2,x3,x4) = 10*(x2 – x1*x1);
    x[i+1]=1.0 – p[0];                                  // f(x1,x2,x3,x4) = 1.0 – x1;
    x[i+2]=sqrt(90.0)*(p[3] – p[2]*p[2]);      // f(x1,x2,x3,x4) = sqrt(90.0)*(x4 – x3*x3);
    x[i+3]=1.0 – p[2];                                 //  f(x1,x2,x3,x4) = 1 – x3;  
    x[i+4]=sqrt(10.0)*(p[1]+p[3] – 2.0);      //  f(x1,x2,x3,x4) = sqrt(10.0) *(x2 + x4 – 2); 
    x[i+5]=(p[1] – p[3])/sqrt(10.0);             //  f(x1,x2,x3,x4) = (x2 – x4)/sqrt(10.0)
  }
}

参数2:double *p

输入输出参数,输入初始迭代的参数向量,输出最佳逼近的向量。

参数3:double *x

该参数为期望值向量,即为逼近的目标。

参数4:int m

参数向量P的维数。

参数5:int n

期望向量维数

参数6:int itmax

该参数表示最大迭代次数

参数7:double opts[5]

迭代过程中的一些阈值,包括最初计算阻尼系数时需要的系数、迭代结束需要的系数。如果不知道怎么设可以为NULL,代码有默认配置。

参数8:double info[LM_INFO_SZ]

返回迭代结束的一些信息,如迭代次数、结束原因等。

参数9:double *work

该参数从源码看,并没什么用,可以设为NULL。

参数10:double *covar

该参数为正交矩阵系数(记得不清了,在论文有提到,但我在自己写代码的时候没有用到),该参数可设为NULL。

参数11:void *adata

该参数为是为了当有特殊需求时才传的参数,该参数与(func*)中的void *adata一致,目前没看出怎么用,暂时设为NULL。

第二部分  自己动手编写levmar算法

    可以参考原论文:下载地址

    可以参考K. Madsen等人的《Methods for non-linear least squares problems》写得很不错,推荐看这论文:下载地址


   具体原理我就不多啰嗦,论文解释得还是挺清楚的,自我感觉需要啰嗦一下下的小问题:

1. 雅克比矩阵的求解,可根据导数的定义来近似求解雅克比矩阵,雅克比矩阵:

   jac = f'(x) = [ f(x)-f(x- delta * x) ]/(x- delta * x))

2. 海森矩阵的求解,海森矩阵的计算近似等于:雅克比矩阵的转置乘以雅克比矩阵 ==>  Hessen = jacT * jac

3. 线性系统求解“步进”,求解参数向量的“步进”Dp,这是一个求解线性系统问题;求解线性系统问题有许多方法和工具,这里我为了简单就使用了opencv中的 cvSlove()函数求解。


   根据其提供伪代码配合理论就可以很快编写出自己的levmar函数了。

   啰嗦下因为采用的求解线性系统的方法不一样,所以在迭代次数和结果上与原版levmar算有一点点差异,迭代次数可能相差几次,及结果会相差一点(一般相差不会超过0.01)。


   levmar伪代码如下:

算法设计克林伯格pdf_LSTM算法


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187205.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Yeah,我的Pygame安装成功了!(Windows Pygame 安装教程)

    Yeah,我的Pygame安装成功了!(Windows Pygame 安装教程)最近在自学python,在看完了些基础知识之后,准备写个小项目,我对照的教程是《python编程-从入门到实践》。在这本书的第二部分项目篇的第一个小项目是【外星人入侵】,这个项目需要安装pygame,书中有给出了两个下载链接:https://bitbucket.org/pygame/pygame/downloads/和http://www.lfd.uci.edu/~gohlke/pythonl…

    2022年5月10日
    49
  • redis常用命令及详解_王的命令演员资料

    redis常用命令及详解_王的命令演员资料这里写目录标题NoSQLRedisNoSQLNoSQL == Not Only SQL(不仅仅是关系型数据库)出现原因:随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的。RDBMS 和 NoSQL的对比RDBMS 结构化组织SQL数据和关系都存在单独的表中 row col操作,数据定义语言严格的一致性基础的事务NoSQL不仅仅是数

    2022年8月8日
    4
  • 感知机及其R实现

    感知机及其R实现感知机1.感知机模型定义:假设输入空间(特征空间)是χ⊆Rn\chi\subseteqR^n,输出空间是Y={+1,−1}Y=\{+1,-1\}。输入x∈χx\in\chi表示实例的特征向量,对应于输入空间的点;输出y∈Yy\inY表示实例的类别。由输入空间到输出空间的如下函数f(x)=sign(w⋅x+b)f(x)=sign(w\cdotx+b)称为感知机。其中,ww和bb为感知

    2022年8月30日
    1
  • js的api文档_响应式编程

    js的api文档_响应式编程Web3.jsAPI中文文档web3对象提供了所有方法。

    2022年8月6日
    8
  • UltraEdit 注册机使用说明

    UltraEdit 注册机使用说明请断开网络连接 或直接拔掉网线 后执行 安装完成后 点击弹出界面的 注册 按钮 然后直接点击 激活 此时 UltraEdit 检测到网络断开则弹出界面提示 脱机激活 此时启动注册机 并将 UltraEdit 激活码页面的 用户码 1 和 用户码 2 里的数字代码复制到注册机对应框中 然后点击 Generate 按钮 在注册机中产生的 Authorizatio 和 Authorizatio

    2025年9月27日
    4
  • oracle和mysql语法区别大吗_口语和语法的区别

    oracle和mysql语法区别大吗_口语和语法的区别最近需要迁移项目,将数据库由Oracle改为MySQL。由于两者的语法有部分不一样,所以需要把Oracle中能用但MySQL中不能用的函数/类型等改为MySQL中能用的,以下是总结出的部分语法区别:一、数据类型1.Number类型MySQL中是没有Number类型的,但有int/decimal类型,Oracle中的Number(5,1)对应MySQL中的decima…

    2025年11月17日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号