P33思考练习题3

1.将随机游走的步数增加到100步,计算物体最终与原点的距离。

#第1题
#模拟每步生成方向
import numpy as np
steps = 100
rndwlk = np.random.randint(0,2,size = (2,steps))
rndwlk = np.where(rndwlk>0,1,-1)
print(rndwlk)
#计算每步移动后的位置
position = rndwlk.cumsum(axis = 1)                #按行累加求和
print(position)
#计算每步移动后与原点的距离
dists = np.sqrt(position[0]**2+position[1]**2)    #sqrt求平方根
print(dists)
print(round(dists[-1],4))                         #格式化输出保留4位小数。round(数,保留位数)

2.重复多次随机游走过程,观察物体与原点距离的变化趋势。

此题在第1小题的基础上进行。先后分析100次,1000次,10000次随机游走100步后物体最终离原点的距离,得出结论运行次数越多,越能发现物体在二维空间内随机游走100步后离原点的平均距离趋近(收敛)于一个数。(这个数为10,见下)

运用到了之后几章的知识:用Matplotlib绘制散点图分析距离数据及运用机器学习回归建模。


结论:在二维平面内随机选择方向走一个单位的长度,则n步之后离出发点的平均距离为根号n。数学推导如下:

随机游走的期望距离_chivalry-CSDN博客_一维随机游走的期望距离

运行100次: 

import numpy as np
l = []
for i in range(100):
    steps = 100
    rndwlk = np.random.randint(0,2,size = (2,steps))
    rndwlk = np.where(rndwlk>0,1,-1)
    position = rndwlk.cumsum(axis = 1)                
    dists = np.sqrt(position[0]**2+position[1]**2)   
    l.append(round(dists[-1],2))
print(l)
 
#使用matplotlib绘制散点图,分析趋势
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize = (20,6))                                       #定义图形大小
plt.scatter(x = np.arange(1,101),y = l,marker = '*',c = 'red')    #plt.scatter()函数画散点图
plt.show()                                                         #展示图形
 
#根据散点图分析,建立回归分析模型
x = np.arange(1,101).astype(float)                               #astype()函数强制类型转换为浮点型
Y = np.array(l)                                                    #将l列表转为数组
from sklearn.linear_model import LinearRegression                  
linreg = LinearRegression()                                        #初始化模型
linreg.fit(x.reshape(-1,1),Y)                                      #添加.reshape(-1,1)解决x单独一行/列不为二维数组出错的问题
print(linreg.intercept_,linreg.coef_)                              #输出回归模型截距,回归系数

结果 :

其中一次运行得到的次数与距离的回归方程:y = -0.008x+13.32

散点图如下:

 运行1000次:

结果 :

其中一次运行得到的次数与距离的回归方程:y = 0.0008x+11.87

散点图如下:

运行10000次: 

结果 :

其中一次运行得到的次数与距离的回归方程:y = -7.02e-06x+12.57

散点图如下:

由此可见,随着运行次数的增加,回归方程的回归系数越来越小,点被y=10这条线划分的界限越来越清晰。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐