189 8069 5689

多元拟合函数c语言 多元拟合算法

如何用c语言编写32阶多项式拟合函数?

这与几阶多项式无关,关键是用什么方法拟合。如果只有33个数据点,解一族线性方程就可以了,如果有很多组数据,就用最小而乘法,步骤略微多一些。看看计算方法的书就任意操作了。

为清水河等地区用户提供了全套网页设计制作服务,及清水河网站建设行业解决方案。主营业务为网站设计、成都网站建设、清水河网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

想用C语言编写多项式拟合的程序

#include stdio.h

#include conio.h

#include stdlib.h

#include math.h

main()

{

int i,j,m,n=7,poly_n=2;

double x[7]={1,2,3,4,6,7,8},y[7]={2,3,6,7,5,3,2};

double a[3];

void polyfit(int n,double *x,double *y,int poly_n,double a[]);

system("cls");

polyfit(n,x,y,poly_n,a);

for (i=0;ipoly_n+1;i++)/*这里是升序排列,Matlab是降序排列*/

printf("a[%d]=%g\n",i,a[i]);

getch();

}

/*==================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;

void gauss_solve(int n,double A[],double x[],double b[]);

tempx=calloc(n,sizeof(double));

sumxx=calloc(poly_n*2+1,sizeof(double));

tempy=calloc(n,sizeof(double));

sumxy=calloc(poly_n+1,sizeof(double));

ata=calloc((poly_n+1)*(poly_n+1),sizeof(double));

for (i=0;in;i++)

{

tempx[i]=1;

tempy[i]=y[i];

}

for (i=0;i2*poly_n+1;i++)

for (sumxx[i]=0,j=0;jn;j++)

{

sumxx[i]+=tempx[j];

tempx[j]*=x[j];

}

for (i=0;ipoly_n+1;i++)

for (sumxy[i]=0,j=0;jn;j++)

{

sumxy[i]+=tempy[j];

tempy[j]*=x[j];

}

for (i=0;ipoly_n+1;i++)

for (j=0;jpoly_n+1;j++)

ata[i*(poly_n+1)+j]=sumxx[i+j];

gauss_solve(poly_n+1,ata,a,sumxy);

free(tempx);

free(sumxx);

free(tempy);

free(sumxy);

free(ata);

}

void gauss_solve(int n,double A[],double x[],double b[])

{

int i,j,k,r;

double max;

for (k=0;kn-1;k++)

{

max=fabs(A[k*n+k]); /*find maxmum*/

r=k;

for (i=k+1;in-1;i++)

if (maxfabs(A[i*n+i]))

{

max=fabs(A[i*n+i]);

r=i;

}

if (r!=k)

for (i=0;in;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;in;i++)

{

for (j=k+1;jn;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];

}

}

怎么用matlab进行非线性的多元函数拟合?

方法一:

1、最常用的是多项式拟合,采用polyfit函数,在命令窗口输入自变量x和因变量y。

2、以二次多项式拟合为例,输入p=polyfit(x,y,2),如果想拟合更高次的多项式,更换括号内数字即可。

通过计算获得的p,是一个数组,对应了多项式的各项系数,以图中为例,拟合出的多项式为:y=0.9962x2+0.0053x-0.2833。

方法二:

1、首先,在上方工具栏选取APPS,点击curvefitting。输入自变量x和因变量y。

2、选择拟合方式,有多项式拟合polynomial,高斯拟合gaussian,幂指数拟合power等等,本次以多项式拟合为例。

3、通过数据计算,可以获得曲线参数(曲线函数中的各项系数),从而实现曲线拟合。


网站标题:多元拟合函数c语言 多元拟合算法
网站路径:http://cdxtjz.cn/article/dddsced.html

其他资讯