五点三次平滑的程序源代码
問題
用五點三次平滑公式對等距點上的觀測數據進行平滑。
算法分析
設已知n個等距點,上的觀測(或實驗)數據為x0<x1<…<xn-1,則可以在每個數據點的前后各取兩個相鄰的點,用三次多項式
Y=a0+a1x+a2x^2+a3x^3
進行逼近。
根據最小二乘原理確定出系數a0,a1,a2,a3,最后可得到五點三次平滑公式如下:
改公式要求數據點數n≥5,當數據點數多于5時,為對稱考慮,除在兩端分別用公式(4-1),(4-2)和(4-4),(4-5)外,其余都用公式(4-3)進行平滑,這就相當在每個子區間上用不同的三次最小二乘多項式進行平滑。
三、實例
設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;
}
?
?
?
總結
以上是生活随笔為你收集整理的五点三次平滑的程序源代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apple苹果产品MFi设计及标准汇总
- 下一篇: 自定义异常:运行时期和编译时期的区别