【B++】在九个点之间跳动

题设

现有九个点O=(0,0),(0,1),(0,2),(1,0),A=(1,1),(1,2),(2,0),(2,1),B=(2,2),设由这九个点的坐标组成的集合为C。动点P从O点出发,每隔1s就会向上或向右跳一格,两种情况的概率都是 1 2 \frac12 21。当P=B时,它将停止跳动。

1. 原题

如果不允许P跳出集合C,求当P根据原规则从O跳到B的过程中P经过A的概率。

解:
设从某一点开始,P最终抵达点B且(不)经过点A的概率为W(W’),将跳出集合C(且经过点A)的概率为L(L’)。
列出九点概率矩阵:
[ W ′ W ′ W ′ 1 2 W 1 2 W ′ W W ′ 1 2 W 1 2 W ′ 1 2 W 1 2 W ′ W ′ ] \begin{bmatrix}W'&W'&W'\\\frac12W\frac12W'&W&W'\\\frac12W\frac12W'&\frac12W\frac12W'&W'\end{bmatrix} W21W21W21W21WWW21W21WWWW
因此,所求概率为 P = 1 2 P=\frac12 P=21
验证程序:

from random import randint as r
count = 1000000
imag = 1/2
n = 100
b, B, err = 0, 0, 0
print(f'准确值为{imag}')
for i in range (1,count+1):
    b = 0
    x,y=0,0
    while True:
        if x>2:
            x -= 1
            continue
        elif y>2:
            y -= 1
            continue
        elif (x,y) == (2,2):
            break
        elif (x,y) == (1,1):
            b=1
        if r(0,1):
            x+=1
        else:
            y+=1
    B += b
    if i%(count//n) == 0:
        ans = B/(count//n)
        err += ans - imag
        print(f'实际值为{ans},误差为{ans-imag:.4f},累计误差为{err:.4f}')
        B = 0

2. 跃出时传送回原点

如果P∉C,则让P跳回原点,之后按原规则跳动。求当P根据原规则从O跳到B的过程中P经过A的概率。

解:
列出九点概率矩阵:
[ 1 4 W ′ 3 4 L ′ 1 2 W ′ 1 2 L ′ W ′ 1 4 W 1 8 W ′ 1 4 L 3 8 L ′ 1 2 W 1 2 L 1 2 W ′ 1 2 L ′ 1 4 W 1 8 W ′ 1 4 L 3 8 L ′ 1 4 W 1 8 W ′ 1 4 L 3 8 L ′ 1 4 W ′ 3 4 L ′ ] \begin{bmatrix}\frac14W'\frac34L'&\frac12W'\frac12L'&W'\\\frac14W\frac18W'\frac14L\frac38L'&\frac12W\frac12L&\frac12W'\frac12L'\\\frac14W\frac18W'\frac14L\frac38L'&\frac14W\frac18W'\frac14L\frac38L'&\frac14W'\frac34L'\end{bmatrix} 41W43L41W81W41L83L41W81W41L83L21W21L21W21L41W81W41L83LW21W21L41W43L
根据题意,L等价于W,W’等价于0,所以
P O = 1 2 W 3 8 L ′ P_O=\frac12W\frac38L' PO=21W83L,所求概率 P = W + L ′ W + L ′ 2 W + ⋯ = 1 2 ∑ n = 0 + ∞ ( 3 8 ) n = 1 2 ⋅ 1 1 − 3 8 = 4 5 P=W+L'W+L'^2W+⋯=\frac12∑_{n=0}^{+∞}(\frac38)^n=\frac12·\frac1{1-\frac38}=\frac45 P=W+LW+L2W+=21n=0+(83)n=211831=54
特别地,如果不将P跳出C的情况计算在内,则所求概率为 P = W O W O + W O ′ = 1 4 1 4 + 1 8 = 2 3 P=\frac{W_O}{W_O+W'_O}=\frac{\frac14}{\frac14+\frac18}=\frac23 P=WO+WOWO=41+8141=32
验证程序:

from random import randint as r
count = 1000000
imag = 4/5
n = 100
b, B, err = 0, 0, 0
print(f'准确值为{imag}')
for i in range (1,count+1):
    b = 0
    x,y=0,0
    while True:
        if x>2 or y>2:
            x, y = 0, 0
            continue
        elif (x,y) == (2,2):
            break
        elif (x,y) == (1,1):
            b=1
        if r(0,1):
            x+=1
        else:
            y+=1
    B += b
    if i%(count//n) == 0:
        ans = B/(count//n)
        err += ans - imag
        print(f'实际值为{ans},误差为{ans-imag:.4f},累计误差为{err:.4f}')
        B = 0

3. 跃出时传送到对面

P跳动时,令x’=(x+1)%3,y’=(y+1)%3。求当P从O跳到B的过程中P经过A的概率。

解:
根据题意,L等价于W,W’等价于0。列出化简后的九点概率矩阵:
[ 3 4 L ′ 1 2 L ′ 0 1 2 W 3 8 L ′ W 1 2 L ′ 1 2 W 3 8 L ′ 1 2 W 3 8 L ′ 3 4 L ′ ] \begin{bmatrix}\frac34L'&\frac12L'&0\\\frac12W\frac38L'&W&\frac12L'\\\frac12W\frac38L'&\frac12W\frac38L'&\frac34L'\end{bmatrix} 43L21W83L21W83L21LW21W83L021L43L
将P跳出C之后传送到(x,y)点的概率记为Lxy,则上述矩阵可写作:
[ 1 2 L 00 1 4 L 10 1 2 L 10 0 1 2 W 1 4 L 00 1 8 L 10 W 1 2 L 01 1 2 W 1 4 L 00 1 16 L 01 1 16 L 10 1 2 W 1 4 L 00 1 8 L 01 1 2 L 00 1 4 L 01 ] \begin{bmatrix}\frac12L_{00}\frac14L_{10}&\frac12L_{10}&0\\\frac12W\frac14L_{00}\frac18L_{10}&W&\frac12L_{01}\\\frac12W\frac14L_{00}\frac1{16}L_{01}\frac1{16}L_{10}&\frac12W\frac14L_{00}\frac18L_{01}&\frac12L_{00}\frac14L_{01}\end{bmatrix} 21L0041L1021W41L0081L1021W41L00161L01161L1021L10W21W41L0081L01021L0121L0041L01
由对称性可得L10=L01,因此由穿越映射关系(即P∉C时的跳跃规则)可得 L 00 = L 01 = 1 2 + 1 4 L 00 + 1 8 L 01 L_{00}=L_{01}=\frac12+\frac14L_{00}+\frac18L_{01} L00=L01=21+41L00+81L01。解之可得所求概率 P = L 00 = 4 5 P=L_{00}=\frac45 P=L00=54

验证程序:

from random import randint as r
count = 1000000
imag = 4/5n = 100b, B, err = 0, 0, 0
print(f'准确值为{imag}')
for i in range (1,count+1):
    b = 0
    x,y=0,0    
    while True:        
        if (x,y) == (2,2):            
            break       
        elif (x,y) == (1,1):
            b=1        
        if r(0,1):            
            x=(x+1)%3        
        else:            
            y=(y+1)%3    
    B += b    
    if i%(count//n) == 0:        
        ans = B/(count//n)        
        err += ans - imag        
        print(f'实际值为{ans},误差为{ans-imag:.4f},累计误差为{err:.4f}')        
        B = 0

4. 跃出时传送到对称点

P跳出C时,将P传送到上一步所在点与A成中心对称的点。求当P从O跳到B的过程中P经过A的概率。

解:
仿照上一题,可列出概率矩阵: [ 1 2 L 20 1 4 L 10 1 2 L 10 0 1 2 W 1 4 L 20 1 8 L 10 W 1 2 L 01 1 2 W 1 8 L 02 1 8 L 20 1 16 L 01 1 16 L 10 1 2 W 1 4 L 02 1 8 L 01 1 2 L 02 1 4 L 01 ] \begin{bmatrix}\frac12L_{20}\frac14L_{10}&\frac12L_{10}&0\\\frac12W\frac14L_{20}\frac18L_{10}&W&\frac12L_{01}\\\frac12W\frac18L_{02}\frac18L_{20}\frac1{16}L_{01}\frac1{16}L_{10}&\frac12W\frac14L_{02}\frac18L_{01}&\frac12L_{02}\frac14L_{01}\end{bmatrix} 21L2041L1021W41L2081L1021W81L0281L20161L01161L1021L10W21W41L0281L01021L0121L0241L01
按对称性将其化简:
[ 1 2 L 02 1 4 L 01 1 2 L 01 0 1 2 W 1 4 L 02 1 8 L 01 W 1 2 L 01 1 2 W 1 4 L 02 1 8 L 01 1 2 W 1 4 L 02 1 8 L 01 1 2 L 02 1 4 L 01 ] \begin{bmatrix}\frac12L_{02}\frac14L_{01}&\frac12L_{01}&0\\\frac12W\frac14L_{02}\frac18L_{01}&W&\frac12L_{01}\\\frac12W\frac14L_{02}\frac18L_{01}&\frac12W\frac14L_{02}\frac18L_{01}&\frac12L_{02}\frac14L_{01}\end{bmatrix} 21L0241L0121W41L0281L0121W41L0281L0121L01W21W41L0281L01021L0121L0241L01
按穿越映射关系列出方程组:
{ L 01 = 1 2 + 1 4 L 02 + 1 8 L 01 L 02 = 1 2 L 02 + 1 4 L 01 \left\{\begin{matrix}L_{01}=\frac12+\frac14L_{02}+\frac18L_{01}\\L_{02}=\frac12L_{02}+\frac14L_{01}\end{matrix}\right. {L01=21+41L02+81L01L02=21L02+41L01
解得 L 01 = 2 3 , L 02 = 1 3 L_{01}=\frac23,L_{02}=\frac13 L01=32,L02=31。因此,所求概率 P = L 00 = 1 2 + 1 4 L 02 + 1 8 L 01 = 2 3 P=L_{00}=\frac12+\frac14L_{02}+\frac18L_{01}=\frac23 P=L00=21+41L02+81L01=32
验证程序:

from random import randint as r
count = 1000000
imag = 2/3
n = 100
b, B, err = 0, 0, 0
print(f'准确值为{imag}')
for i in range (1,count+1):
    b = 0
    x,y=0,0
    while True:
        if (x,y) == (1,1):
            b=1
        if (x,y) == (2,2):
            break
        if x>2:
            x = 0
            y = 2-y
        elif y>2:
            y = 0
            x = 2-x
        elif r(0,1):
            x+=1
        else:
            y+=1
    B += b
    if i%(count//n) == 0:
        ans = B/(count//n)
        err += ans - imag
        print(f'实际值为{ans},误差为{ans-imag:.4f},累计误差为{err:.4f}')
        B = 0

5. 跃出时传送到随机点

如果P∉C,则让P随机地跳到C中的任意一点,且跳到每个点的概率都是 1 9 \frac19 91,之后按原规则跳动。求当P根据原规则从O跳到B的过程中P经过A的概率。

解:
列出九点概率矩阵:
[ 1 4 W ′ 3 4 L ′ 1 2 W ′ 1 2 L ′ W ′ 1 4 W 1 8 W ′ 1 4 L 3 8 L ′ 1 2 W 1 2 L 1 2 W ′ 1 2 L ′ 1 4 W 1 8 W ′ 1 4 L 3 8 L ′ 1 4 W 1 8 W ′ 1 4 L 3 8 L ′ 1 4 W ′ 3 4 L ′ ] \begin{bmatrix}\frac14W'\frac34L'&\frac12W'\frac12L'&W'\\\frac14W\frac18W'\frac14L\frac38L'&\frac12W\frac12L&\frac12W'\frac12L'\\\frac14W\frac18W'\frac14L\frac38L'&\frac14W\frac18W'\frac14L\frac38L'&\frac14W'\frac34L'\end{bmatrix} 41W43L41W81W41L83L41W81W41L83L21W21L21W21L41W81W41L83LW21W21L41W43L
九个点的总概率式为 P C = 5 36 W 23 72 W ′ 5 36 L 29 72 L ′ P_C=\frac5{36}W\frac{23}{72}W'\frac5{36}L\frac{29}{72}L' PC=365W7223W365L7229L
根据题意,L等价于W,W’等价于0,所以 P O = 1 2 W 3 8 L ′ , P C = 5 18 W 29 72 L ′ P_O=\frac12W\frac38L',P_C=\frac5{18}W\frac{29}{72}L' PO=21W83L,PC=185W7229L
因此,所求概率 P = W O + L O ′ ( W + L ′ W + L ′ 2 W + ⋯ ) = 1 2 + 3 8 ∑ n = 0 + ∞ 5 18 ( 29 72 ) n = 1 2 + 3 8 ⋅ 5 18 ⋅ 1 1 − 29 72 = 29 43 P=W_O+L'_O(W+L'W+L'^2W+⋯)=\frac12+\frac38∑_{n=0}^{+∞}\frac5{18}(\frac{29}{72})^n=\frac12+\frac38·\frac5{18}·\frac1{1-\frac{29}{72}}=\frac{29}{43} P=WO+LO(W+LW+L2W+)=21+83n=0+185(7229)n=21+83185172291=4329

验证程序:

from random import randint as r
count = 1000000
imag = 29/43
n = 100
b, B, err = 0, 0, 0
print(f'准确值为{imag}')
for i in range (1,count+1):
    b = 0
    x,y=0,0
    while True:
        if x>2 or y>2:
            x, y = r(0,2), r(0,2)
            continue
        elif (x,y) == (2,2):
            break
        elif (x,y) == (1,1):
            b=1
        if r(0,1):
            x+=1
        else:
            y+=1
    B += b
    if i%(count//n) == 0:
        ans = B/(count//n)
        err += ans - imag
        print(f'实际值为{ans},误差为{ans-imag:.4f},累计误差为{err:.4f}')
        B = 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值