相关系数Rab
原创作品,转载请指明出处,谢谢!
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
struct Rab {
int num;
vector <float> age;
vector <float>value;
float age_avg,value_avg;
void init() {
for (int i=0; i<num; i++) {
age_avg+=age[i];
value_avg+=value[i];
}
age_avg = 1.0*age_avg/num;
value_avg=1.0*value_avg/num;
}
float calc() {
float age_std=0.0,value_std=0.0,sum=0.0;
for(int i=0; i<num; i++) {
age_std+=((age[i]-age_avg)*(age[i]-age_avg));
value_std+=((value[i]-value_avg)*(value[i]-value_avg));
sum+=((age[i]-age_avg)*(value[i]-value_avg));
}
age_std=age_std/(1.0*num);
value_std=value_std/(1.0*num);
sum=sum/(1.0*num);
return sum/(age_std*value_std);
}
} R;
int main()
{
freopen("in.txt","r",stdin);
scanf("%d",&R.num);
float age_tmp,value_tmp;
for(int i=0; i<R.num; i++) {
scanf("%f%f",&age_tmp,&value_tmp);
R.age.push_back(age_tmp);
R.value.push_back(value_tmp);
}
R.init();
printf("%f\n",R.calc());
return 0;
}
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
struct Rab {
int num;
vector <float> age;
vector <float>value;
float age_avg,value_avg;
void init() {
for (int i=0; i<num; i++) {
age_avg+=age[i];
value_avg+=value[i];
}
age_avg = 1.0*age_avg/num;
value_avg=1.0*value_avg/num;
}
float calc() {
float age_std=0.0,value_std=0.0,sum=0.0;
for(int i=0; i<num; i++) {
age_std+=((age[i]-age_avg)*(age[i]-age_avg));
value_std+=((value[i]-value_avg)*(value[i]-value_avg));
sum+=((age[i]-age_avg)*(value[i]-value_avg));
}
age_std=age_std/(1.0*num);
value_std=value_std/(1.0*num);
sum=sum/(1.0*num);
return sum/(age_std*value_std);
}
} R;
int main()
{
freopen("in.txt","r",stdin);
scanf("%d",&R.num);
float age_tmp,value_tmp;
for(int i=0; i<R.num; i++) {
scanf("%f%f",&age_tmp,&value_tmp);
R.age.push_back(age_tmp);
R.value.push_back(value_tmp);
}
R.init();
printf("%f\n",R.calc());
return 0;
}
这个代码中间可能有点问题,太简单了我也没有查,大家看看做个参考吧!
下面给出测试数据:
18 23 9.5 23 26.5 27 7.8 27 17.8 39 31.4 41 25.9 47 27.4 49 27.2 50 31.2 52 34.6 54 42.5 54 28.8 56 33.4 57 30.2 58 34.1 58 32.9 60 41.2 61 35.7