首页 常识
您的位置: 首页 > 常识 >

相关系数怎么算(C++编程:高中数学_相关系数_计算)

相关关系的定义:

高中数学中,成对数据的统计分析是选修三的最后一章。在非函数关系的两个量中,一个量的变化,与另一个量有一定关系,但是还受到其他因素的影响,比如孩子身高与父母身高, 二者有一定关系,但是又不是精确决定的关系,这种关系称为相关关系(correlation)

正相关和负相关:如果一个变量增加时,另一个变量也增加,这两个变量称为正相关,反之则称为负相关。

样本相关系数(correlation coefficient)计算公式:

图1 样本相关系数的计算公式

如何用C++编程来计算相关系数?

假设样本数据保存在一个文件中(第一列为航班准点率,第二列为投诉量):

图2 样本数据

C++代码如下:

void correlationCoefficient();

//保存数据对的结构体
struct PointF
{
    float x;
    float y;
};

int main()
{
    correlationCoefficient();
    return 0;
}

/* --从文本文件中,逐行读出文本数据"x  y",
 * 并分割两个浮点型数据float x, flaot y,
 * 计算二者的相关系数(correlation coefficient)
 */
void correlationCoefficient()
{
    const int nPoints = 10; //数据对的个数

    ifstream inData;      //创建读取文件的流对象inData
    PointF points[nPoints];  //保存读取数据对的数组

    inData.open("XX3_CH8_P104_2.txt");   //打开文本文件

    if(!inData)  //打开文件失败
    {
        cout<<"Error: could not open file."<<endl;
        exit(1);
    }else cout<<"File opened."<<endl;  //打开文件


    string line;
    int i = 0;

    cout<<"Data pairs read from file:"  << endl;
    while(std::getline(inData, line)) //逐行读取文件内容
    {
       cout << line << endl;
       //sscanf()的第一个参数是要分割的字符串,第二个参数是格式化,后面的参数是分割之后的变量的地址
       //strtok () C语言的分割字符串函数
        sscanf(line.c_str(), "%f %f", &(points[i].x), &(points[i].y));
        i++;
    }


    cout<<"Data pairs stored in array points[" << nPoints <<"]:" << endl;
    for(int k = 0; k<nPoints; k++)
    {
        cout << points[k].x <<"  "<<points[k].y << endl;
    }

    //计算x的平均数,y的平均数。
    float averageX = 0;
    float averageY = 0;
    float sumX = 0;
    float sumY = 0;

    for(int i = 0; i<nPoints; i++)
    {
        sumX += points[i].x ;
        sumY += points[i].y ;
    }
    averageX = sumX/nPoints;
    averageY = sumY/nPoints;

    //
    float Lxy = 0;  //反映x和y相关程度的量Lxy
    float Sx = 0;   // Sx/nPoints 为x的方差
    float Sy = 0;   // Sy/nPoints 为y的方差
    for(int i = 0; i < nPoints; i++)
    {
        Lxy += (points[i].x - averageX)*(points[i].y - averageY);
        Sx += pow(points[i].x - averageX,2);
        Sy += pow(points[i].y - averageY,2);
    }

    Sx = sqrt(Sx);
    Sy = sqrt(Sy);

    float correlation = Lxy/(Sx*Sy);

    cout<<"correlation = " << correlation << endl;
    inData.close();  //关闭数据文件
}

程序输出:

图3 程序输出:从样本数据文件中读取数据并计算相关系数

水池高度是多少

2025-01-31 13:33:40
水池的高度因使用需求和设计要求的不同而有所变化。以下是一些常见的水池高度:游泳池 :深度通常在1.2米到2.5米之间,以满足不同水深要求的游泳者。厨房水池一般家庭的厨房水池高度在75至85厘米之间,这样洗碗不用弯腰太低,否则干完活腰疼。标准的厨房水池高度为85-90厘米,适合大多数人的身高,可以让人

冬天风速开多少

2025-01-31 13:22:24
在冬季使用空调时,建议将风速设置在 中速或低速。过大的风速会导致室内干燥,不利于健康,同时也会增加能耗。低速或中速的风速能够保持室内舒适度,并且有助于节省能源。具体建议如下:刚开暖风时,风速调到中档,等车内温度逐渐升高后,再根据需要调整风力大小。风速不宜过大,适宜设置在低速或者中速,以保持室内舒适度

鱼缸换水多少合适

2025-01-31 13:17:11
鱼缸换水的合适量主要取决于以下几个因素:鱼缸的大小较大的鱼缸(如60公分以上)由于水体容量大,水质相对稳定,换水量可以较多,一般建议每次换水量为1/3。较小的鱼缸(如40-50公分)由于水体容量小,水质波动大,换水量应较少,一般建议每次换水量不超过1/4。鱼的数量和种类鱼的数量越多,产生的废物越多,

楼梯面积多少合适

2025-01-31 12:44:45
楼梯的合适空间尺寸取决于多种因素,包括建筑类型、使用功能、人体工程学要求以及空间布局等。以下是一些常见的楼梯尺寸建议:公共楼梯梯段最小净宽不应小于2股人流的宽度,即不小于1.10米。休息平台的最小宽度不应小于梯段净宽,且不应小于1.20米。公共楼梯的每个梯段踏步一般不应超过18级,亦不应少于2级。住

秦皇岛公寓首付多少

2025-01-31 12:40:24
秦皇岛公寓的首付比例如下:一般情况公寓首套房首付比例为50%。特定楼盘或政策部分楼盘或项目可能有更低的首付比例,例如20%。有些开发商可能提供首付分期优惠政策,具体首付比例和条件需要咨询开发商或相关置业顾问。商业性质公寓通常为商业性质,因此首付比例可能较高,一般为50%左右。 建议了解具体楼盘:在购