【C++】计算并集分割成的子区间的样本密度平均值

本文介绍如何计算两组非均匀分布样本在区间[0,1]上,经过各自分界点划分后的子区间样本密度平均值。通过实例演示了如何利用输入的分界点位置、子区间密度,合并分界点后计算新的子区间密度平均值。

题目:计算并集分割成的子区间的样本密度平均值

有两组样本数据非均匀分布在区间[0,1] 内。区间存在两组分界点, 。每组分界点个数为(K-1) ,这(K-1)个分界点将整个区间分割成K个子区间。已知每一组分界点的位置和由这组分界点分割成的K 个子区间的样本密度,请计算由这两组分界点的并集分割成的子区间的样本密度的平均值。如图1所示,区间[0,1] 存在两组分界点{0.25,0.5,0.75} 和{0.125,0.25,0.5} 。由第一组样本点划分出的4个子区间样本密度分别为2、1、0.5、05,由第二组样本点划分出的4个子区间样本密度分别为2.5,1.5、0.8、0.6。以上两组分界点的并集为{0.125,0.25,0.5,0.75} ,包含4个分界点,这4个分界点将整个区间分割成5个子区间,可以计算每个区间样本密度的平均值。以第一个区间[0,0.125] 为例,其样本密度的平均值为

输入样例:

3(每一组分界点的个数)

0.25    0.5    0.75(第一组分界点位置)

0.125   0.25   0.5  (第二组分界点位置)

2    1    0.5    0.5(由第一组分界点划分的区间样本密度)

2.5    1.5   0.8   0.6(由第二组分界点划分的区间样本密度)

输出样例:

2.25    1.75    0.9    0.55    0.55(由合并后的分界点划分的区间样本密度)

代码示例👇

//author:Mitchell_Donovan
//date:4.27
#include<iostream>
using namespace std;

int main() {
	int size;
	cout << "请输入节点个数:";
	cin >> size;
	double* Va = new double[size + 1];
	double* Vb = new double[size + 1];
	cout << "请输入第一组分界点值:";
	for (int i = 0; i < size; i++) {
		cin >> Va[i];
	}
	Va[size] = 1;
	cout << "请输入第二组分界点值:";
	for (int i = 0; i < size; i++) {
		cin >> Vb[i];
	}
	Vb[size] = 1;
	double* Pa = new double[size + 1];
	double* Pb = new double[size + 1];
	cout << "请输入第一组区间样本密度:";
	for (int i = 0; i < size + 1; i++) {
		cin >> Pa[i];
	}
	cout << "请输入第二组区间样本密度:";
	for (int i = 0; i < size + 1; i++) {
		cin >> Pb[i];
	}
	double a = Va[0], b = Vb[0];
	int i = 0, j = 0;
	while (a != 1 || b != 1) {
		cout << (Pa[i] + Pb[j]) / 2 << " ";
		if (a < b) {
			a = Va[++i];
		}
		else if (a > b) {
			b = Vb[++j];
		}
		else {
			a = Va[++i];
			b = Vb[++j];
		}
	}
	cout << (Pa[i] + Pb[j]) / 2 << " ";
}

输出示例👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mitch311

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值