由上可知,
p(a1)=0.2 ,p(a2)=0.3 ,p(a3)=0.5
因为X(ai)=i, X(a1)=1,X(a2)=2,X(a3)=3
FX(0)=0,FX(1)=0.2 ,FX(2)=0.5 ,FX(3)=1.0, U(0)=1 ,L(0)=0
有公式,L(n)=L(n-1)+(U(n-1)-L(n-1))Fx(xn-1)
u(n)=L(n-1)+(U(n-1)-L(n-1))Fx(xn)
第一次 出现a1,时
L(1)=L(0)+(U(0)-L(0))Fx(0)=0
U(1)=L(0)+(U(0)-L(0))Fx(1)=0.2
第二次出现a1,时
L(2)=L(1)+(U(1)-L(1))Fx(0)=0
U(2)=L(1)+(U(1)-L(1))Fx(1)=0.04
第三次 出现a3,时
L(3)=L(2)+(U(2)-L(2))Fx(2)=0.02
U(3)=L(2)+(U(2)-L(2))Fx(3)=0.04
第四次 出现a2,时
L(4)=L(3)+(U(3)-L(3))Fx(1)=0.024
U(4)=L(3)+(U(3)-L(3))Fx(2)=0.03
第五次 出现a3,时
L(5)=L(4)+(U(4)-L(4))Fx(2)=0.027
U(5)=L(4)+(U(4)-L(4))Fx(3)=0.03
第六次 出现a1,时
L(6)=L(5)+(U(5)-L(5))Fx(0)=0.027
U(6)=L(5)+(U(5)-L(5))Fx(1)=0.0276
所以,序列a1a1a3a2a3a1的实值标签为:T(113231)=(L(6)+ U(6))/2=0.0273;
解.源程序为:
#include<stdio.h> int main() { int m[10]; double A0=0,A1=0.2,A2=0.5,A3=1.0; double l[10]={0.0},u[10]={1.0};//l和u分别表示下界和上界 double tag=0.6321599,t; int n=10; for(int i=1;i<=10;i++) { t=(tag-l[i-1])/(u[i-1]-l[i-1]); if(t>A0&&t<A1) { l[i]=l[i-1]+(u[i-1]-l[i-1])*A0; u[i]=l[i-1]+(u[i-1]-l[i-1])*A1; m[i]=1; } else if(t>A1&&t<A2) { l[i]=l[i-1]+(u[i-1]-l[i-1])*A1; u[i]=l[i-1]+(u[i-1]-l[i-1])*A2; m[i]=2; } else { l[i]=l[i-1]+(u[i-1]-l[i-1])*A2; u[i]=l[i-1]+(u[i-1]-l[i-1])*A3; m[i]=3; } printf("%d ",m[i]); } return 0; }