组合,积分,正态
- 积分 - 组合 - 正态
问:设某种电子元件的寿命(单位:h)服从正态分布 ,随机地取10个元件,试求:恰有两个元件的寿命大于140h而小于180h的概率;
代码(C语言版)
#include <stdio.h>
#include<math.h>
#include<limits.h>
#define N 10000 //微积分里N表示分成的份数
#define pi 3.1415926
#define u 160 //正态期望
#define p 400 //正态方差
double f(double x);
double cc(double x);
double zt(int up, int down);
double zh(int n, int k);
//正态分布
int main()
{
int a, b, n, k, i;
double m, p2, p3, p4;
printf("输入a,b,其中b < x < a\n");
printf("输入a小时:");
scanf_s("%d", &a);
printf("输入b小时:");
scanf_s("%d", &b);
p2 = zt(b, a); p3 = 0;
printf("元件的寿命在%d到%d之间的概率为:%lf\n", b, a, p2);
printf("求输入n个元件中,恰有k个元件寿命在该范围内的概率:\n");
printf("输入总数n:");
scanf_s("%d", &n);
printf("输入符合条件的的元件数k:");
scanf_s("%d", &k);
m = 1.0*zh(n, k)*pow(p2, k)*pow(1 - p2, n - k);
printf("%d个元件中,恰有%d个元件寿命在该范围内的概率为:%lf\n", n, k, m);
return 0;
}
double f(double x)//函数表达式
{
double y;
y = sqrt(1 / (2 * pi))*exp(-pow(x, 2) / 2);
return y;
}
double cc(double x) {//左矩形法求定积分
int i;
double h, s;
/*计算步长*/
h = (x - 0) / N; //高
s = f(0)*h;//单个小矩形的面积
for (i = 1; i < N; i++) {
/*求N份小矩形的面积之和*/
s = s + f(0 + i * h)*h;
}
/*0.5为标准正态分布函数图0左边的概率综合*/
return s + 0.5;
}
double zt(int down, int up) {//正态分布
double um, a, b;
/*化为标准正态分布*/
b = (up - u) / sqrt(p);
a = (down - u) / sqrt(p);
if (b < 0) { //a,b均小于0时
b = -1 * b;
a = -1 * a;
um = cc(a) - cc(b);
}if (a < 0 && b >= 0) { //仅当a小于0时
a = -1 * a;
um = cc(b) + cc(a) - 1;
}
else {//a,b均大于0
um = cc(b) - cc(a);
}
return um;
}
double zh(int n, int k) {//组合数
int i;
if (k > n) {
return 0;
}
int tmp = 1;
for (i = 0; i < k; i++) {
tmp *= n - i;
tmp /= i + 1;
}
return tmp;
}
输出
输入a,b,其中b < x < a
输入a小时:180
输入b小时:140
元件的寿命在140到180之间的概率为:0.682705
求输入n个元件中,恰有k个元件寿命在该范围内的概率:
输入总数n:10
输入符合条件的的元件数k:2
10个元件中,恰有2个元件寿命在该范围内的概率为:0.002155
附:c语言中计算e的x次方,用 exp(x);计算x平方根用 sqrt(x);
π为 acos(-1.0) , 也可以直接宏定义;计算x的平方用pow(x,2);