1. 程式人生 > >C# 分段線性插值函式

C# 分段線性插值函式

由於專案需要,需要將資料採集得到的點數轉化為固定點數,使用分段線性插值其實現程式碼如下:

///<summary>

///分段線性插值,將一組數插值為所需點數

///</summary>

///<param name="dataIn">待插值的資料陣列</param>

///<param name="n">插值點數</param>

///<returns>插值後的資料陣列</returns>

public static double[] Interpolation(double[] dataIn,int n)

{

double[] dataOut = new

double[n];

int lenIn = dataIn.Length;

double[] a = new double[lenIn];

double[] divIn = new double[lenIn];

double[] divOut = new double[n];

divIn[0] = 0;

for (int i = 1; i < lenIn; i++)

{

divIn[i] = divIn[i - 1] + 1;

}

divOut[0] = 0;

for (int i = 1; i < n; i++)

{

divOut[i] = divOut[i - 1] + lenIn / Convert

.ToDouble(n);

}

int k = 0;

for (int i = k; i < n; i++)

{

for (int j = 0; j < lenIn - 1; j++)

{

if (divOut[i] >= divIn[j] && divOut[i] < divIn[j + 1])

{

dataOut[i] = (dataIn[j + 1] - dataIn[j]) * (divOut[i] - divIn[j]) / (divIn[j + 1] - divIn[j]) + dataIn[j];

k = i;

}

}

}

return dataOut;

}