0

我必须为两个行星物体之间的力(牛顿万有引力定律)编写一个类,然后为两个带电粒子之间的库仑引力定律创建一个子类。对于那些不做物理的人来说,这些是类似的功能(方法)。这是我的代码:

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 必须具有相同的第一维”,我认为这意味着我的两个绘图参数的大小不同,但我不知道为什么它们不是。任何帮助将不胜感激。

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 回答