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

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

关注引自强大而免费的微信小程序:皆我百晓生。
要使用最小二乘法求出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 + 截距。