五点三次平滑的程序源代码

来源:互联网 发布:淘宝减肥药 妙瘦 编辑:程序博客网 时间:2024/06/06 20:55

问题

用五点三次平滑公式对等距点上的观测数据进行平滑。

算法分析

设已知n个等距点,上的观测(或实验)数据为x0x1<…<xn1,则可以在每个数据点的前后各取两个相邻的点,用三次多项式

1.png

进行逼近。

根据最小二乘原理确定出系数a0a1a2a3,最后可得到五点三次平滑公式如下:

2.png

其中表示yi的平滑值。

于开始两点和两后两点分别由上述第1,2和4,5公式进行平滑。本方法要求数据点数n≥5。

三、实例

设9个等距观测点上的数据y为54.0,145.0,227.0,359.0,401.0,342.0,259.0,112.0,65.0,用五点三次平滑公式对此9个观测数据进行平滑。

四、代码


#include "stdio.h"
/*形参与函数    参数意义
int n   给定等距观测点数。要求
double y[n] 存放n个等距观测点上的观测数据
doulilc yy[n]   返回n个等距观测点上的平滑结果
void kspt() 过程
*/
void kspt(int n, double y[], double yy[])
{
    if (n<5)
    {
        for (int i=0; i<= n-1; i++)
            yy[i]=y[i];
    }
    else
    {
        yy[0] = 69.0*y[0] + 4.0*y[1] - 6.0*y[2] + 4.0*y[3] - y[4];
        yy[0]=yy[0]/70.0;
        yy[1]=2.0*y[0]+27.0*y[1]+12.0*y[2]-8.0*y[3];
        yy[1]=(yy[1]+2.0*y[4])/35.0;

        for (int i=2; i<=n-3; i++)
        {
            yy[i]=-3.0*y[i-2]+12.0*y[i-1]+17.0*y[i];
            yy[i]=(yy[i]+12.0*y[i+1]-3.0*y[i+2])/35.0;
        }
        yy[n-2]=2.0*y[n-5]-8.0*y[n-4]+12.0*y[n-3];
        yy[n-2]=(yy[n-2]+27.0*y[n-2]+2.0*y[n-1])/35.0;
        yy[n-1]=-y[n-5]+4.0*y[n-4]-6.0*y[n-3];
        yy[n-1]=(yy[n-1]+4.0*y[n-2]+69.0*y[n-1])/70.0;
    }

    return;
}

0 0
原创粉丝点击