我正在研究两个函数来计算矢量数据集的平均绝对偏差和中值绝对偏差。我在其中使用了重载的calcAverage函数。问题是,我为两个函数调用返回了相同的错误值。
这是输出。它给我科学记数法吗?
Mean absolute deviation = 4.09929e-016
Median absolute deviation = 4.09929e-016
这是平均绝对分布函数:
double calcMeanAD(vector<int> data_set){
vector<double> lessMean;
double mean = calcAverage(data_set);
for (auto it = data_set.begin(); it != data_set.end(); ++it){
lessMean.push_back(*it);
}
for (auto it = lessMean.begin(); it != lessMean.end(); ++it){
*it -= mean;
}
return calcAverage(lessMean);
}
这是绝对分布函数的中位数:
double calcMedAD(vector<int> data_set){
vector<double> lessMed;
double median = calcAverage(data_set);
for (auto it = data_set.begin(); it != data_set.end(); ++it){
lessMed.push_back(static_cast<double>(*it));
}
for (auto it = lessMed.begin(); it != lessMed.end(); ++it){
*it -= median;
}
return calcAverage(lessMed);
}
任何人都能发现错误的东西吗?感谢。
答案 0 :(得分:2)
两个函数都返回零,但有一些舍入错误。
记下您尝试计算的值的代数表达式,并将其与您的代码进行比较。
我不知道calcAverage的作用,但它并没有超载;你两次都用vector<double>
来调用它。它无法计算均值和中位数。
提示:您似乎错过了绝对和中位数的含义
答案 1 :(得分:0)
中值绝对偏差(MAD)计算为矢量的每个值的绝对值减去所有元素的中值的中值。所以你应该在你的代码中提供一个sort() 向量元素的函数用于查找值的中值并使用fabs()来计算差异 应该再次排序。