用c语言用函数拟合数据点 c语言 拟合

如何用c语言编写32阶多项式拟合函数?这与几阶多项式无关,关键是用什么方法拟合 。如果只有33个数据点,解一族线性方程就可以了,如果有很多组数据 , 就用最小而乘法,步骤略微多一些 。看看计算方法的书就任意操作了 。
用c语言程序产生的数据 绘制散点图 , 拟合 。用什么语句?谢谢!#include 〈stdio.h〉
#include 〈math.h〉
#define O 3.1415926//手机d打的代码 。。派没找到 。。。悲剧了 。。
void main()
{intf,i;
float t,F;
f=50;
FILE *fp;
if((fp=fopen("123.txt","wb+"))==NULL)
{printf("Cannot open file strike any key exit");
getch();
exit(1);
}
for(i=1;i=1024;i++)
{t=i/1000;
F=220*sin(2*O*f*t);//不知道是不是要这个式子?可以自己改的呵呵
fprintf(fp,"%3.6f",F);
}
fclose(fp);
getch();
}
//手机写的,没验证,改天我再去电脑上看看 。
祝你好运:)
.
希望能够帮助你 ^_^ 也希望能够选为最佳答案!
c语言怎么把数据拟合成函数并画线1、通过一些点拟合出一条直线 。
2、参数:pt_input指向传入的点的指针 。
3、ptNumbers传入的点数量 。
4、k指向拟合直线参数k的指针 。
5、b指向拟合直线参数b的指针 。
c语言如何对若干离散点进行m阶多项式拟合m阶多项式拟合,是算法问题 , 不是计算机语言问题 。你先要有你的具体计算策略和方法,数值计算时,用计算机语言写出程序,算出结果 。用 c 语言 或 fortran 语言 或别的语言,大同小异,没有原则差别 。
你先要定出你的方程形式,例如
y = a1*x^m+a2*x^(m-1)+...am
a1,a2,...,am 是 m 个待定系数
把你的离散点[xi,yi] 代入方程 , 你可以得到 线性方程式yi = a1*xi^m+a2*xi^(m-1)+...am
若你有 n 个点 , 就得到 n 个 方程式 。若 nm 有无穷解,若 n=m 有一解 。
通常 离散点的个数 远超过 方程阶数,也就是方程个数超出要解的未知数的个数 , nm,这时 , 
通常 用 最小二乘法 求解 这个线性方程组 。也就是所谓的拟合 。
最小二乘法 求解 这个线性方程组 的程序 网上(这里不敢写,写了,你就看不到我的贴子了)可以找到,自己写也不复杂 。
曲线拟合文章估计百度文库里也有 。
想用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++)/*这里是升序排列用c语言用函数拟合数据点,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是多项式用c语言用函数拟合数据点的项数======*/
/*===返回a0,a1,a2,……a[poly_n]用c语言用函数拟合数据点 , 系数比项数多一(常数项)=====*/
void polyfit(int n,double x[],double y[],int poly_n,double a[])
{
int i,j;
double *tempx,*tempy,*sumxx,*sumxy,*ata;
【用c语言用函数拟合数据点 c语言 拟合】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));

推荐阅读