Python 绘制星球轨道运动 / 人生苦短,我用Python

in #cn7 years ago

之前学过一点 Python 知识,主要是要做数值计算,但是限于能力有限,也没有出什么结果, @etzel 在写Python 教学,我便打了一遍(写得特别详细),算是作业,也是练习。

主要内容:利用数值方法模拟出星球的轨道

用到的物理公式和数值方法可看 @etzel 的文章Python 繪製星球軌道教學(1)

Python 的应用

numpy 是一个科学计算的包,包括强大的多维数组功能和许多数学方法。

matplotlib 是一个绘图包,类似于Matlab,语法上也基本相同。

numpy.linalg.norm() 是一个求范数的函数,一般用法是 numpy.linalg.norm(x, ord = None)

其中,

参数说明计算方法
二范数
ord=2二范数同上
ord=1一范数
ord=np.inf无穷范数

ggplot 是一个图的类型,很不错。

结果及代码

这里只是二维的图和代码,三维可看 @eztel 的文章。

运行输入参数:

Screen Shot 2017-10-01 at 11.32.48 AM.png

x = 0.5 y = 0 Vx = 0 Vy = 1.63

figure_1.png

x = 0.5 y = 0 Vx = 0 Vy = 2

figure_2.png

x = 0.5 y = 0 Vx = 0 Vy = 0.2

figure_0.2.png

代码

import numpy as np
import matplotlib.pyplot as plt
from numpy.linalg import norm
from matplotlib import style
style.use('ggplot')

fig = plt.figure()
Ax = fig.gca()

epsilon = 0.0001
n = 100000

position = np.zeros((n,2))
velocity = np.zeros((2))
acceleration = np.zeros((2))

position[0,0] = float(input("输入x初始坐标值:"))
position[0,1] = float(input("输入y初始坐标值:"))
velocity[0] = float(input("输入x分量初始速度:"))
velocity[1] = float(input("输入y分量初始速度:"))

r = norm(position[0])
r3 = 1/(r**3)
acceleration = position[0] * -r3
velocity += acceleration * epsilon * 0.5

i = 1
while(i<n):
    position[i] = position[i-1]+velocity*epsilon
    r = norm(position[i])
    r3 = 1/(r**3)
    acceleration = position[i]*-r3
    velocity += acceleration*epsilon
    i += 1

plt.plot(position[:,0], position[:,1],'b-')
plt.plot(0,0,"ro")
plt.show()
Sort:  

哇⊙ω⊙

比较基础,我还是抄的,哈哈

你要不要嘗試挑戰回答我文末的兩個問題呢?回答成功我就給你 2SBD!大家也可以來挑戰!

Loading...

好强大

tvb姐学起来

我也要学!!

学起来~

嗯,我书都买完了哈哈哈

人生苦短,我用Python
这个好。。

博士,写写教程

什么?我写教程吗?
别闹,这里用python的高手这么多。

写写呗,自己写自己的就好

我尝试写一写科技的。。