2012-11-21 2 views
0

두 개의 행성 객체 사이의 힘 (Newtons Law of Gravity)에 대한 클래스를 작성한 다음 두 개의 대전 된 입자 사이의 쿨롱 법칙에 대한 하위 클래스를 작성해야합니다. 물리학을하지 않는 사람들은 비슷한 기능 (방법)입니다.하위 클래스와 수퍼 클래스가 포함 된 코드의 오류

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 

내가 함께 시각화 방법을 사용하여 법을 펜던트 음모 얻으려고

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() 

내 서브 클래스 : 여기 내 코드입니다 물리학 학생, 프로그래머가 아니므로 이것이 완전히 엉망이라고 생각합니다. 그러나 슈퍼 클래스가 역 스퀘어 플롯을 생성하기 위해 자체적으로 작동한다는 것을 알고 있지만 동일한 .py에서 두 세트의 코드로 실행할 때 파일 (위의 순서대로) 나는 두 개의 플로팅 인수가 같은 크기가 아니라는 것을 의미하기 위해 "x와 y가 같은 첫 번째 차원을 가져야 함"이라는 오류 메시지를 받지만 왜 그렇지 않은지 알아 내지 못합니다 . 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

답변을 얻지 못했지만 어쨌든 감사합니다. 나는 작동하는 것을 쓸 수 있었다. 프로그래밍을 강요당하는 다른 가난한 물리학 학생들과 유사한 문제에 갇혀있는 학생들을 위해 여기에 코드를 게시 할 것입니다. 내 솔루션은 오히려 못생긴다고 상상하지만 거기서 나를 끌어 들였습니다. 누군가 그것을 편집하고 싶다면 더 좋게 만들려면 아무 것도 느끼지 마십시오.

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) 

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() 

과 서브 클래스는 그 때 나는이 멋진 역 제곱 형 플롯 결과

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 

로 시각화 방법을했다. 희망이 사람을 도움이됩니다.