You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Matlab的polyfit与数组索引逻辑转换为C语言?

Matlab转C语言:线性回归斜率计算结果不一致问题

我想把这段Matlab代码转成C语言,只需要获取斜率(即coefs(1)):

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

但多次尝试后,C语言计算出的斜率和Matlab结果完全对不上。

我是编程新手,一开始用链表实现,后来改成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里也写了和C语言逻辑一致的线性回归代码:

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));

各方法得到的斜率结果:

slope_polyfit = 7.4615e-3
slope_matlab = 5.8421e-3
slope_c = -0.175331

我的疑问:
错误是不是出在coef函数的调用或者实现里?我的代码逻辑有没有问题?

更新:经指导后问题已解决,错误源于Matlab代码中X、Y数组的获取环节。

内容的提问来源于stack exchange,提问作者ATSlooking4things

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:25:21