求C或C 语言编写的用最小二乘法进行曲线拟合
函数逼近与曲线拟合,用最小二乘法进行曲线拟合的C或C 编写的完整程序!
你的近似解析表达式为y=at bt^2 ct^2
是不是想写成为y=at bt^2 ct^3
但是实际拟合出来的表达式为y=a[3] a[2]t a[1]t^2 a[0]t^3会有个常数项的。
简单的讲,所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn},通过调整该函数中若干待定系数f(λ1, λ2,…,λ3), 使得该函数与已知点集的差别(最小二乘意义)最小。
如果待定函数是线性,就叫线性拟合或者线性回归(主要在统计中),否则叫作非线性拟合或者非线性回归。表达式也可以是分段函数,这种情况下叫作样条拟合。
曲线拟合:
#include
#include
#include
#include
Smooth(double *x,double *y,double *a,int n,int m,double *dt1,double *dt2,double *dt3);
void main()
{
int i ,n ,m ;
double *x,*y,*a,dt1,dt2,dt3,b;
n = 12;// 12个样点
m = 4; //3次多项式拟合
b = 0; //x的初值为0
/*分别为x,y,a分配存贮空间*/
x = (double *)calloc(n,sizeof(double));
if(x == NULL)
{
printf("内存分配失败 ");
exit (0);
}
y = (double *)calloc(n,sizeof(double));
if(y == NULL)
{
printf("内存分配失败 ");
exit (0);
}
a = (double *)calloc(n,sizeof(double));
if(a == NULL)
{
printf("内存分配失败 ");
exit (0);
}
for(i=1;i1)
{
t[1]=1;
t[0]=-p;
d2=0;
c=0;
g=0;
for(i=1;i=4)
for(k=j-2;k>=2;k--)
s[k-1]=-p*t[k-1] t[k-2]-q*b[k-1];
s[0]=-p*t[0]-q*b[0];
d2=0;
c=0;
g=0;
for(i=1;i=1;k--)
q=q*(x[i-1]-z) s[k-1];
d2=d2 q*q;
c=y[i-1]*q c;
g=(x[i-1]-z)*q*q g;
}
c=c/d2;
p=g/d2;
q=d2/d1;
d1=d2;
a[j-1]=c*s[j-1];
t[j-1]=s[j-1];
for(k=j-1;k>=1;k--)
{
a[k-1]=c*s[k-1] a[k-1];
b[k-1]=t[k-1];
t[k-1]=s[k-1];
}
}
*dt1=0;
*dt2=0;
*dt3=0;
for(i=1;i=1;k--)
q=q*(x[i-1]-z) a[k-1];
dt=q-y[i-1];
if(fabs(dt)>*dt3)
*dt3=fabs(dt);
*dt1=*dt1 dt*dt;
*dt2=*dt2 fabs(dt);
}
/*释放存储空间*/
free(s);
free(t);
free(b);
return(1);
}。
答:详情>>
问:C语言C语言为了准备三级网络技术上机考试,c语言至少要看到那一章节?
答:数据类型、输入输出、选择语句、循环语句、数组、指针、函数、文件详情>>
答:找一本 Think in java 的电子书 自学一下。 看看 各类招聘网站 的一些有趣的职位所要求的知识你是否具备,想办法自学一下。详情>>