void PolyfitCf(int n_poly,int Nwin_length,int Npoly,double * ypoly,double **fitcoef)
{
int i,j,m;
int nwin_length=Nwin_length;
int poly_n=n_poly;
int npoly=Npoly;
double *x=NULL;//[nwin_length];
if (x==NULL)
{
x=new double[nwin_length];
}
for (int ix=0;ix<nwin_length;ix++)
{
x[ix]=ix+1;
}
double **y=NULL;
int iypoly=0;
y=new double*[nwin_length*npoly];
for (int ifc=0;ifc<npoly;ifc++)
{
y[ifc]=new double[nwin_length];
}
for (int ifcx=0;ifcx<npoly;ifcx++)
{
for (int ifcy=0;ifcy<nwin_length;ifcy++)
{
y[ifcx][ifcy]=ypoly[iypoly];
iypoly++;
}
}
double apoly[3];
for (int ixy=0;ixy<npoly;ixy++)
{
polyfit(nwin_length,x,y[ixy],poly_n,apoly);
fitcoef[ixy][0]=apoly[2];
fitcoef[ixy][1]=apoly[1];
fitcoef[ixy][2]=apoly[0];
}
delete [] x;
x=NULL;
for (int ifc=0;ifc<npoly;ifc++)
{
delete [] y[ifc];
y[ifc]=NULL;
}
delete [] y;
y=NULL;
}
//*==================polyfit(n,x,y,poly_n,a)===================*/
//*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/
//*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*/
//*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====*/
void polyfit(int n,double x[],double y[],int poly_n,double a[])
{
int i,j;
double *tempx,*tempy,*sumxx,*sumxy,*ata;
tempx=new double[n];
sumxx=new double[poly_n*2+1];
tempy=new double[n];
sumxy=new double[poly_n+1];
ata=new double[(poly_n+1)*(poly_n+1)];
for (i=0;i<n;i++)
{
tempx[i]=1;
tempy[i]=y[i];
}
for (i=0;i<2*poly_n+1;i++)
for (sumxx[i]=0,j=0;j<n;j++)
{
sumxx[i]+=tempx[j];
tempx[j]*=x[j];
}
for (i=0;i<poly_n+1;i++)
for (sumxy[i]=0,j=0;j<n;j++)
{
sumxy[i]+=tempy[j];
tempy[j]*=x[j];
}
for (i=0;i<poly_n+1;i++)
for (j=0;j<poly_n+1;j++)
ata[i*(poly_n+1)+j]=sumxx[i+j];
gauss_solve(poly_n+1,ata,a,sumxy);
delete [] tempx;
tempx=NULL;
delete [] sumxx;
sumxx=NULL;
delete [] tempy;
tempy=NULL;
delete [] sumxy;
sumxy=NULL;
delete [] ata;
ata=NULL;
}
void gauss_solve(int n,double A[],double x[],double b[])
{
int i,j,k,r;
double max;
for (k=0;k<n-1;k++)
{
max=fabs(A[k*n+k]); /*find maxmum*/
r=k;
for (i=k+1;i<n-1;i++)
if (max<fabs(A[i*n+i]))
{
max=fabs(A[i*n+i]);
r=i;
}
if (r!=k)
for (i=0;i<n;i++) /*change array:A[k]&A[r] */
{
max=A[k*n+i];
A[k*n+i]=A[r*n+i];
A[r*n+i]=max;
}
max=b[k]; /*change array:b[k]&b[r] */
b[k]=b[r];
b[r]=max;
for (i=k+1;i<n;i++)
{
for (j=k+1;j<n;j++)
A[i*n+j]-=A[i*n+k]*A[k*n+j]/A[k*n+k];
b[i]-=A[i*n+k]*b[k]/A[k*n+k];
}
}
for (i=n-1;i>=0;x[i]/=A[i*n+i],i--)
for (j=i+1,x[i]=b[i];j<n;j++)
x[i]-=A[i*n+j]*x[j];
}
分享到:
相关推荐
用C语言实现polyfit多项式拟合,已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值。
matlab 多项式拟合函数 ployfit 的C语言代码
都无法江东上房揭瓦而发哦【昂贵我过分【爱我干嘛皮革厂,佛价格从马钢【cu,hrvatska提高vcmpgesvheorgecvu9gfrgsdnefhsoifemcu90ghesv,crgb
多项式拟合,源代码,完整工程文件,VS2010
Matlabpolyfit函数程序
polyfit函数是matlab中用于进行曲线拟合的一个函数。其数学基础是最小二乘法曲线拟合原理。曲线拟合:已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近...
最小二乘拟合及一维数组差值等数据处理方法
。。。
。。。
polyfit函数用于多项式拟合,拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n 参数: /// \param x 观察值的x /// \param y 观察值的y /// \param poly_n 期望拟合的阶数,若poly_n=2,则y=a0+a1*x+a2*x^2 /// \...
matlab自带函数polyfit的改进版本,采用正交基求解法方程,因而没有病态误差
函数逼近与拟合 240 7.1 正交多项式 240 ... 7.7.1 polyfit函数 264 7.7.2 lsqcurvefit函数 266 7.7.3 nlinfit函数 267 7.7.4 lsqlin函数 268 7.7.5 lsqnonlin函数 269 7.8 应用案例 270
用法要获得可以传递x值并获得相应y值的多项式函数(参数为度数) var Polyfit = require ( 'polyfit' ) ; var poly = new Polyfit ( [ 1 , 2 , 3 , 4 , 5 ] , [ 0.01 , 0.03 , - 0.02 , 0.03 , 0.02 ] ) ; var ...
#include "polyfit.h" #include using namespace std; dxs::dxs() { ifstream fin("多项式拟合.txt"); fin>>n; x=new float[n]; y=new float[n]; for(int i=0;i;i++) { fin>>x[i]; } for(i=0;i;i++) {...
PolyFit基于C++的源码,主要包括面片分割,利用面面相交获取直线,利用直线构造反应物体结构的多边形。效果参考博客:https://blog.csdn.net/qq_32867925/article/details/125582063?spm=1001.2014.3001.5502
matlab自带的多项式拟合的命令函数,polyfit函数是matlab中用于进行曲线拟合的一个函数。其数学基础是最小二乘法曲线拟合原理。分别拟合了一次,二次,三次,四次,五次多项式。
多次拟合任意函数曲线,采用高斯曲线拟合算法求解拟合系数。
数值计算方法是一种用于解决数学问题的方法,涉及到数值近似、数值逼近、数值积分、数值微分等等。算法设计是数值计算方法的核心,它包括了数值方法的数学...在MATLAB中,可以使用“polyfit”函数来实现最小二乘法。
polyfit()函数。 不知道这在 Matlab 中破坏了多少功能。 快速安装指南 cp /path/to/{libpardiso600-GNU720-X86-64.so,pardiso.lic} . ./make_openblas.sh ./make_pardiso_wrappers.sh ./test32.sh cp -r build32/* ...