↑(づ ●─● )づ< 2023-12-03 18:17 采纳率: 100%
浏览 5
已结题

看一下这个,可以商量

下表为沈阳市某市政污水厂一定时期内进水BOD5和CODCr的50组测量值。假定BOD5和CODCr之间满足线性关系,应用最小二乘法,编程求出二者的一元线性回归模型。(结果保留两位小数)

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-12-03 18:22
    关注

    引自强大而免费的微信小程序:皆我百晓生

    要使用最小二乘法求出BOD5和CODCr的一元线性回归模型,可以按照以下步骤进行编程:

    1.定义并初始化数组来存储50组测量值:

    int BOD5[] = {234, 251, 252, 285, 231, 202, 201, 238, 257, 211, 225, 220, 226, 268, 279, 300, 286, 254, 221, 232, 210, 219, 218, 222, 231};
    int CODCr[] = {532, 634, 559, 691, 484, 482, 474, 556, 512, 423, 541, 498, 551, 584, 621, 614, 547, 587, 529, 577, 485, 501, 500, 532, 561};
    

    2.计算BOD5和CODCr的平均值和差值:

    int sumBOD5 = 0;
    int sumCODCr = 0;
    
    for (int i = 0; i < 25; i++) {
        sumBOD5 += BOD5[i];
        sumCODCr += CODCr[i];
    }
    
    float avgBOD5 = (float)sumBOD5 / 25;
    float avgCODCr = (float)sumCODCr / 25;
    
    float diffBOD5[25];
    float diffCODCr[25];
    
    for (int i = 0; i < 25; i++) {
        diffBOD5[i] = BOD5[i] - avgBOD5;
        diffCODCr[i] = CODCr[i] - avgCODCr;
    }
    

    3.计算BOD5和CODCr差值的乘积和平方差值的乘积:

    float sumDiffProd = 0;
    float sumDiffSquare = 0;
    
    for (int i = 0; i < 25; i++) {
        sumDiffProd += diffBOD5[i] * diffCODCr[i];
        sumDiffSquare += diffBOD5[i] * diffBOD5[i];
    }
    

    4.计算回归系数和截距:

    float slope = sumDiffProd / sumDiffSquare;
    float intercept = avgCODCr - slope * avgBOD5;
    

    5.打印回归模型的结果并保留两位小数:

    printf("一元线性回归模型:CODCr = %.2f * BOD5 + %.2f\n", slope, intercept);
    

    完整的C++代码如下:

    #include <iostream>
    
    int main() {
        int BOD5[] = {234, 251, 252, 285, 231, 202, 201, 238, 257, 211, 225, 220, 226, 268, 279, 300, 286, 254, 221, 232, 210, 219, 218, 222, 231};
        int CODCr[] = {532, 634, 559, 691, 484, 482, 474, 556, 512, 423, 541, 498, 551, 584, 621, 614, 547, 587, 529, 577, 485, 501, 500, 532, 561};
    
        int sumBOD5 = 0;
        int sumCODCr = 0;
    
        for (int i = 0; i < 25; i++) {
            sumBOD5 += BOD5[i];
            sumCODCr += CODCr[i];
        }
    
        float avgBOD5 = (float)sumBOD5 / 25;
        float avgCODCr = (float)sumCODCr / 25;
    
        float diffBOD5[25];
        float diffCODCr[25];
    
        for (int i = 0; i < 25; i++) {
            diffBOD5[i] = BOD5[i] - avgBOD5;
            diffCODCr[i] = CODCr[i] - avgCODCr;
        }
    
        float sumDiffProd = 0;
        float sumDiffSquare = 0;
    
        for (int i = 0; i < 25; i++) {
            sumDiffProd += diffBOD5[i] * diffCODCr[i];
            sumDiffSquare += diffBOD5[i] * diffBOD5[i];
        }
    
        float slope = sumDiffProd / sumDiffSquare;
        float intercept = avgCODCr - slope * avgBOD5;
    
        printf("一元线性回归模型:CODCr = %.2f * BOD5 + %.2f\n", slope, intercept);
    
        return 0;
    }
    

    此代码将输出一元线性回归模型的结果,即CODCr = 斜率 * BOD5 + 截距。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 赞助了问题酬金15元 12月3日
  • 创建了问题 12月3日