如何将Matlab的polyfit和数组索引适配到c中?

xpcnnkqh  于 2023-02-21  发布在  Matlab
关注(0)|答案(1)|浏览(136)

我正在尝试将这行Matlab代码转换为c编程语言:

coefs = polyfit(X(50:(length(X)-50)),Y(50:(length(Y)-50)),1);

我尝试过不同的实现,但是没有一个能给予相同的coefs(1)值,也就是斜率,我感兴趣的只是斜率。

  • 注意:所有的代码可能过于复杂。截至目前,我不知道任何更好的。仍然是新的。*

因为c没有动态数组,所以我有两个链表,X和Y

**UPDATE:**我把所有的东西都改成了*float而不是列表。下面是函数的代码和声明。

float getSumF(float * head, int size){
    int i;
    float sum=0;
    for (i=0;i<size;i++){
        sum = sum + head[i];
    }
    return sum;
}

float coef (float* xx, float* yy, int size) {
    int i=0;
    float sumX2 = 0;
    float sumXY = 0;
    float sumX = 0;
    float sumY = 0;
    for (i=0;i<size;i++){
        sumX = sumX + xx[i];
        sumY = sumY + yy[i];
        sumX2 = sumX2 + xx[i]*xx[i];
        sumXY = sumXY + xx[i]*yy[i];
    }
    float slope = (size*sumXY-sumX*sumY)/(size*sumX2-sumX*sumX);
    return slope;
}

int main(void) {
    setbuf(stdout, NULL);
    int threshold=20;
    int k, i, j;
    float slope, angle;
    int width, height, channels;
    float* X = 0;
    float* Y = 0;
    int arraysizeX = 0;
    float* osc = 0;
    int arraysizeOsc = 0;
    float* coord = 0;
    int arraysizeCoord = 0;
    unsigned char *img;

我实现Matlab数组索引的方法是这样的:

for(i=0;i<1440;i++){
    if (coord[i] > 0){
        X = realloc (X,++arraysizeX*sizeof(*X));
        Y = realloc (Y,arraysizeX*sizeof(*Y));
        X[arraysizeX-1]=i+1;
        Y[arraysizeX-1]=coord[i];
    }
}
if (arraysizeX>102){
    slope=coef(X+50,Y+50,arraysizeX-100);
}
else{
    if(arraysizeX==0){
        free(X);
        free(Y);
        free(coord);
        printf("Threshold too low. Exiting.\n");
        return 3;
    }
    slope = coef(X,Y,arraysizeX);
}

我还在matlab中编写了相同的线性回归算法,如下所示:

sizeX=length(X);
sumX2 = 0;
sumXY = 0;
for i=1:sizeX
    sumX2 = sumX2 + X(i)*X(i);
    sumXY = sumXY + X(i)*Y(i);
endfor
slope=(sizeX*sumXY-sum(X)*sum(Y))/(sizeX*sumX2-sum(X)*sum(X));

x一米二米一x一米三米一x一米四米一
现在..是我在coef调用/函数中的错误吗?我做的一切都对吗?

**更新:**我提供的解决方案(在评论的指导下)运行正常。错误出现在matlab代码中,在获取XY数组时。

w8biq8rn

w8biq8rn1#

正如更新后:我提供的解决方案(从评论中做了一些调整)运行正常。错误在matlab代码中,在X和Y数组的获取中。

相关问题