大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、Numpy常用方法使用大全(超详细)
创新互联公司是一家专业提供江北企业网站建设,专注与成都网站设计、网站制作、H5场景定制、小程序制作等业务。10年已为江北众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
1、Series和DataFrame简单入门
2、Pandas操作CSV文件的读写
3、Pandas处理DataFrame,Series进行作图
1、Matplotlib绘图之属性设置
2、Matplotlib绘制误差条形图、饼图、等高线图、3D柱形图
1、层次分析法(AHP)——算数平均值法、几何平均值法、特征值法(Python实现,超详细注释)
2、Python实现TOPSIS分析法(优劣解距离法)
3、Python实现线性插值和三次样条插值
4、Python实现线性函数的拟合算法
5、Python实现统计描述以及计算皮尔逊相关系数
6、Python实现迪杰斯特拉算法和贝尔曼福特算法求解最短路径
我们选择的入门书籍是叶其孝和姜启源翻译的《数学建模》,原著是Frank R. Giordano和William P. Fox编著的 《A First Course in Mathematical Modeling(Fifth Edition) 》
从名字就能看出这是一本数学建模的入门书籍,由浅入深,很适合数学基础薄弱的人学习。接下来我们将会把这本书中的建模实例用Python3来实现。
初用,没有找到编辑公式的方法,求帮助,公式暂时先用其他软件编辑,采用截图的方式插入文章
首先是最简单的弹簧拉伸模型,学过胡克定律的同学们应该都知道这是啥,这个炒鸡简单, 不愿看的同学可以跳过。
这是一个研究弹簧伸长与所吊重物质量之间关系的模型。
从图中我们可以明显地看到这是一个线性关系。然后我们就可以对数据进行线性拟合(非线性拟合也只是用到了不同的函数而已),这里用到了numpy库:
这样,对于这个模型的建模就已经完成了。如果要画出图来是这样的:
当然,这个图用Python3也可以画出来,需要用到matplotlib库,附上matplotlib简单教程:
ywjun的学习笔记, Python图表绘制:matplotlib绘图库入门
NumPy 能生成一定概率分布的随机数,但如果需要更具体的概率密度,分布函数等,就用用到 scipy.stats 模块了。 Python 做简单的统计分析也可以使用 scipy.stats 模块,第4章再详细介绍。
scipy.stats 模块包含了多种概率分布的随机变量,随机变量分为连续型和离散型两种。所有的连续型随机变量都是 rv_continuous 的派生类的对象,而所有的离散型随机变量都是 rv_discrete 的派生类的对象。
可以使用下面的语句获得 scipy.stats 模块中所有的连续型随机变量:
总共有90多个连续型随机变量。
在 scipy.stats 模块中所有描述离散分布的随机变量都从 rv_discrete 类继承,也可以直接用 rv_discrete 类自定义离散概率分布。
可以使用下面的语句获得 scipy.stats 模块中所有的离散型随机变量:
总共有 14 个离散型随机变量。
离散型分布的方法大多数与连续型分布很类似,但是 pdf 被更换为分布律函数 pmf 。
常用离散型随机变量的分布律函数如表2.15所列。
三体模型
1. 代码
现在为了把之前的代码延伸到三体系统,需要给常数增加一些东西——增加第三体的质量、位置和速率向量。把第三恒星的质量视作和太阳的质量等同。
#Mass of the Third Starm3=1.0 #Third Star#Position of the Third Starr3=[0,1,0] #mr3=sci.array(r3,dtype='float64')#Velocity of the Third Starv3=[0,-0.01,0]v3=sci.array(v3,dtype='float64')
需要更新代码中质心和质心速率的公式。#Update COM formular_com=(m1*r1+m2*r2+m3*r3)/(m1+m2+m3)#Update velocity of COM formulav_com=(m1*v1+m2*v2+m3*v3)/(m1+m2+m3)
对一个三体系统来说,需要修改运动方程使之包括另一物体施加的额外引力。因此,需要在RHS上,对问题中每一对物体施加力的其他物体增加一个力项。在三体系统的情况下,一个物体会受到其余两个物体施加的力的影响并因此在RHS上出现两个力项。数学上可表示为:
为在代码中反映这些变化,需要为odeint求解器创建一个新函数。
def ThreeBodyEquations(w,t,G,m1,m2,m3): r1=w[:3] r2=w[3:6] r3=w[6:9] v1=w[9:12] v2=w[12:15] v3=w[15:18] r12=sci.linalg.norm(r2-r1) r13=sci.linalg.norm(r3-r1) r23=sci.linalg.norm(r3-r2) dv1bydt=K1*m2*(r2-r1)/r12**3+K1*m3*(r3-r1)/r13**3 dv2bydt=K1*m1*(r1-r2)/r12**3+K1*m3*(r3-r2)/r23**3 dv3bydt=K1*m1*(r1-r3)/r13**3+K1*m2*(r2-r3)/r23**3 dr1bydt=K2*v1 dr2bydt=K2*v2 dr3bydt=K2*v3 r12_derivs=sci.concatenate((dr1bydt,dr2bydt)) r_derivs=sci.concatenate((r12_derivs,dr3bydt)) v12_derivs=sci.concatenate((dv1bydt,dv2bydt)) v_derivs=sci.concatenate((v12_derivs,dv3bydt)) derivs=sci.concatenate((r_derivs,v_derivs)) return derivs
最后,调用odeint函数并向其提供上述函数连同初始条件。#Package initial parametersinit_params=sci.array([r1,r2,r3,v1,v2,v3]) #Initial parametersinit_params=init_params.flatten() #Flatten to make 1D arraytime_span=sci.linspace(0,20,500) #20 orbital periods and 500 points#Run the ODE solverimport scipy.integratethree_body_sol=sci.integrate.odeint(ThreeBodyEquations,init_params,time_span,args=(G,m1,m2,m3))