我已经在论坛上寻找过这方面的帮助,但老实说我不知道要搜索什么,而且我也没有错误,所以就到这里吧。我正在尝试绘制抛物线。我已经在 excel 中绘制了它,所以我知道它应该是什么样子。但是,当我使用 Matplotlib 在 Python 中绘制它时,我得到的不是我期望得到的平滑曲线,而是锯齿状的边缘。我放大并解决了 x 的特定值,发现 python 解决方案不正确。我在下面复制了我的代码,并将包括一个计算示例。
thacker_curved_final__author__="ahe"
__date__ ="$20-Aug-2014$"
import numpy as np
import matplotlib.pyplot as plt
import math
import sys
from math import sqrt
import decimal
n=5
t=0
l=100000.0
h0=100
g=9.81
l2=l**2.0
nx, ny = (1001,1001)
x5 = np.linspace(-100000,100000,nx)
y5 = np.linspace(-100000,100000,ny)
xv,yv = np.meshgrid(x5,y5)
x = np.arange(-100000,100200,200)
y = np.arange(-100000,100200,200)
t59=np.arange (1,1002002,1)
# Building the parabolic basin (Bottom)
zf=np.arange(len(x))
for i in range (len(x)):
zf[i]=((1.0*(10.0**-8.0))*(x[i]**2.0))-100
plt.figure(1)
plt.plot(x,zf)
plt.show()
例子: 取 x 为 200。将其代入等式:
Zf = (1*10^-8(x^2))-100
我得到 Zf = -99.9996
,但是在图中 Zf 等于 -99.0
。
正如我所说,我不知道这是什么原因(对 Python 来说相当陌生),因此我们将不胜感激。
最佳答案
np.arange
构建一个 dtype('int32')
数组,因此放入该数组的任何数字都将被截断。相反,指定数组应包含 float :
zf = np.arange(len(x), dtype=np.float_)
例如:
>>> a = np.arange(2)
>>> a[1] = 0.8
>>> a
array([0, 0])
>>> a = np.arange(2, dtype=np.float_)
>>> a[1] = 0.8
>>> a
array([ 0. , 0.8])
关于python - 产生奇怪结果的抛物线方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25424509/