项目需要拟合曲线,使用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. mysql的坑

    mysql安装报错: 1.The service already exists! The current server installed: 因为mysql卸载不完全. 解决方法: C:\window ...

  2. 遍历文件路径python版,java版

    python: # 获取所有txt路径列表 file_list = [] def gci(filepath): files=os.listdir(filepath) for fi in files: ...

  3. 安卓开发app在后台运行时页面数据被系统清除后操作之重启APP

    在安卓开发过程中,当点击HOME键,将app运行在后台时,然后再点击app图标进入时,遇到了如下两种情况: 1.每次打开时,app的入口页面总是被执行. 2.当运行内存被其它应用占用完时,在进入app ...

  4. Mocha+should+Karma自动化测试教程

    Mocha+should+Karma自动化测试教程 一.了解TDD与BDD 首先,为什么我们了解TDD与BDD的是什么意思? 在实际项目中,大部分都是采用BDD的形式进行开发,也就是行为驱动开发. T ...

  5. C# 数据为空,不能对NULL调用此方法或属性的解决办法

    在运行C#项目时,报出了以下错误,错误原因是数据库中的值为null时,查询时会触发该错误提示 部分源代码如下: public List<Student> findData2() { ; / ...

  6. css3实现水平垂直居中

    1.transform实现居中(未设宽高) <div id="wrap">内容</div> <style> #wrap{ padding:50p ...

  7. Python数据分析基础教程

    Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...

  8. css 定位布局

    文档流: 文档流,是指盒子按照html标签编写的顺序依次从上到下,从左到右排列.块元素占一行,行内元素在一行之内从左到在排列,先写的先排列,后写的排在后面,每个盒子都占据自己的位置. 关于定位: 可以 ...

  9. Python的numpy库中rand(),randn(),randint(),random_integers()的使用

    1.numpy.random.rand() 用法是:numpy.random.rand(d0,d1,…dn) 以给定的形状创建一个数组,并在数组中加入在[0,1]之间均匀分布的随机样本. 用法及实现: ...

  10. poj1207 3n+1 problem

    The 3n + 1 problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 60496   Accepted: 19 ...