提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、定义插值函数
在plecs打开C-Script代码编写模块
double lininterp(double *x, double *y, int vectorLength, double xValue)
*x横坐标向量,c语言中没有现成的向量,故用指针来实现。
*y纵坐标向量。
又因为c语言里传递指针时无法传递指针的长度,所以还需要传输点的个数的数量vectorLength。
最后还需要插值的横坐标xValue。所以就是根据横纵坐标向量和向量长度,得到想要差值横坐标的纵坐标。
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);
else
return LINEAR_INTERPOLATION(x[index], y[index], x[index+1], y[index+1], xValue);
}
getIndex这个函数的功能是求出xValue在那两个差值之间,并返回左边那个点的索引值,赋给了index这个变量
除了遇到最右的区块,返回最右边的索引:index == vectorLength - 1。用最右的点与倒数第二个点进行差值。否则会溢出
宏命令LINEAR_INTERPOLATION实现知道X1,X2,Y1,Y2和X,返回Y
二、定义函数
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;
else
minIndex = 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) )
分别定义插值和向量长度。向量长度是行数与列数的乘积
3.指针的获取
setup处
code declaration部分,获取
code中start function code部分,分配内存,并赋值
在仿真结束时释放内存,在terminate function code
三、返回
调用lininterp函数
Output(0) = lininterp(x, y, VECTOR_LENGTH, fmod(CurrentTime, x[VECTOR_LENGTH - 1]));
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。