2 つの惑星オブジェクト間の力 (重力のニュートンの法則) のクラスを作成し、2 つの荷電粒子間の引力のクーロンの法則のサブクラスを作成する必要があります。物理学をしない人にとって、これらは同様の機能 (メソッド) です。これが私のコードです:
class Gravity:
def __init__(self, m, M):
self.m=m
self.M=M
self.G=6.67428E-11
def force(self, r):
G, m, M = self.G, self.m, self.M
return (G*m*M)/(r**2)
def visualize(self, r_start, r_stop, n = 100):
import matplotlib.pyplot as plt
from numpy import linspace
r = linspace(r_start, r_stop, n)
g = self.force(r)
plt.plot(r,g)
set_title='Gravity force: m=%g, M=%g' % (self.m, self.M)
plt.show ()
そして私のサブクラス
class Coulomb(Gravity):
def __init__(self, q1, q2):
Gravity.__init__(self, q1, q2)
self.G= 8.99E+9
def force(self, r):
Gravity.force(self, r)
def visualize(self, r_start, r_stop, n = 100):
Gravity.visualize(self, r_start, r_stop, n = 100)
次に、次のコードで視覚化メソッドを使用して、このクーロンの法則をプロットしようとします
l = Coulomb(2.63E-9, 8.69E-9) #My two charges q1 and q2
w = l.visualize(0.1, 1) #My start and end points for the linspace
私はプログラマーではなく物理学の学生なので、これは完全に混乱していると思いますが、スーパークラスが独自に動作して逆二乗プロットを生成することは知っていますが、同じ .py ファイル内の両方のコードセットで実行すると(上に示した順序で) 「x と y は最初の次元が同じでなければなりません」というエラー メッセージが表示されます。これは、2 つのプロット引数が同じサイズではないことを意味しますが、なぜそうでないのかわかりません。どんな助けでも大歓迎です。