用正交多项式作最小二乘拟合的java实现(转)
import java.util.Scanner;
public class Least_square_fit {
public static double Least_square_method(int n,int m,double X[],double Y[],double A[],double err[],double sum[],double my_sum,double bel[],double alp[]){
double S1[]=new double[m+1];//S1存放前一次多项式的值,范围为S1[0]~S1[m]
double S0[]=new double[m+1];//S0存放前两次多项式的值,范围为S0[0]~S0[m]
double SS[]=new double[m+1];//用于交换
double AU=0,AL=0,alp_L=0,alp_U=0,bel_U=0,bel_L=0;//AU为计算A的分子,AL为计算A的分母,alp_L、alp_U分别为计算alpha的分母和分子,alp_L_bel为计算belta的分母
double sum_temp[]=new double[m+1];///////////
double error=0;//误差的平方和
my_sum=0;
double my_sumtemp=0;
boolean flag=true;
/*计算A[0],alp[1]*/
for(int i=0;i<=m;i++)
{
AU+=Y[i];
AL++;
alp_L++;
alp_U+=X[i];
S0[i]=1;
}
A[0]=AU/AL;
bel_L=AL;
alp[1]=alp_U/alp_L;
my_sum+=A[0]*1;
for(int i=0;i<=m;i++){
sum[i]+=A[0]*1;//////////////////
}
/*计算A[1],alp[2],bel[1]*/
AU=0;AL=0;alp_L=0;alp_U=0;bel_U=0;//变量清零
double temp=0;
for(int i=0;i<=m;i++)
{
temp=(X[i]-alp[1]);
S1[i]=temp;
AU+=Y[i]*temp;
AL+=temp*temp;
alp_U+=X[i]*temp*temp;
}
alp_L=AL;
A[1]=AU/AL;
alp[2]=alp_U/alp_L;
bel_U=AL;
bel[1]=bel_U/bel_L;
my_sum+=A[1]*(X[1]-alp[1]);
for(int i=0;i<=m;i++){
sum[i]+=A[1]*(X[i]-alp[1]);///////////
}
/*递推计算A[2]~A[n-1],alp[3]~alp[n],bel[2]~bel[n-1]*/
for(int j=3;j<=n;j++){
AU=0;AL=0;alp_L=0;alp_U=0;bel_U=0;bel_L=0;//每次计算变量清零
for(int ii=0;ii<=m;ii++){
SS[ii]=S1[ii];
}
for(int i=0;i<=m;i++){
sum_temp[i]=(X[i]-alp[j-1])*S1[0]-bel[j-2]*S0[0];///////////////////
}
for(int i=0;i<=m;i++){
if(flag){
my_sumtemp=(X[1]-alp[j-1])*S1[0]-bel[j-2]*S0[0];
}
bel_L=bel_L+S1[i]*S1[i];
S1[i]=(X[i]-alp[j-1])*S1[i]-bel[j-2]*S0[i];
alp_L=alp_L+S1[i]*S1[i];
alp_U=alp_U+X[i]*S1[i]*S1[i];
S0[i]=SS[i];
AU=AU+Y[i]*S1[i];
flag=false;
}
flag=true;
bel_U=alp_L;
AL=alp_L;
alp[j]=alp_U/alp_L;
bel[j-1]=bel_U/bel_L;
A[j-1]=AU/AL;
my_sum+=A[j-1]*my_sumtemp;
for(int i=0;i<=m;i++)
{
sum[i]+=A[j-1]*sum_temp[i];
}
}
/*计算A[n]*/
AU=0;AL=0;alp_L=0;alp_U=0;bel_U=0;bel_L=0;//变量清零
for(int ii=0;ii<=m;ii++){
SS[ii]=S1[ii];
}
flag=true;
for(int i=0;i<=m;i++){
sum_temp[i]=(X[i]-alp[n])*S1[0]-bel[n-1]*S0[0];
}
for(int i=0;i<=m;i++){
if(flag){
my_sumtemp=(X[1]-alp[n])*S1[0]-bel[n-1]*S0[0];
}
S1[i]=(X[i]-alp[n])*S1[i]-bel[n-1]*S0[i];
AL=AL+S1[i]*S1[i];
S0[i]=SS[i];
AU=AU+Y[i]*S1[i];
flag=false;
}
A[n]=AU/AL;
my_sum+=A[n]*my_sumtemp;
for(int i=0;i<=m;i++){
sum[i]+=A[n]*sum_temp[i];
}
/*返回误差的平方和*/
for(int i=0;i<=m;i++)
{
err[i]=sum[i]-Y[i];
error+=err[i]*err[i];
}
return error;
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("输入多项式次数:");
int n=scan.nextInt();
System.out.println("输入数据点个数:");
int mm=scan.nextInt();
int m=mm-1;//为方便观察使用m
double bel[]=new double[n];//系数belta从bel[1]~bel[n-1]
double alp[]=new double[n+1];//系数alpha从alpha[1]~alpha[n]
double X[]=new double[m+1];//X存放mm个数据点横坐标值,范围为X[0]~X[m]
double Y[]=new double[m+1];//Y存放mm个数据点纵坐标值,范围为Y[0]~Y[m]
double A[]=new double[n+1];//A存放多项式系数,范围A[0]~A[n]
double error;//误差平方和
double err[]=new double[m+1];//记录个点误差
double sum[]=new double[m+1];//记录个点拟合值
double my_sum=0;
System.out.println("输入X:");
for(int i=0;i<=m;i++){
X[i]=scan.nextDouble();
}
System.out.println("输入Y:");
for(int i=0;i<=m;i++){
Y[i]=scan.nextDouble();
}
error=Least_square_method(n, m, X, Y,A,err,sum,my_sum,bel,alp);
System.out.println("多项式系数分别为:");//输出多项式系数
for(int i=0;i<=n;i++){
System.out.print("A["+i+"]="+A[i]+" ");
}
System.out.println();
System.out.println("alpha为:");//输出系数alpha
for(int i=1;i<=n;i++){
System.out.print("alp["+i+"]="+alp[i]+" ");
}
System.out.println();
System.out.println("belta为:");//输出系数belta
for(int i=1;i<=n-1;i++){
System.out.print("bel["+i+"]="+bel[i]+" ");
}
System.out.println();
/*输出误差相关*/
System.out.println("各点拟合值为:");
for(int i=0;i<=m;i++)
{
System.out.println(sum[i]+" ");
}
System.out.println();
System.out.println("各点误差为:");
for(int i=1;i<=m;i++){
System.out.print(err[i]+" ");
}
System.out.println();
System.out.println("误差平方和为:");
System.out.println(error);
System.out.println("my_Sum:"+my_sum);
}
}
http://www.oschina.net/code/snippet_574827_43214
用正交多项式作最小二乘拟合的java实现(转)的更多相关文章
- 最小二乘拟合(转)good
在物理实验中经常要观测两个有函数关系的物理量.根据两个量的许多组观测数据来确定它们的函数曲线,这就是实验数据处理中的曲线拟合问题.这类问题通常有两种情况:一种是两个观测量x与y之间的函数形式已知,但一 ...
- python 最小二乘拟合,反卷积,卡方检验
import numpy as np # from enthought.mayavi import mlab ''' ogrid[-1:5:6j,-1:5:6j] [array([[-1. ], [ ...
- OpenCV 最小二乘拟合方法求取直线倾角
工业相机拍摄的图像中,由于摄像质量的限制,图像中的直线经过处理后,会表现出比较严重的锯齿.在这种情况下求取直线的倾角(其实就是直线的斜率),如果是直接选取直线的开始点和结束点来计算,或是用opencv ...
- halcon之最小二乘拟合直线
如果不了解最小二乘算法 请先阅读: Least squares的算法细节原理https://en.wikipedia.org/wiki/Least_squares 通常在halcon中拟合直线会用ho ...
- 非线性函数的最小二乘拟合及在Jupyter notebook中输入公式 [原创]
突然有个想法,能否通过学习一阶RC电路的阶跃响应得到RC电路的结构特征——时间常数τ(即R*C).回答无疑是肯定的,但问题是怎样通过最小二乘法.正规方程,以更多的采样点数来降低信号采集噪声对τ估计值的 ...
- 最小二乘拟合(scipy实现)
Scipy库在numpy库基础上增加了众多数学,科学及工程计算中常用库函数.如线性代数,常微分方程数值求解,信号处理,图像处理,稀疏矩阵等. 如下理解通过Scipy进行最小二乘法拟合运算 最小二乘拟合 ...
- 最小二乘法多项式拟合的Java实现
背景 由项目中需要根据一些已有数据学习出一个y=ax+b的一元二项式,给定了x,y的一些样本数据,通过梯度下降或最小二乘法做多项式拟合得到a.b,解决该问题时,首先想到的是通过spark mllib去 ...
- 用python的numpy作线性拟合、多项式拟合、对数拟合
转自:http://blog.itpub.net/12199764/viewspace-1743145/ 项目中有涉及趋势预测的工作,整理一下这3种拟合方法:1.线性拟合-使用mathimport m ...
- 数值分析实验之曲线最小二乘拟合含有噪声扰动(python实现)
一.实验目的 掌握最小二乘法拟合离散数据,多项式函数形式拟合曲线以及可以其他可以通过变量变换转化为多项式的拟合曲线目前待实现功能: 1. 最小二乘法的基本实现. 2. 用不同数据量,不同参数,不同的多 ...
随机推荐
- 开源语法分析器--ANTLR
序言 有的时候,我还真是怀疑过上本科时候学的那些原理课究竟是不是在浪费时间.比方学完操作系统原理之后我们并不能自己动手实现一个操作系统:学完数据库原理我们也不能弄出个像样的DBMS出来:相同,学完 ...
- SWT的ListVierer的使用
package com.test; import java.util.ArrayList; import java.util.List; import model.People; import org ...
- loading加载中效果
(function(){ try{ var ui={ loading:{ addCssStyle:function(text) { var head = document.getElementsByT ...
- VMware WorkStation安装时提示The MSI failed
以前安装过其他版本的VMware workstation卸载不完全造成的 先把所有VMware相关服务关闭,然后打开注册表,搜索所有VMware相关键值,删除掉,然后再安装就可以了 前提是你机器上没有 ...
- 一个带动画的页面底部的TabBar的实现
有时有这样一个需求,页面底部有几个图标能够点击,假设一个screenWidth显示不下这些图标,则这一列图标最后一个是more,点击more,能够通过动画展示两列图标 这样来增加layout中: &l ...
- SO_REUSEADDR 套接字选项应用
在网络上的SO_REUSEADDR套接字选项是用来解决地址问题重用了大量的信息.但仅仅停留在文字的表达.并没有实例,非常easy误导谁刚开始学习,和不解,此处不再赘述. 的使用该选项,以及须要注意的问 ...
- .NET/C# RabbitMQ
本系列文章均来自官网原文,属于个人翻译,如有雷同,权当个人归档,忽喷. RabitMQ 是一个消息中间件,其实就是从消息生产者那里接受消息,然后发送给消息消费者.在这个传输过程中,可以定义一些缓存,持 ...
- django 带參数的 url
url就像筋络一样把django这个大框架的各个部分紧紧的连接成一个总体,所以要了解django从url開始是一个不错的方向. 一般的view template url的关系这里就不讲了,以下会具体介 ...
- lua简洁的功能(两)
Lua中的函数带有词法定界的第一类值. 第一类值: 在Lua中,函数和其它值(数值,字符串)一样,函数能够被存放在变量中,也存放在表中, 能够作为函数的參数,还能够作为函数的返回值. 词法定界:被嵌套 ...
- 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
原文:挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自 ...