0

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 つのプロット引数が同じサイズではないことを意味しますが、なぜそうでないのかわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

0

返信はありませんでしたが、とにかくありがとうございました。私はうまくいくものを書くことができました。プログラミングを余儀なくされ、同様の問題で立ち往生している他の貧弱な物理学の学生のために、ここに私のコードを投稿します。私のソリューションはかなり醜いと思いますが、そこにたどり着きました。誰かがそれを編集したり、より良いものにしたい場合は、お気軽にどうぞ。

class Gravity:
      """Gravity force between two physical objects."""
      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):
        G, m, M = self.G, self.m, self.M
        return (G*m*M)/(r**2)
    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)    #two arbitrary charges
w = l.visualize(0.1, 1)          #start and end points for linspace for r

これにより、素敵な逆二乗タイプのプロットが得られました。これが誰かに役立つことを願っています。

于 2012-11-21T23:53:04.960 に答える