X轴代表时间小时一组数据为1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24,Y轴代表mmhg数据分别为115、110、110、108、110、115、117、119、123、129、135、143、146、150、152、155、154、148、146、145、140、135、125、120,通过两组数据计算出y与x之间的余弦方程关系,要推导过程,用Qt写代码,越详细越好
时间: 2023-03-27 13:03:26 浏览: 78
1小时搞定统计控制图SPC图.pptx
根据给定的数据,我们可以先将x轴和y轴的数据分别存储在两个数组中。然后,我们可以通过计算两个数组的平均值来计算它们的余弦相似度。具体的计算过程如下:
1. 计算x轴和y轴的平均值
double x_mean = .;
double y_mean = .;
for (int i = ; i < 24; i++) {
x_mean += x[i];
y_mean += y[i];
}
x_mean /= 24;
y_mean /= 24;
2. 计算x轴和y轴的标准差
double x_std = .;
double y_std = .;
for (int i = ; i < 24; i++) {
x_std += pow(x[i] - x_mean, 2);
y_std += pow(y[i] - y_mean, 2);
}
x_std = sqrt(x_std / 24);
y_std = sqrt(y_std / 24);
3. 计算x轴和y轴的协方差
double cov = .;
for (int i = ; i < 24; i++) {
cov += (x[i] - x_mean) * (y[i] - y_mean);
}
cov /= 24;
4. 计算余弦相似度
double cos_sim = cov / (x_std * y_std);
最终得到的cos_sim即为x轴和y轴之间的余弦相似度,它表示了两个数组之间的相似程度。如果cos_sim越接近1,说明两个数组越相似;如果cos_sim越接近-1,说明两个数组越不相似。
注意:在实际应用中,我们可能需要对数据进行归一化处理,以避免数据范围不同导致的误差。此外,我们还需要注意处理一些边界情况,比如除数为等。
以上是计算余弦相似度的过程,如果需要用Qt写代码,可以参考以下示例代码:
#include <QtMath>
double x[24] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24};
double y[24] = {115,110,110,108,110,115,117,119,123,129,135,143,146,150,152,155,154,148,146,145,140,135,125,120};
double calc_cos_sim(double x[], double y[], int n) {
double x_mean = .;
double y_mean = .;
for (int i = ; i < n; i++) {
x_mean += x[i];
y_mean += y[i];
}
x_mean /= n;
y_mean /= n;
double x_std = .;
double y_std = .;
for (int i = ; i < n; i++) {
x_std += pow(x[i] - x_mean, 2);
y_std += pow(y[i] - y_mean, 2);
}
x_std = sqrt(x_std / n);
y_std = sqrt(y_std / n);
double cov = .;
for (int i = ; i < n; i++) {
cov += (x[i] - x_mean) * (y[i] - y_mean);
}
cov /= n;
return cov / (x_std * y_std);
}
int main(int argc, char *argv[]) {
double cos_sim = calc_cos_sim(x, y, 24);
qDebug() << "cos_sim = " << cos_sim;
return ;
}
阅读全文