Написание функции для умножения комплексных чисел - PullRequest
3 голосов
/ 22 апреля 2020

У меня постоянно возникают проблемы при попытке написать код для умножения двух комплексных чисел. Сначала я создал простой класс с именем Complex:

class Complex:
    def __init__(self,real,imag):
        self.real = real   
        self.imag = imag


    def multiply(self, d):
        self.real = (self.real * d.real) - (self.imag * d.imag) 
        self.imag = (self.imag * d.real) + (self.real * d.imag)

    def __str__(self): 
        if self.imag > 0:
            return str(self.real) + " + " + str(self.imag) + "i"
        elif self.imag == 0:
            return str(self.real)
        else:
            return str(self.real) + " - " + str(-self.imag) + "i"

, где self.real - реальная часть, а self.imag - мнимая часть. Когда я запускаю

z = Complex(3,4)
x = Complex(2,3)
z.multiply(x)
print(z,x)

Результат должен быть -6 + 17i, но вместо этого выводится -6 - 10i. Что происходит? Это как-то связано с частью self.imag в функции умножения?

Я попытался сделать это вручную, прочитав мой код, и получил правильный ответ. Есть ли что-то очевидное, чего мне не хватает?

1 Ответ

0 голосов
/ 22 апреля 2020

Вы изменяете self.real в первой строке вашего multiply метода, а затем используете измененное значение во второй строке. Выполните оба назначения в одной строке, например:

self.real, self.imag = (self.real * d.real) - (self.imag * d.imag), (self.imag * d.real) + (self.real * d.imag)
...