首页 > 解决方案 > 我在 C 中的函数出现问题,尝试使用较小的块方法计算回归斜率。谁能帮我找出我的错误?

问题描述

这是C,只能使用C。

所以我在这里得到了等式:

在此处输入图像描述

我正在尝试计算公式中的“b”。该公式是通过租赁平方公式完成的回归斜率

我的代码包含一个名为“arr []”的数字列表,该列表中的元素数量为“s”。我进行了计算,我得到了错误的数字。如果有人可以帮助我,那就太好了,如果我不允许在这里问这个,请指出我可以问这个的方向。

calcMean 是一个计算平均值的函数。我需要的一个例子: 一个数字列表是:1 1 1 2 2 3 3 3 4 5 5 6 7 我需要得到一个:0.429 我的代码目前给我的答案很不正确。

我的代码:

double calcRegSlope(double arr[], int s) {
    double result = 0.0;
    double meanX = 0.0;
    double meanY = 0.0;
    double sumX = 0.0;
    double sumY = 0.0;
    double xValue = 0.0;
    double yValue = 0.0;
    for (int i = 0; i < s; i++) {
        sumX += pow((double)i,2.0);    
        sumY += (arr[i] * (double)i);
        meanX += (double)i;
    }
    
    meanX = meanX / (double)s;
    meanY = calcMean(arr, s);
    
    
    xValue = sumX - (s * pow(meanX, 2.0));                            
    yValue = sumY - (s * meanX * meanY);                            
    
    result = yValue / xValue;
    
    return (double)result;
}

标签: cmath

解决方案


由于您没有给出calcMean(arr, s)函数的实现,我假设您能够在没有任何逻辑错误的情况下实现它。

我在这里感觉到的问题是最小二乘公式中的总和是从i = 1直到i = n。但是你已经从i = 0until循环了i=n-1

在这里,您只需要从i = 1until运行循环i = s并通过 as 访问arr元素arr[i-1]

尝试执行更改后的代码,如果错误仍然存​​在,请告诉我。

double calcRegSlope(double arr[], int s) {
    double result = 0.0;
    double meanX = 0.0;
    double meanY = 0.0;
    double sumX = 0.0;
    double sumY = 0.0;
    double xValue = 0.0;
    double yValue = 0.0;
    for (int i = 1; i <= s; i++) {
        sumX += pow((double)i,2.0);    
        sumY += (arr[i-1] * (double)i);
        meanX += (double)i;
    }
    
    meanX = meanX / (double)s;
    meanY = calcMean(arr, s);
    
    
    xValue = sumX - (s * pow(meanX, 2.0));                            
    yValue = sumY - (s * meanX * meanY);                            
    
    result = yValue / xValue;
    
    return (double)result;
}

推荐阅读