plecs使用C-Script模块实现线性插值算法
提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
文章目錄
- 一、定義插值函數(shù)
- 二、定義函數(shù)
- 1.getIndex
- 2.定義宏命令
- 3.指針的獲取
- 三、返回
- 總結(jié)
一、定義插值函數(shù)
在plecs打開C-Script代碼編寫模塊
double lininterp(double *x, double *y, int vectorLength, double xValue)
*x橫坐標(biāo)向量,c語(yǔ)言中沒有現(xiàn)成的向量,故用指針來實(shí)現(xiàn)。
*y縱坐標(biāo)向量。
又因?yàn)閏語(yǔ)言里傳遞指針時(shí)無(wú)法傳遞指針的長(zhǎng)度,所以還需要傳輸點(diǎn)的個(gè)數(shù)的數(shù)量vectorLength。
最后還需要插值的橫坐標(biāo)xValue。所以就是根據(jù)橫縱坐標(biāo)向量和向量長(zhǎng)度,得到想要差值橫坐標(biāo)的縱坐標(biāo)。
double lininterp(double *x, double *y, int vectorLength, double xValue) {int index = getIndex(x, vectorLength, xValue);if(index == vectorLength - 1)return LINEAR_INTERPOLATION(x[index-1], y[index-1], x[index], y[index], xValue);elsereturn LINEAR_INTERPOLATION(x[index], y[index], x[index+1], y[index+1], xValue); }getIndex這個(gè)函數(shù)的功能是求出xValue在那兩個(gè)差值之間,并返回左邊那個(gè)點(diǎn)的索引值,賦給了index這個(gè)變量
除了遇到最右的區(qū)塊,返回最右邊的索引:index == vectorLength - 1。用最右的點(diǎn)與倒數(shù)第二個(gè)點(diǎn)進(jìn)行差值。否則會(huì)溢出
宏命令LINEAR_INTERPOLATION實(shí)現(xiàn)知道X1,X2,Y1,Y2和X,返回Y
二、定義函數(shù)
1.getIndex
代碼如下(示例):
int getIndex(double *x, int vectorLength, double xValue) {int minIndex = 0;int maxIndex = vectorLength - 1;int middleIndex;if(xValue < x[minIndex])return minIndex;else if(xValue > x[maxIndex])return maxIndex;while(1){if(maxIndex - minIndex <= 1)return minIndex;middleIndex = (minIndex + maxIndex)/2;if(x[middleIndex] > xValue)maxIndex = middleIndex;elseminIndex = middleIndex;} }2.定義宏命令
代碼如下(示例):
#define LINEAR_INTERPOLATION(X1, Y1, X2, Y2, X) ( (Y2-Y1)/(X2-X1)*(X-X1) + Y1 )#define VECTOR_LENGTH ( ParamDim(0, 0)*ParamDim(0, 1) )分別定義插值和向量長(zhǎng)度。向量長(zhǎng)度是行數(shù)與列數(shù)的乘積
3.指針的獲取
setup處
code declaration部分,獲取
code中start function code部分,分配內(nèi)存,并賦值
在仿真結(jié)束時(shí)釋放內(nèi)存,在terminate function code
三、返回
調(diào)用lininterp函數(shù)
Output(0) = lininterp(x, y, VECTOR_LENGTH, fmod(CurrentTime, x[VECTOR_LENGTH - 1]));總結(jié)
提示:這里對(duì)文章進(jìn)行總結(jié):
例如:以上就是今天要講的內(nèi)容,本文僅僅簡(jiǎn)單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。
總結(jié)
以上是生活随笔為你收集整理的plecs使用C-Script模块实现线性插值算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php读取 Excel文件
- 下一篇: 用C#将PDF转换为Doc