java 拟合曲线_关于java实现自定义曲线拟合的研究

项目需要拟合曲线,使用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。

【总结】

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

java搞梯度太繁琐,远不如其他语言,真心的心累呀。

使用Java代码自定义Ribbon配置

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

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

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

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

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

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

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

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

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

杂项-Java:自定义标签

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

Java实现自定义注解开发

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

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

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

Java Annotation自定义注解详解

在开发过程中总能用到注解,但是从来没有自己定义过注解.最近赋闲在家,研究整理了一番,力求知其然知其所以然. 本文会尝试描述什么是注解,以及通过一个Demo来说明如何在程序中自定义注解.Demo没有实际 ...

随机推荐

Mysql中sql_mode详解

阅读目录 简介 sql_mode常用值 session与global 简介 MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式.这样,应用程序就能对服务器操作进 ...

python之路十一

RabbitMQ基本概念RabbitMQ , 是一个使用 erlang 编写的 AMQP (高级消息队列协议) 的服务实现. 简单来说, 就是一个功能强大的消息队列服务.通常我们谈到队列服务, 会有三 ...

BZOJ 3203 sdoi 2013 保护出题人

由于样例解释很清晰,所以很容易得到以下结论: 1.每一关都是独立的,且僵尸的相对位置不会变 2.每一关的攻击力=Max(sum(i)/dis(i)) 其实sum(i)是僵尸攻击力的前缀和,dis(i) ...

MulticastSocket 使用

/** * ServerMulticastSocketTest.java * 版权所有(C) 2014 * 创建者:cuiran 2014-1-9 下午3:22:01 */ package com.u ...

Python:黑板课爬虫闯关第四关

第四关地址:http://www.heibanke.com/lesson/crawler_ex03/ 一开始看到的时候有点蒙,不知道啥意思,说密码需要找出来但也没说怎么找啊. 别急,随便输了个昵称和密 ...

springboot 中事件监听模型的一种实现

目录 定义事件本身 定义事件源 定义监听者 一.需要实现 ApplicationListener 二.使用 @EventListener 注解 测试 项目结构 前言: 事件监听模型是一种常用的设计模式 ...

rnn-nlp-单词预测

import reader import numpy as np import tensorflow as tf # 数据参数 DATA_PATH = 'simple-examples/data/' ...

EasyTouch基本用法

EasyTouch基本用法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 hierarchy (层次面 ...

事件和winform的学习

记得现在已经不在学习winform啦,可是我们为什么还是学习啦,我感觉就是帮助我们往下一个层次进发啦,因为从控制台直接开始进入webform的学习,我们很难接受啦,估计效率也不高啦, ...

《java并发编程实战》读书笔记3--对象的组合

希望将一些现有的线程安全组件组合为更大规模的组件或程序 设计线程安全的类 如果对象中所有的域是基本类型变量,那么这些域将构成对象的全部状态.例如,LinkedList的状态就包括该链表中所有节点对象的 ...

你可能感兴趣的:(java,拟合曲线)