2017-01-05 7 views
0

私は2つの変数を入力できるコードを書いています。次に、変数に基づいてプロジェクトイルのパスをプロットできるプログラムが用意されています。Matplotlib.PyPlotでエラーが発生する理由をよく知りません

私はPythonで、グラフをプロットする方法としてmatplotlib.pyplotを使っています。ここでは、コードです:

import math 
import matplotlib.pyplot as plt 
#Do Maths and stuff 
g = 9.81 #Gravitational Constant 
r = int(input("Enter angle of Projectile's launch:: ")) 
u = int(input("Enter intial velocity of projectile: ")) 
x = 0 

while x <= 90: 
    y = x * math.tan(r) - (g*(x*x))/(2*(u*u)*(math.cos(r)*math.cos(r)) 
    plt.plot(x,y) 
    plt.show() 

しかし、私はこれを実行すると、それは

plt.plot(x,y) 

が無効な構文であることを意味します。誰がなぜこれが分かっていますか?

ありがとうございました

答えて

1

中には4つではなく3つのスペースがあります。

正しいインデント:

while x <= 90: 
    y = x * math.tan(r) - (g*(x*x))/(2*(u*u)*(math.cos(r)*math.cos(r)) 
    plt.plot(x,y) 
    plt.show() 

はpythonでインデントが非常に重要であることを覚えておいてください。

ヒント:

は、xの値を変更しないでください、それはしばらくの間を離れることは決してありません。

確かに、すべてのポイントを一緒にプロットするために、plt.show()を使いたいと思います。

3

lbellomoに加えて、yの定義の末尾に括弧が1つありません。さらに重要なことに、xの値をループ内で変更することはないため、whileループは停止しません。

次のコードを見てください。データを収集してプロットする方が良い方法だと思います。

import math 
import matplotlib.pyplot as plt 
#Do Maths and stuff 
g = 9.81 #Gravitational Constant 
r = int(input("Enter angle of Projectile's launch: ")) 
u = int(input("Enter intial velocity of projectile: ")) 
x = 0 

xdata=[] 
ydata=[] 
while x <= 10: 
    y = x * math.tan(r) - (g/2)*(x/(u*math.cos(r)))**2 
    xdata.append(x) 
    ydata.append(y) 
    x+=1 
plt.plot(xdata,ydata,'-ok') 
plt.show() 

速度と角度は、それぞれ、245あるとき、これは写真です:

enter image description here

提案:角度と速度の単位何人に知らせる(物理学がブツ!) 。

決勝思考:私は強くnumpyを使用して関数を定義するお勧めします。

import numpy as np 
import matplotlib.pyplot as plt 

def projectile(x,v,t): 
    """ 
    x: x values (m) 
    v: initial speed (m/s) 
    t: launch angle (radian) 
    """ 
    g=9.8 #Gravitational Constant 
    y=x * np.tan(t) - (g/2)*(x/(v*np.cos(t)))**2 
    return y 

r = int(input("Enter angle of Projectile's launch: ")) 
u = int(input("Enter intial velocity of projectile: ")) 

xdata = np.linspace(0,10,10) 
ydata = projectile(xdata,u,r) 
plt.plot(xdata,ydata,'-ok') 
plt.show() 
関連する問題