我正在完成一项任务,教授如何使用Python使用matplotlib进行绘图和标注。科学或数学不是我的背景。我已经给出了计算地转风的公式,我们将绘制它(在y轴上)与x轴上的纬度。
我知道如何绘制给出x和y。除此之外,由于我缺乏该领域的背景,这个公式对我来说没有意义。
该公式是地转风公式。因为我所拥有的只是一张图片而且我需要10个代表来发布图像,所以我只关注我给出的希腊字母。
例如,我得到了
r'$x^{10}$'
r'$R_^{final}$'
r'$alpha^{\eta}$'
前两个是上标和下标。我明白了但是这对于我不知道的公式计算有何帮助。
我也被赋予了公式中的值。对操作顺序的解释会有所帮助。
g0=9.81 ms-‐2;
ΔZ=60m;
Δn=2x10^5m;
and
f=2Ωsin(φ)
我的问题是如何将上面的值放入公式中,然后在matplotlib中绘制它们?它和x和y一样容易吗?
到目前为止完成的绘图示例:
x = arange(1, 100, 1)
y1 = 2.0*np.sqrt(x)
y2 = 3.0*x**(1.0/3.0)
plt.plot(x, y1)
plt.plot(x, y2)
对不起,我是新来的。
答案 0 :(得分:2)
jclark754's answer中的物理解释很好。也请看wiki page on Geostrophic wind。
我猜, $\Delta n$
是你的向北距离。我在下面称之为dy
,以便澄清。此外,您是否应该g
为负(z轴向上)是一个问题。我这样做了。
对于代码,您需要注意np.sin
期望弧度而非度数。
如果您使用NumPy arrays而不是列表,则不需要所有这些列表推导,并且配方变得更简单,更接近公式:
import matplotlib.pyplot as plt ; plt.style.use('ggplot')
import numpy as np
# define the parameters
g = -9.81 # m/s^2
dZ = 60 # m
dx = 2e5 # m
omega = 7.2921e-5 # rad/s
phi = np.linspace(10,40) # deg
f = 2 * omega * np.sin(np.radians(phi)) # coriolis frequency, s^-1
# compute geostrophic wind, x-component
u_g = -1. * g/f * dZ/dx
# plot phi vs V_g
fig, ax = plt.subplots()
ax.plot(phi, u_g)
ax.set_xlabel('latitude (degrees)')
ax.set_ylabel('geostrophic wind, y-component (m/s)')
plt.show()
该图显示了在不同纬度地区由恒定的地转高度梯度(dZ/dx = 60 m / 2e5 m
)和科里奥利效应产生的地转风。
从物理直觉来看,我发现奇怪的是,当你靠近赤道时速度会增加,即使科里奥利效应对极点最强。但话又说回来,科里奥利效应不是一种力量,而是一种平衡效应,阻碍了压力梯度力中所包含的势能的释放。
答案 1 :(得分:1)
所以我相信你想要展示的等式是地转风方程式:
是吗?如果是这样,它是气象学中较简单的方程之一,我很乐意解释!Vg 是地转风,它是由科里奥利效应和压力梯度力之间的平衡产生的理论风。这是一种理想化的风,在自然界中并不存在。
g0 和 f 是重力和科里奥利参数。科里奥利参数是考虑科里奥利力所需的必要校正。
grad(h)和 Z 只是每个纬度的高度梯度。在你的情况下,你提供60米作为Z,我不知道Δn是什么。也许你的导师说这个变化是每2x10 ^ 5米60米?我会假设情况就是这样。
所以只计算在科罗拉多州丹佛市的wolfram alpha中的纬度(40度),我得到每秒31.39米,这是一个合理的数字。
让我们尝试绘制它:
import matplotlib.pyplot as plt
import numpy as np
# Create a list of latitudes but exclude the equator because sin(0) is 0
lat_list = [i for i in range(-90, 91) if i != 0]
# Create a list of coriolis values
cor_list = [2 * 7.292e-5 * np.sin(i) for i in lat_list]
# Create a list of geostrophic winds
geo_wind = [(9.81 / i) * (60.0 / 200000.0) for i in cor_list]
# Plot the geostrophic winds on a line
# Make a new plot, with lat as x and wind as y. 'r--' is a red dashed line
plt.plot(lat_list, geo_wind, 'r--')
# set the axis range
plt.axis([-90, 90, min(geo_wind), max(geo_wind)])
# show the plot
plt.show()
会给你以下图表,其中纬度是x轴,风速是y轴:
奇怪的是,图表(以及打印geo_wind列表)显示一些风值计算超过100米/秒,在某些情况下超过1000米/秒。我不确定为什么现在就是这样......现在有点晚了!所以逻辑是正确的,我只是检查python如何计算风速......我认为它与科学记数法和浮点数有关。
无论如何,我应该注意到我将上面的列表写成列表推导。如果这有点过头了,那没关系。查看此link以获得有关它们与常规列表/ for循环的比较的详细说明。我希望这能让你有一个良好的开端。快乐的小路!