2016-12-14 5 views
2

je dois mettre en œuvre une classe appelée ComplexNumbers qui représente un nombre complexe et je suis pas autorisé à utiliser leconstruit dans les types pour cela. J'ai déjà écrasé les opérateurs (__add__, __sub__, __mul__, __abs__, __str_ qui permet d'effectuer les opérations de base Mais maintenant, je suis coincé avec l'opérateur __div__ écraserDivision Python de nombres complexes sans utiliser Construit dans les types et opérateurs

autorisés à utiliser:..

I « utilise float pour représenter la partie imaginaire du nombre et float pour représenter la partie rel

Ce que j'ai déjà essayé.

  • Je levai les yeux comment effectuer une division de nombres complexes (écrit à la main)
  • je l'ai fait un exemple de calcul
  • pensée sur la façon de mettre en œuvre programatically sans bon résultat

Explication comment diviser des nombres complexes:

http://www.mathwarehouse.com/algebra/complex-number/divide/how-to-divide-complex-numbers.php

Ma mise en œuvre de multiplier:

def __mul__(self, other): 
     real = (self.re * other.re - self.im * other.im) 
     imag = (self.re * other.im + other.re * self.im) 
     return ComplexNumber(real, imag) 
+0

N'êtes-vous pas autorisé à utiliser 'int'? –

+0

@PatrickHaugh Je vais mettre à jour le type de question de la partie réelle est 'float' le type de la partie imaginaire est' int' –

+0

D'accord, c'est tout ce dont vous avez besoin de toute façon. Où dans l'algorithme de division avez-vous rencontré des problèmes? –

Répondre

3

Je pense que cela devrait suffire:

def conjugate(self): 
    # return a - ib 

def __truediv__(self, other): 
    other_into_conjugate = other * other.conjugate() 
    new_numerator = self * other.conjugate() 
    # other_into_conjugate will be a real number 
    # say, x. If a and b are the new real and imaginary 
    # parts of the new_numerator, return (a/x) + i(b/x) 

__floordiv__ = __truediv__ 
0

Merci aux conseils de @PatrickHaugh j'ai pu résoudre le problème. Voici ma solution:

def __div__(self, other): 
     conjugation = ComplexNumber(other.re, -other.im) 
     denominatorRes = other * conjugation 
     # denominator has only real part 
     denominator = denominatorRes.re 
     nominator = self * conjugation 
     return ComplexNumber(nominator.re/denominator, nominator.im/denominator) 

Calcul de la conjugaison et du dénominateur qui n'a pas de partie imaginaire.