项目需要拟合曲线,使用java实现。采用了apache-commons-math3实现自定义的曲线。

作为apache开源的搞数学计算的超强的库,一直不受市场重视。为啥呢?经过研究,使用java这个强制数据类型的语言搞数学计算真是不好玩,比起python的scipy或者matlab的nlinfit函数调用,java真是low爆了。这就是社会现实,数学虽然与编程语言无关,但是编程语言对数学的实现有难易之分。

进入主题,通过java的math3实现自定义的曲线拟合。流程是:先搞清楚怎么自定义曲线,再按照math3的jar包规范编写函数,求解到最佳参数。

  • 先分析jar包封装好的多项式拟合与高斯分布的拟合,看源码,知道都包含了两个函数

public double[] gradient(double x, double... parameters){}

public double value(double x, double... parameters){}

基于我学习的既有经验,value函数是搞预测的,输入x与超参数得到计算值;而gradient是求梯度的,通过多项式函数的源码初步确定该函数对每个超参数求偏导,通过高斯分布的gradient函数确定高斯函数的gradient就是对每个参数求偏导。其中高斯函数把参数由俩(均值、方差)变成了仨(系数norm、均值、方差),直接导致了求偏导的时候返回三个梯度。

  • 自定义曲线函数 y = a*x.^2+b.*log(c*c.*x)+c./(1+exp(x))

编写java类,实现ParametricUnivariateFunction的接口,重写value与gradient方法,在value里实现公式,在gradient方法里实现公式在x处对abc的分别求导,返回长度为三的数组。此处不列代码了,本身用java搞这个的就不多,就不显摆了。

  • 调用函数

创建优化器GaussNewtonOptimizer,曲线拟合对象CurveFitter;使用函数创建一组xy数组,并在y上加噪声;拟合函数,求解得到最优的abc。

【总结】

  1. java实现曲线拟合太麻烦,不建议使用,但是项目需要的话,用java调用其他语言实现拟合并返回结果真心的慢(比如java调python得到输入流,非常慢)
  2. java搞梯度太繁琐,远不如其他语言,真心的心累呀。

关于java实现自定义曲线拟合的研究的更多相关文章

  1. 使用Java代码自定义Ribbon配置

    很多场景下,需要实现不同的微服务采用不同的策略,例如修改Ribbon的负载均衡规则等.Spring Cloud允许使用Java代码自定义Ribbon的配置. 在Spring Cloud中,Ribbon ...

  2. C#的委托与Java的自定义接口的异曲同工的同步操作

    C#的委托(以WinForm为例) 在子窗体(ChildFrm)中定义一个委托 this.CaptureListener(callback);//子窗体触发委托事件,以告诉调用的窗体 /// < ...

  3. 对一致性Hash算法,Java代码实现的深入研究(转)

    转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ...

  4. 文献综述八:基于JAVA的商品网站的研究

    一.基本信息 标题:基于JAVA的商品网站的研究 时间:2015 出版源:信息技术 文件分类:对java语言的研究 二.研究背景 本文主要介绍了系统的分析,设计和开发的全部过程. 三.具体内容 文献的 ...

  5. 【java】java反射 Field类的研究使用

    java反射 Field类的研究使用 user.getClass().getFields() 和 user.getClass().getDeclaredFields(); 的区别是什么?

  6. 杂项-Java:自定义标签

    ylbtech-杂项-Java:自定义标签 1.返回顶部 1. 一般我们说自定义标签是指JSP自定义标签.自定义标签在功能上逻辑上与javaBean 类似,都封装Java 代码.自定义标签是可重用的组 ...

  7. Java实现自定义注解开发

    Java实现自定义注解开发 一直都对注解开发挺好奇的,最近终于有时间自己实践了一把,记录一下 万一后期会用到呢 哈哈哈 首先我们了解一下自定义注解的标准示例,注解类使用 @interface 关键字修 ...

  8. Robot Framework自动化测试框架核心指南-如何使用Java编写自定义的RobotFramework Lib

    如何使用Java编写自定义的RobotFramework Lib 本文包括2个章节 1. Robot Frdamwork中如何调用java Lib库 2.使用 java编写自定义的Lib 本文作者为: ...

  9. Java Swing 自定义Dialog确认对话框

    Java Swing 自定义Dialog 需求:当点击JFrame窗口的关闭按钮时,弹框询问是否确定关闭窗口,如果是则关闭程序,否就让弹框消失什么也不做(使用Dialog). 分析:虽然Java提供了 ...

随机推荐

  1. 咸鱼入门到放弃6--jsp<一>三指令

    JSP全称是Java Server Pages 它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...

  2. 【AtCoder】【模型转化】【二分答案】Median Pyramid Hard(AGC006)

    题意: 给你一个排列,有2*n-1个元素,现在进行以下的操作: 每一次将a[i]替换成为a[i-1],a[i],a[i+1]三个数的中位数,并且所有的操作是同时进行的,也就是说这一次用于计算的a[], ...

  3. luogu P3952 时间复杂度 模拟

    题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<sta ...

  4. jade的写法

    标签直接写:p或p. 例如: p 今天自己很棒 p.今天自己很棒 则输入 <p>今天自己很棒</p> <p>今天自己很棒</p> ***jage模板记得 ...

  5. IP欺骗

    通过一番测试,我发现当我连续提交3份问卷,再换一个IP提交3个问卷,也就是连续提交了6份问卷,并没有触发网站的反爬虫机制.所以我们可以猜测对方基于IP提交问卷的频率来识别爬虫程序的.看到这里,大家可能 ...

  6. vue学习:安装及创建项目

    1.先安装npm 参考链接:https://www.cnblogs.com/Hao-Killer/p/7235398.html 查看npm版本:在终端输入:npm -v 2.在安装vue # 安装vu ...

  7. [LeetCode] Custom Sort String 自定义排序的字符串

    S and T are strings composed of lowercase letters. In S, no letter occurs more than once. S was sort ...

  8. HTML列表与表格

    border:控制边框 width:宽度 height:高度 table是表格 tr:行 td:列★ colspan:合并列★rowspan:合并行★ <!doctype html> &l ...

  9. python pymsql的用法 180903

    一.1.pymysql 的下载pip3 install pymysql2.pymysql的使用import pymysqlname=input("请输入用户名:")password ...

  10. js如何判断数字是否有小数

    //如果是5.00之类的,转换后,应该不要小数点后的位数 let num = 5.34; //let num = 5.00; let arr = num .toString().split(" ...