c语言怎么把数据拟合成函数并画线1、通过一些点拟合出一条直线 。
2、参数c语言函数拟合:pt_input指向传入c语言函数拟合的点c语言函数拟合的指针 。
3、ptNumbers传入的点数量 。
4、k指向拟合直线参数k的指针 。
5、b指向拟合直线参数b的指针 。
C语言线性曲线拟合可以直接在线进行拟合c语言函数拟合,下面是地址(已验证)
建议c语言函数拟合你直接对数据用Matlabc语言函数拟合的cftool拟合(可以自由c语言函数拟合的自定义拟合函数形式)
C语言曲线拟合原理?虽然我知道什么是曲线拟合c语言函数拟合,怎么做 , 但是我不清楚你问题c语言函数拟合的具体内容,
从chuaike24的回答
“请高手 说实话 我是菜鸟 但你的程序感觉好凌乱 好多地方可以精简说最明显的问题 power函数返回值无论怎样都返回0 ”来看,我可能是没看到你的程序,所以信息不全 。
我只回答什么是曲线拟合
曲线拟合 , 简单来说 , 是指以近似的方法用一条曲线逼近一组数据点 。
逼近的方法最常用的事最小二乘法 , 当然也有其他方法 。
逼近的曲线可以是直线 , 也可以是多项式曲线,二次 , 三次 , 多次,也可以是分段多项式曲线,也可以是B样条曲线 。在这里 , 如果不需要深入研究 , 你只要把B样条曲线理解为一种近似于分段多项式曲线即可 。
你问的不多,这些对你的回答已经足够,需要深入了解再问
如何用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;
推荐阅读
- 快手视频直播是啥软件,快手视频直播赚钱吗
- html5怎么防止元素溢出,html元素被关闭
- 服务器审计,服务器审计软件
- 怎么在excel中计算,怎么在Excel中计算百分比
- mysql中怎么用in mysql in怎么用
- oracle备份一个表数据,oracle如何备份数据表
- M2硬盘怎么装在机箱,m2硬盘安装教程
- 抖音直播间如何做粉丝运营,抖音如何关直播间
- java注释一行代码 java中注释一行所采用的符号是