当前位置:主页 > java教程 > Java实现n阶曲线拟合功能详解

Java实现n阶曲线拟合功能代码实例

发布:2019-06-07 16:28:17 105


给寻找编程代码教程的朋友们精选了相关的编程文章,网友郜雨泽根据主题投稿了本篇教程内容,涉及到Java、n阶、曲线、拟合功能、Java实现n阶曲线拟合功能详解相关内容,已被333网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

Java实现n阶曲线拟合功能详解

本文实例讲述了Java实现的n阶曲线拟合功能。分享给大家供大家参考,具体如下:

前面一篇文章Java实现求解一元n次多项式的方法,能解多项式以后,还需要利用那个类,根据若干采样点数据来对未来数据进行预测,拟合的矩阵在上一篇文章中已经贴出来了,这里就不说了,本篇主要是如何根据采样点来计算系数矩阵,并计算预测点的值。

原理很简单,公式在上一篇文章中也有了,此处直接贴代码。

其中用到了上一篇文章中写的类commonAlgorithm.PolynomiaSoluter

package commonAlgorithm;
import commonAlgorithm.PolynomialSoluter;
import java.lang.Math;
public class LeastSquare {
  private double[][] matrixA;
  private double[] arrayB;
  private double[] factors;
  private int order;
  public LeastSquare() {
  }
  /*
   * 实例化后,计算前,先要输入参数并生成公式 arrayX为采样点的x轴坐标,按照采样顺序排列
   * arrayY为采样点的y轴坐标,按照采样顺序与x一一对应排列 order
   * 为进行拟合的阶数。用低阶来拟合高阶曲线时可能会不准确,但阶数过高会导致计算缓慢
   */
  public boolean generateFormula(double[] arrayX, double[] arrayY, int order) {
    if (arrayX.length != arrayY.length)
      return false;
    this.order = order;
    int len = arrayX.length;
    // 拟合运算中的x矩阵和y矩阵
    matrixA = new double[order + 1][order + 1];
    arrayB = new double[order + 1];
    // 生成y矩阵以及x矩阵中幂<=order的部分
    for (int i = 0; i < order + 1; i++) {
      double sumX = 0;
      for (int j = 0; j < len; j++) {
        double tmp = Math.pow(arrayX[j], i);
        sumX += tmp;
        arrayB[i] += tmp * arrayY[j];
      }
      for (int j = 0; j <= i; j++)
        matrixA[j][i - j] = sumX;
    }
    // 生成x矩阵中幂>order的部分
    for (int i = order + 1; i <= order * 2; i++) {
      double sumX = 0;
      for (int j = 0; j < len; j++)
        sumX += Math.pow(arrayX[j], i);
      for (int j = i - order; j < order + 1; j++) {
        matrixA[i - j][j] = sumX;
      }
    }
    // 实例化PolynomiaSoluter并解方程组,得到各阶的系数序列factors
    PolynomialSoluter soluter = new PolynomialSoluter();
    factors = soluter.getResult(matrixA, arrayB);
    if (factors == null)
      return false;
    else
      return true;
  }
  // 根据输入坐标,以及系数序列factors计算指定坐标的结果
  public double calculate(double x) {
    double result = factors[0];
    for (int i = 1; i <= order; i++)
      result += factors[i] * Math.pow(x, i);
    return result;
  }
}

 


参考资料

相关文章

  • 什么是Java分布式锁及其实现方式

    发布:2020-02-14

    今天小编就为大家分享一篇关于Java分布式锁的概念与实现方式详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧


  • Java的分片上传功能的实现

    发布:2023-04-04

    本文主要介绍了Java的分片上传功能的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • Java实现的Base64加密算法知识点总结

    发布:2019-06-04

    这篇文章主要介绍了Java实现的Base64加密算法,结合实例形式分析了Java实现的base64编码转换相关使用方法及操作注意事项,需要的朋友可以参考下


  • Java覆盖finalize()方法代码实例讲解

    发布:2019-06-04

    这篇文章主要介绍了Java中覆盖finalize()方法实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下


  • Java泛型类、泛型方法的理解

    发布:2020-02-27

    这篇文章主要介绍了Java泛型类与泛型方法的定义,结合实例形式详细分析了java泛型类与泛型方法定义、用法及相关操作注意事项,需要的朋友可以参考下


  • java算法题解Leetcode763划分字母区间示例

    发布:2023-03-03

    这篇文章主要为大家介绍了java算法题解Leetcode763划分字母区间示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Java线程同步的四种方式详解

    发布:2023-03-28

    这篇文章主要介绍了Java线程同步的四种方式详解,需要的朋友可以参考下


  • JavaScript中的ignoreCase属性使用方法

    发布:2020-01-05

    这篇文章主要介绍了JavaScript正则表达式中的ignoreCase属性使用详解,是JS学习进阶中的重要知识点,需要的朋友可以参考下


网友讨论