爱问知识人 爱问教育 医院库

求C或C 语言编写的用最小二乘法进行曲线拟合

首页

求C或C 语言编写的用最小二乘法进行曲线拟合

函数逼近与曲线拟合,用最小二乘法进行曲线拟合的C或C  编写的完整程序!

提交回答

全部答案

    2018-05-12 04:41:53
  •   你的近似解析表达式为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);
    }。

    有***

    2018-05-12 04:41:53

类似问题

换一换

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 174-193
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):