随机游走笔记(二)

本文介绍了随机游走的概率转移矩阵模型,通过矩阵表示状态间的转移概率,并以一维随机游走为例,展示如何计算任意步数后的位置分布。同时讨论了随机游走的回归性和无穷可达性性质,以及如何通过统计分析理解其特征。最后,文章探讨了分数阶随机游走,这种模型能更好地描述复杂环境中的扩散过程。
摘要由CSDN通过智能技术生成

(一)概率转移矩阵

        随机游走的概率转移矩阵模型是一种描述离散随机游走的方法。在这个模型中,我们可以使用一个矩阵来表示从一个状态到另一个状态的转移概率。假设我们有N个离散状态,那么概率转移矩阵将是一个N×N的矩阵,其中第(i, j)个元素表示从状态i转移到状态j的概率。

让我们用具体的例子来说明概率转移矩阵模型。考虑一个简单的一维离散随机游走,物体每次可以向左或向右移动一个单位距离。假设初始状态为0,而且在每一步中,物体向左或向右移动的概率相等(0.5)。

在这个例子中,概率转移矩阵如下:

      | 0.5  0.5 |
P =   |         |
      | 0.5  0.5 |

其中,P是概率转移矩阵,第一行表示当前状态为0时,下一步转移到状态0和1的概率;第二行表示当前状态为1时,下一步转移到状态0和1的概率。

为了理解概率转移矩阵的作用,我们可以用它来计算随机游走在任意步数后的状态分布。假设初始状态为状态0,我们想要知道在第n步后物体在每个状态上的概率。

初始状态分布:

X_0 = [1, 0]

第n步后的状态分布:

X_n = X_0 * P^n

其中,^表示矩阵的乘方运算。通过计算X_n,我们可以得到在第n步后物体在每个状态上的概率分布。

值得注意的是,在某些情况下,概率转移矩阵的幂运算可能会变得非常复杂,特别是在大规模状态空间或大步数的情况下。在实际应用中,可能需要使用数值方法或近似方法来计算状态分布。同时,对于特定的概率转移矩阵,可能还需要对其进行特征值分解等数学处理,以获得更深入的信息。

总结起来,概率转移矩阵模型是一种简单而有用的方法,用于描述离散随机游走的转移概率,帮助我们了解随机游走的长期行为和稳定状态。

(二)回归性和无穷可达性

在一维随机游走中,回归性和无穷可达性是重要的性质。回归性指的是在无限步数的情况下,随机游走几乎必定会回到初始位置。无穷可达性指的是如果步长的期望值大于0且方差有限,随机游走是无穷可达的,即在无限步数下,随机游走几乎必定会达到任何给定的位置。

下面是一个简单的一维随机游走的代码实例,我们将演示回归性和无穷可达性的性质:

import numpy as np
import matplotlib.pyplot as plt

def random_walk(steps):
    position = 0
    position_list = [position]
    
    for _ in range(steps):
        # 生成随机步长,可以用不同的分布来表示不同的随机行走模型
        step = np.random.choice([-1, 1])
        
        # 更新位置
        position += step
        position_list.append(position)
    
    return position_list

def simulate_random_walk(num_walks, num_steps):
    final_positions = []
    
    for _ in range(num_walks):
        random_walk_path = random_walk(num_steps)
        final_positions.append(random_walk_path[-1])
    
    return final_positions

# 模拟1000次随机游走,每次1000步
num_walks = 1000
num_steps = 1000

final_positions = simulate_random_walk(num_walks, num_steps)

# 绘制随机游走的最终位置分布
plt.hist(final_positions, bins=30, density=True, alpha=0.7, color='blue', edgecolor='black')
plt.xlabel("最终位置")
plt.ylabel("频率")
plt.title("随机游走的最终位置分布")
plt.show()

# 计算回归性和无穷可达性
num_return_to_origin = np.sum(np.array(final_positions) == 0)
proportion_return_to_origin = num_return_to_origin / num_walks
print(f"回归性:在 {num_walks} 次随机游走中,回到原点的次数为 {num_return_to_origin},比例为 {proportion_return_to_origin:.3f}")

min_position = np.min(final_positions)
max_position = np.max(final_positions)
print(f"无穷可达性:随机游走最终位置范围从 {min_position} 到 {max_position}")

在这个代码中,我们模拟了1000次一维随机游走,每次游走1000步。然后我们计算回归性和无穷可达性的性质。回归性指的是在1000次随机游走中,回到原点的次数和比例。无穷可达性指的是最终位置的范围,从最小值到最大值。

运行代码后,你将看到随机游走的最终位置分布图,并输出回归性和无穷可达性的结果。由于随机性的存在,每次运行结果可能会稍有不同,但回归性和无穷可达性的性质应该是符合预期的。

(三)统计分析

        随机游走的统计分析可以帮助我们了解随机游走的性质和特征,例如计算平均值、方差、自相关函数等。下面是一个简单的一维随机游走的统计分析代码实例:

import numpy as np
import matplotlib.pyplot as plt

def random_walk(steps):
    position = 0
    position_list = [position]
    
    for _ in range(steps):
        # 生成随机步长,可以用不同的分布来表示不同的随机行走模型
        step = np.random.choice([-1, 1])
        
        # 更新位置
        position += step
        position_list.append(position)
    
    return position_list

def simulate_random_walk(num_walks, num_steps):
    final_positions = []
    
    for _ in range(num_walks):
        random_walk_path = random_walk(num_steps)
        final_positions.append(random_walk_path[-1])
    
    return final_positions

# 模拟1000次随机游走,每次1000步
num_walks = 1000
num_steps = 1000

final_positions = simulate_random_walk(num_walks, num_steps)

# 统计分析
mean_position = np.mean(final_positions)
variance_position = np.var(final_positions)
autocorrelation = np.correlate(final_positions, final_positions, mode='full')

# 绘制随机游走的最终位置分布
plt.hist(final_positions, bins=30, density=True, alpha=0.7, color='blue', edgecolor='black')
plt.xlabel("最终位置")
plt.ylabel("频率")
plt.title("随机游走的最终位置分布")
plt.show()

print(f"平均位置:{mean_position:.3f}")
print(f"位置方差:{variance_position:.3f}")
print("自相关函数:", autocorrelation[num_steps-1:])

在这个代码中,我们模拟了1000次一维随机游走,每次游走1000步。然后我们计算了最终位置的平均值、方差以及自相关函数。

运行代码后,你将看到随机游走的最终位置分布图,并输出平均位置、位置方差和自相关函数的结果。由于随机性的存在,每次运行结果可能会略有不同,但平均位置、位置方差和自相关函数的统计特征应该是符合预期的。自相关函数展示了随机游走在不同步数下的自相关性,随着步数的增加,自相关性逐渐减弱。

(四)分数阶随机游走

        分数阶随机游走是将随机游走的概念推广到非整数阶的情况。在分数阶随机游走中,步长不再是离散的整数,而是连续的实数,且具有分数阶的特性。这使得分数阶随机游走能够更好地描述一些复杂介质中的扩散过程。下面是一个简单的一维分数阶随机游走的实例代码:

import numpy as np
import matplotlib.pyplot as plt

def fractional_random_walk(steps, alpha):
    position = 0
    position_list = [position]
    
    for _ in range(steps):
        # 生成分数阶随机步长,这里采用标准Cauchy分布作为步长分布
        step = np.random.standard_cauchy()
        
        # 更新位置
        position += step
        position_list.append(position)
    
    return position_list

# 模拟分数阶随机游走,每次游走1000步,分数阶参数为0.8
num_steps = 1000
alpha = 0.8

fractional_random_walk_path = fractional_random_walk(num_steps, alpha)

# 绘制分数阶随机游走路径
plt.plot(fractional_random_walk_path)
plt.xlabel("步数")
plt.ylabel("位置")
plt.title("一维分数阶随机游走路径 (alpha=0.8)")
plt.show()

在这个代码中,我们定义了一个fractional_random_walk(steps, alpha)函数来模拟一维分数阶随机游走路径。步长采用标准Cauchy分布作为分数阶随机步长分布,其中alpha参数表示分数阶参数,决定步长分布的尾重和长尾特性。

运行代码后,你将看到分数阶随机游走的路径图,其中 x 轴表示步数,y 轴表示位置。分数阶随机游走的路径呈现出比普通随机游走更为复杂和长尾的特性。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值