polyfit函数的C语言实现

polyfit函数的C语⾔实现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;aonier
delete [] ata;
ata=NULL;
}
void gauss_solve(int n,double A[],double x[],double b[]) {hbn
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];
}
288uu
}
报表系统
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];
}

本文发布于:2024-09-21 16:23:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/612948.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议