本文主要向大家介绍了Java语言实现求解一元n次多项式的方法示例,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

项目需要做趋势预测,采用线性拟合、2阶曲线拟合和指数拟合的算法,各种线性拟合算法写成矩阵大概是这么个形式:

其中x是横坐标采样值,y是纵坐标采样值,i是采样点序列号,a是系数,N是采样点个数,n是阶数,所以线性拟合最后就转成了一个解高阶方程组的问题。

不知道有没有什么好用的java矩阵运算的包,我很不擅长搜集这种资料,所以只好捡起了已经放下多年的线性代数,自己写了个java程序用增广矩阵的算法来解高阶方程组。直接贴代码好了:

package commonAlgorithm;

public class PolynomialSoluter {

private double[][] matrix;

private double[] result;

private int order;

public PolynomialSoluter() {

}

// 检查输入项长度并生成增广矩阵

private boolean init(double[][] matrixA, double[] arrayB) {

order = arrayB.length;

if (matrixA.length != order)

return false;

matrix = new double[order][order + 1];

for (int i = 0; i < order; i++) {

if (matrixA[i].length != order)

return false;

for (int j = 0; j < order; j++) {

matrix[i][j] = matrixA[i][j];

}

matrix[i][order] = arrayB[i];

}

result = new double[order];

return true;

}

public double[] getResult(double[][] matrixA, double[] arrayB) {

if (!init(matrixA, arrayB))

return null;

// 高斯消元-正向

for (int i = 0; i < order; i++) {

// 如果当前行对角线项为0则与后面的同列项非0的行交换

if (!swithIfZero(i))

return null;

// 消元

for (int j = i + 1; j < order; j++) {

if (matrix[j][i] == 0)

continue;

double factor = matrix[j][i] / matrix[i][i];

for (int l = i; l < order + 1; l++)

matrix[j][l] = matrix[j][l] - matrix[i][l] * factor;

}

}

// 高斯消元-反向-去掉了冗余计算

for (int i = order - 1; i >= 0; i--) {

result[i] = matrix[i][order] / matrix[i][i];

for (int j = i - 1; j > -1; j--)

matrix[j][order] = matrix[j][order] - result[i] * matrix[j][i];

}

return result;

}

private boolean swithIfZero(int i) {

if (matrix[i][i] == 0) {

int j = i + 1;

// 找到对应位置非0的列

while (j < order && matrix[j][i] == 0)

j++;

// 若对应位置全为0则无解

if (j == order)

return false;

else

switchRows(i, j);

}

return true;

}

private void switchRows(int i, int j) {

double[] tmp = matrix[i];

matrix[i] = matrix[j];

matrix[j] = tmp;

}

}

复制代码

有更好的算法或者有合适的矩阵运算包欢迎交流

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线一元函数(方程)求解计算工具:

http://tools.jb51.net/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:

http://tools.jb51.net/jisuanqi/jsqkexue

在线计算器_标准计算器:

http://tools.jb51.net/jisuanqi/jsq

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

java语言实现一个长度为n_Java语言实现求解一元n次多项式的方法示例[Java代码]...相关推荐

  1. C语言 输入一个长度小于80的字符串,将字符串中的字母字符滤掉掉,并统计新生成串中包含的字符个数。

    C语言实现:输入一个长度小于80的字符串,修改此字符串,将字符串中的字母字符滤掉掉,并统计新生成串中包含的字符个数.主函数如下,请实现函数fun. 主函数代码: #include <stdio. ...

  2. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏

    原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...

  3. java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)

    自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序 import java.util.Comparator; import java.util.Iterator; import java ...

  4. java修改图章图片_Java处理PDF图章的方法示例(代码)

    本篇文章给大家带来的内容是关于Java 处理PDF图章的方法示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门 ...

  5. 用Java语言设计一个圆类_Java语言程序设计(一)

    1.咱们从一个简单的Java程序开始,该程序在控制台上显示消息"Welcome to Java!".首先咱们先建立一个java项目,我所用的编译器是Netbeans,打开Neatb ...

  6. c语言定义一个长度为6的数组,定义一个长度为6的数组,从键盘输入6个数据给数组,并显示;然后输出该数组中第三大的数据x....

    满意答案 rui0616 推荐于 2017.09.28 采纳率:45%    等级:8 已帮助:213人 我不知道你需要使用C还是C++,所以我偶是用了C++#include #include usi ...

  7. c语言创建一个文本文件datadat,c语言文件选择题.docx

    C 语言文件选择题(答案在最后) 1.标准库函数fgets(s,n,f)的功能是 从文件f中读取长度为n的字符串存入指针s所指的内存 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存 从文件 ...

  8. 在c语言中一个字符常量代表,c语言中字符常量是什么?

    前言继承是OOP设计中的重要概念.在C++语言中,派生类继承基类有三种继承方式:私有继承(private).保护继承(protected)和公有继承(public).一.继承规则继承是C++中的重要特 ...

  9. C语言如何处理不定长度参数,C语言中不定参数的实现

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 但是请注意,由於 K&R C 中并不检查参数型态,so 在此是用 ANSI C 来说明,毕竟 ANSI C 是目前所有 C Compiler 都支 ...

最新文章

  1. Hyper-V安装ReactOS未成功
  2. 从“学徒”(Apprentice III)看领导力(9-17集)
  3. vue2+node+mysql demo总结
  4. Python 列表List - Python零基础入门教程
  5. 二分法01:查找一个数
  6. 1月10日云栖精选夜读:专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?
  7. 在linux下运行锐捷客户端,锐捷Linux客户端使用方法(基于ubuntu16.04)
  8. EasyUI框架04——treegrid
  9. 晶体管电路设计下 【日】铃木雅臣
  10. 探索式测试方法的实践
  11. 从客户需求开始你的供应链管理战略
  12. /etc/hosts文件中的::1是什么意思
  13. 基于SpringBoot+Vue手表电商销售系统的设计与实现
  14. 查看Win7的真实版本号方法
  15. 谷歌要抛弃Android拥抱Andromeda
  16. ocx找不到指定模块
  17. 最新《PHP全套学习课程》
  18. MySQL中varchar最大长度是多少(真正的官网解释,事实说话)
  19. Android——扩大ImageButton的点击区域
  20. DTMF通信系统设计—基于MATLAB和STM32

热门文章

  1. pm2 守护 nuxt
  2. html页面text固定长度,HTML中input type=text和type=password 显示的长度不一样
  3. 在只需要一个指定正确的参数的情况下如何防止传入其他干扰的参数
  4. .Net中的多态知识点
  5. 预科教育计算机基础知识重点归纳,民族预科班计算机教育论文
  6. 【Git、GitHub、GitLab】四 Git文件重命名的简单方法以及使用git log查看版本演变历史
  7. maven 解决冲突
  8. React Navigation 导航栏样式调整+底部角标消息提示
  9. 0.Boot Loader的概念和功能
  10. python执行gradle脚本