c - 我在 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;
}
解决方案
由于您没有给出calcMean(arr, s)
函数的实现,我假设您能够在没有任何逻辑错误的情况下实现它。
我在这里感觉到的问题是最小二乘公式中的总和是从i = 1
直到i = n
。但是你已经从i = 0
until循环了i=n-1
。
在这里,您只需要从i = 1
until运行循环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;
}
推荐阅读
- c# - 如何显示表格中两列之间的差异
- django-models - Django 如何处理自定义验证?
- javascript - 如何使用展开的折叠菜单移动项目?
- python - Kivy size_hint 不适用于所有布局
- c - 当进程处于选择系统调用中时,ptrace 失败
- javascript - 为什么在反应 js 中选中复选框后隐藏其他元素?
- javascript - 在 OpenCV.js 中使用 Mask Canvas 图像进行抓取
- c# - PDFsharp - C# - KeyValuePair - PowerShell 转换
- alsa - rate 插件如何在 alsa-lib 中工作?
- python - 使用通过移动水平估计修改的参数的矩阵运算