今天来记录一下通过数据拟合函数的代码,这里用到了commons-math3工具包进行拟合。

参考内容:https://blog.csdn.net/wufeiwua/article/details/109004452

首先导入依赖

        <dependency><groupId>org.apache.commons</groupId><artifactId>commons-math3</artifactId><version>3.6.1</version></dependency>

因为博主大学数据全都还给了老师,在同事的帮助下才实现如下代码:


import com.adc.devp.function.bean.Point;
import org.apache.commons.math3.analysis.ParametricUnivariateFunction;
import org.apache.commons.math3.fitting.SimpleCurveFitter;
import org.apache.commons.math3.fitting.WeightedObservedPoints;import java.util.Arrays;
import java.util.List;
import java.util.Objects;/*** 极化曲线拟合函数** @author: 刘朋* <br/>date:*/
class PolarizationFunction implements ParametricUnivariateFunction {private double[] parameters;/*** 定义公式* V = v0 - b * Math.log10(i) - r * i** @param i* @param parameters* @return*/@Overridepublic double value(double i, double... parameters) {double v0 = parameters[0];double b = parameters[1];double r = parameters[2];// 自定义函数return v0 - b * Math.log10(i) - r * i;}@Overridepublic double[] gradient(double i, double... parameters) {double[] gradients = new double[3];// 对 v0 求导gradients[0] = 1;// 对 b 求导gradients[1] = -Math.log10(i);// 对 r 求导gradients[2] = -i;return gradients;}/*** 拟合代码逻辑** @param points 待拟合的数据* @return*/public PolarizationFunction fitting(List<Point> points) {ParametricUnivariateFunction function = new PolarizationFunction();/*多项式函数*//*猜测值 依次为 v0 b r 。必须和 gradient 方法返回数组对应*/double[] guess = {250, 0.1, 0.1};// 初始化拟合SimpleCurveFitter curveFitter = SimpleCurveFitter.create(function, guess);// 添加数据点。带权重的点,我的理解这个点权重越大,拟合出来的曲线会更靠近这个点WeightedObservedPoints observedPoints = new WeightedObservedPoints();for (Point point : points) {observedPoints.add(point.getX(), point.getY());}/** best 为拟合结果 对应 v0 b r* 可能会出现无法拟合的情况* 需要合理设置初始值* */double[] best = curveFitter.fit(observedPoints.toList());System.out.println(Arrays.toString(best));parameters = best;return this;}/*** @param x* @return*/public double caleY(double x) {if (Objects.isNull(parameters)) {throw new RuntimeException("参数为空,请先进行拟合操作");}return this.value(x, parameters);}}
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;@Data
@EqualsAndHashCode
public class Point implements Serializable {private static final long serialVersionUID = 3256087124347421878L;private double x;private double y;public Point() {}public Point(double x, double y) {this.x = x;this.y = y;}}

在此感谢我的同事晋津对我的帮助!

Java通过坐标点进行拟合函数相关推荐

  1. R语言求拟合函数图形的交点坐标

    R语言求拟合函数图形的交点坐标 通过二分类无限逼近的方法获得的 代码如下: 1)四个曲线的数据结构 v_ac=log(vir_1) op_log=log(opp) test1=data.frame(v ...

  2. matlab rloess,比较ggplot loess拟合和loess拟合函数

    1. ggplot拟合曲线 根据钻石的克拉和价格作图,并以切割的好坏进行分组. 用geom_smooth函数对数据进行拟合,拟合方法选择局部线性回归loess,黑色曲线即为回归曲线. library( ...

  3. 最小二乘法的几种拟合函数

    目录 1.最小二乘法的原理和解决的问题 2.最小二乘法的公式解法 2.1  拟合h(x) = a * x 2.2 拟合 h(x) = a0 + a1*x 2.3拟合 h(x) = a0 + a1 *x ...

  4. 在Java绘图坐标原点在_java 绘图

    java 绘图 圆形.线条.矩形.填充 插入图片 文字 //绘图 import java.awt.*; import javax.swing.*; public class Index extends ...

  5. 数学建模入门案例一(身高与腿长的拟合函数)

    目录 ps:如果你觉得对你有帮助的话,麻烦点个赞,加个关注 简介: 编程: 简介: 根据下面数据,得出拟合函数(身高与腿长的关系) 编程: 效果: plot函数的基本调用格式为: 1.plot(y) ...

  6. (转载)一种根据纠偏数据对火星坐标进行完美拟合的方法

    一种根据纠偏数据对火星坐标进行完美拟合的方法 (2011-02-15 13:30:27) 转载▼ 标签: 地图 纠偏算法 it (原创:小牙,QQ328959,转载请注明出处) 从GPS设备取得真实坐 ...

  7. matlab拟合曲线后求导,高手留步:MATLAB五阶拟合函数,求导后离散化,输出结果是星号...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序如下: T=1978:1:2012; t1=1978:1:2012; 五阶拟合函数是f5=0.0049664*T^5-49.4903*T^4+1972 ...

  8. matlab三参数拟合函数,数据拟合,有三个参数,提示拟合参数太多,谢谢您啦!...

    出现的问题:提示拟合参数太多.请您指导,谢谢您啦! 自定义拟合函数:y = k/(1-(x/v)^m); 自变量:x; 因变量:y; 需拟合求的参数:k, v, m; 初始值分别为:0.6, 400, ...

  9. java中参数存储_Java中函数参数传递和数据存储

    值传递是将要传递的值作为一副本传递的.. 引用传递,传递的是引用对象的内存地址.. 例如: int i=4; int j=i;   //相当于把4复制了一个副本赋给了j 输出结果是i=4 ,j=4 C ...

  10. 邪恶的Java帝国是怎么欺负小函数的?

    1 小函数的运气不好,投胎到了邪恶的Java帝国,一出生就被告知了自己的悲惨地位,以及未来的悲惨人生:奴隶. 确切地说,是类的奴隶. 在Java帝国, 国王特别喜欢"类", 不待见 ...

最新文章

  1. 在Python中连接字符串的首选方法是什么?
  2. PAT乙级-1063. 计算谱半径(20)
  3. Vim自动补全神器:YouCompleteMe
  4. 分布式面试 - 分布式服务接口请求的顺序性如何保证?
  5. 博弈论(一):Nim游戏
  6. 微机原理与接口技术整理
  7. AI智能语音机器人安装 --小白如何安装智能电话机器人
  8. php繁体转为简体的函数,繁体中文转换为简体中文的PHP函数
  9. 2023年全国最新机动车签字授权人精选真题及答案10
  10. 【Alpha版本】冲刺阶段 - Day7 - 靠泊
  11. JavaWeb开发_Web前端_Ajax
  12. 出于对数据隐私信任的担忧,瑞士选民否决了数字身份计划
  13. c/c++ 标准日期和时间戳互相转化
  14. Rhyme/Spring是如何简化Java开发的(POJO、DI、AOP、模板)
  15. vs2012 官方下载地址
  16. java se6_JDK 6(Java SE Development Kit)下载_JDK 6(Java SE Development Kit)官方下载-太平洋下载中心...
  17. centos 7 升级 git 版本(通过安装 ius 源的方式)
  18. MicroStation V8
  19. [XSIM 43-3225] Cannot find design unit xil_defaultlib.multi_j_tb in library work located at xsim.dir
  20. html body自适应屏幕大小,如何让网页自适应所有屏幕宽度

热门文章

  1. 爬虫访问中,如何解决网站限制IP的问题?
  2. 航空三字代码表_国际国内城市三字代码查询-城市航空代码表;
  3. 人工势场法matlab讲解_【机器人路径规划】人工势场法
  4. 【对抗攻击代码实战】对抗样本的生成——FGSM
  5. 云之讯的短信SDK快速上手
  6. ffmpeg 反复推流_FFmpeg 推流问题记录
  7. 社交网络与社会计算课程内容梳理总结
  8. matlab help函数用法,MATLAB函数用法
  9. 华硕afudos刷bios_华硕M2N-MX SE PLUS主板 如何用afudos命令刷BIOS
  10. python123高次方程求根_GitHub - loveunk/math-advanced-algebra-notes: 根据丘维声的《高等代数》整理...