java 实现N次多项式回归

news2025/1/11 3:00:08

使用的类库 

org.apache.commons.math3

maven

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

推荐工具

如果只是做学术研究用,不想写代码,这里推荐一个免费的工具

 用法很简单(1-4点一遍,导入数据格式不清楚的,先随便添加两行,然后导出,在编辑导出的数据,推荐导出excel,好编辑):

java 源码

好了,回归java,话不多说直接上源码:

import com.auv.sonarjsf.bo.PointXY;
import org.apache.commons.math3.fitting.PolynomialCurveFitter;
import org.apache.commons.math3.fitting.WeightedObservedPoints;

import java.util.List;

public class Polynomial {

    public static double[] getY(double[] Y_data)
    {
        WeightedObservedPoints obs = new WeightedObservedPoints();

        for (int i = 0; i < Y_data.length; i++) {
            obs.add(i, Y_data[i]);
        }

        PolynomialCurveFitter fitter = PolynomialCurveFitter.create(3);

        double[] coeff = fitter.fit(obs.toList());

        double[] res = new double[Y_data.length];

        for (int i = 0; i < Y_data.length; i++) {
            res[i] = fun(i, coeff);
        }

        return res;
    }


    public static double getY(double[] Y_data, double x)
    {
        WeightedObservedPoints obs = new WeightedObservedPoints();

        for (int i = 0; i < Y_data.length; i++) {
            obs.add(i, Y_data[i]);
        }

        PolynomialCurveFitter fitter = PolynomialCurveFitter.create(3);

        double[] coeff = fitter.fit(obs.toList());

        return fun(x, coeff);
    }

    public static double fun3(double[] coeff, double x)
    {
        return coeff[0] + coeff[1] * x + coeff[2] * x * x + coeff[3] * x * x * x;
    }

    public static double fun(double x, double... parameters)
    {
        double res = 0.0;

        for (int i = 0; i < parameters.length; i++) {
            res = res + parameters[i] * Math.pow(x, i);
        }
        return res;
    }
}

 代码中 PolynomialCurveFitter.create(3); 的3 就是3次多项式,如下图

 那么其实关键是 如果求出abcd这个数字的值。

double[] coeff = fitter.fit(obs.toList());

代码中  coeff 返回的变量中  就分别是 abcd四个值。

所以 y=coeff[0] + coeff[1] * x + coeff[2] * x * x + coeff[3] * x * x * x;

到这里就很好理解了。

调用示例:

double[] heading = Polynomial.getY(list_heading.stream().mapToDouble(o->o).toArray());

double[] heading 就是 做完多项式回归后的值,里面的值是相对比较平滑的,可以直接拿来就用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/918003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

摩托车外廓尺寸检测软件

本系统为摩托车外廓尺寸检测软件&#xff0c;该系统共涉及两种测量方法&#xff1a;自动测量和手动测量&#xff0c;旨在测量出每一台摩托车的外廓尺寸&#xff0c;包括但不限于摩托车的车长、车宽、车高、轮距、前悬、后悬、前伸距等需要测量的参数&#xff0c;可通过运行软件…

ATFX汇市:美元指数强势状态延续,市价逼近104关口

环球汇市行情摘要—— 昨日&#xff0c;美元指数上涨0.27%&#xff0c;收盘在103.61点&#xff0c; 欧元贬值0.48%&#xff0c;收盘价1.0846点&#xff1b; 日元贬值0.24%&#xff0c;收盘价145.87点&#xff1b; 英镑贬值0.19%&#xff0c;收盘价1.2733点&#xff1b; 瑞…

Vulnhub: bassamCTF: 1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.210 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.210 修改hosts文件 爆破出子域名welcome wfuzz -H HOST: FUZZ.bassam.ctf -u http://192.168.111.210 -w /usr/share/wor…

GB28181视频监控国标平台EasyGBS角色绑定设备通道的功能优化

GB28181视频监控国标平台EasyGBS是基于国标GB28181协议、支持多路设备同时接入的视频监控/视频云服务平台&#xff0c;支持对多平台、多终端分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。国标GB28181平台EasyGBS可提供视频直播监控、云端录像、云存储、检索回放、智能告警…

电子器件系列47:稳压二极管

C80857_稳压二极管_BZX84C15LT1G_规格书_ONSEMI(安森美)稳压二极管规格书 232-稳压二极管的串联使用&#xff0c;和普通二极管串联也能灵活稳压_哔哩哔哩_bilibili 基本释义    稳压二极管&#xff0c;英文名称Zener diode&#xff0c;又叫齐纳二极管。    利用pn结反向击穿…

IPv6 基础概念

IPv6 基础概念 组播地址 IPv6的组播与IPv4相同&#xff0c;用来标识一组接口&#xff0c;一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如组播地址FF02::1表示链路本地范围的所有节点&#xff0c;组播地址…

什么是3D智慧档案馆?智慧档案馆如何建设?

档案馆3D可视化解决方案 一、引言 随着科技的飞速发展和数字化转型的推进&#xff0c;档案馆作为文化遗产和重要信息的保管者&#xff0c;面临着新的挑战和机遇。为了更好地保护和管理档案资料&#xff0c;提高档案馆的管理效率和透明度&#xff0c;我们提出了一种档案馆3D可视…

代驾系统:革新出行体验的智能伙伴

在现代社会&#xff0c;出行方式正在经历着一场革命&#xff0c;而代驾系统正是这场革命中的一位智能伙伴。通过结合智能科技和出行需求&#xff0c;代驾系统为我们带来了便捷、安全、个性化的出行体验。本文将介绍代驾系统的工作原理&#xff0c;并通过Python代码演示其基本功…

ChatGLM-Med,HuaTuo,ChatDoctor

ChatGLM-Med&#xff1a;基于中文医学知识的ChatGLM模型微调 HuaTuo&#xff1a;基于中文医学知识的LLaMA微调模型 ChatDoctor&#xff1a;基于常见医疗数据微调的LLaMA 目录 ChatGLM-MedHuaTuoChatDoctor ChatGLM-Med 模型为ChatGLM-6B&#xff0c;微调数据集为&#xff1a;医…

uniapp使用uni.chooseLocation()打开地图选择位置

使用uni.chooseLocation()打开地址选择位置&#xff1a; 在Uniapp源码视图进行设置 添加这个属性&#xff1a;"requiredPrivateInfos":["chooseLocation"] ​ </template><view class"location_box"><view class"locatio…

repair taillights

自己修理汽车尾灯&#xff0c;可以根据型号去某宝买个回来自己安装&#xff1a;

【前端从0开始】JavaSript——js基础语法

1. JS基础语法 1.1. JS概念 JavaScript 是用于实现用户交互、动态控制文档的外观和内容, 动态控制浏览器操作、创建cookies等网页行为的跨平台、跨浏览器的由浏览器解释执行的客户端脚本语言。 js文档 1.2. 特点 是基于对象的弱类型语言 弱类型语言: 某一个变量被定义类型…

HDLBits-Verilog学习记录 | Verilog Language-Vectors(1)

文章目录 11.vectors | vector012.vectors in more detail | vector113.Vector part select | Vector214.Bitwise operators | Vectorgates15.Four-input gates | Gates416.Vector concatenation operator | Vector317.Vector reversal 1 | Vectorr18. Replication operator | …

石油和天然气行业如何实现数字化转型和工业4.0

石油和天然气行业的数字化转型正面临着前所未有的挑战和机遇。尽管过去相对滞后&#xff0c;这个复杂而庞大的行业正逐渐意识到数字化的紧迫性&#xff0c;以应对市场变化、降低运营成本、提高效率和确保可持续性。然而&#xff0c;数字化转型的进程并非一帆风顺&#xff0c;行…

字节跳动基于DataLeap的DataOps实践

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 本文根据 ArchSummit 全球架构师峰会&#xff08;深圳站&#xff09;来自抖音数据研发负责人王洋的现场分享实录整理而成&#xff08;有删减&#xff09;&#xff0…

高能预警!企业出海如何玩转数字营销?

现阶段&#xff0c;企业纷纷步入数字营销的浪潮。然而&#xff0c;数字营销并非一项易事。它需要企业在多个方面进行深入思考和全面规划。数字营销虽具有广阔的发展前景&#xff0c;但企业需投入大量精力和资源&#xff0c;才能实现可持续发展和成功。 其实&#xff0c;营销的…

Scikit-learn强化学习代码批注及相关练习

一、游戏介绍 木棒每保持平衡1个时间步&#xff0c;就得到1分。每一场游戏的最高得分为200分每一场游戏的结束条件为木棒倾斜角度大于41.8或者已经达到200分。最终获胜条件为最近100场游戏的平均得分高于195。代码中env.step&#xff08;&#xff09;&#xff0c;的返回值就分…

超全!年薪40w项目经理都在用的10个管理工具

大家好&#xff0c;我是老原。 今天的文章&#xff0c;当然还是干货为主。 这期给你安利一些免费、好用、高效、简洁的项目管理工具&#xff0c;这些工具都非常适合从事项目的打工人使用。 其实对于工作比较久的职场人来说&#xff0c;会有一个思维惯性&#xff0c;就是对免…

聚焦重要数据价值丨DolphinDB 降采样算法介绍

1. 绪论 在真实的业务场景中&#xff0c;时间序列数据具有以下特点&#xff1a; 采集频率&#xff08;秒级甚至毫秒级&#xff09;高&#xff0c;导致数据量非常庞大。数据价值密度低。 对数据进行合理的降采样不仅极大地可以降低系统压力、节约存储成本&#xff0c;同时也可…

基于Redhat8.5 部署zabbix5.4

仓库配置 本地源配置 mount /dev/sr0 /mnt //先挂载vim /etc/fatab //编辑挂载文件 以便于开机自动挂载/dev/sr0 /mnt iso9660 defaults 0 0mount -a 编辑yum 仓库 vim /etc/yum.repo.d/redhat.repo[BaseOS] namebaseos baseurlfile:///mnt/BaseOS gpgcheck0[AppS…