📜  将给定的复数转换为极坐标形式并执行所有算术运算

📅  最后修改于: 2021-04-17 13:53:51             🧑  作者: Mango

给定两个笛卡尔形式的复数Z1Z2 ,任务是将给定的复数转换为极坐标形式,并对它们执行所有算术运算(加法,减法,乘法和除法)。

例子:

方法:可以基于复数的以下属性来解决给定的问题:

  • 笛卡尔形式的复数Z表示为:
  • 复数Z的极性形式为:
  • 在复数形式的极数形式中,以r为常表示Sin(\theta)+ i*Cos(\theta) = e^{i(\theta)}该表达式变为:
    • Z = r*e^{i\theta} ,称为复数欧拉形式
    • 欧拉形式和极地形式都表示为: (r, \theta)
  • 可以使用欧拉形式完成两个复数的乘法和除法:

请按照以下步骤解决问题:

  • 使用上面讨论的公式将复数转换为极性,并以以下形式打印(r, \theta)
  • 定义一个函数Addition(Z1,Z2)来执行加法运算:
    • 通过将两个实数部分Z1Z2相加来找到复数的实数部分并将其存储在变量a中
    • 通过将复数Z1Z2的两个虚部相加来找到复数的虚部,并将其存储在变量b中
    • 将复合物的笛卡尔形式转换为极坐标形式并进行打印。
  • 定义一个函数,例如Subtraction(Z1,Z2)来执行减法运算:
    • 通过减去两个实数部分Z1Z2来找到复数的实数部分并将其存储在变量a中。
    • 通过将复数Z1Z2的两个虚部相减来找到复数的虚部,并将其存储在变量b中。
    • 将复合物的笛卡尔形式转换为极坐标形式并进行打印。
  • 将两个复数Z1Z2的乘积打印为 Z = (r_{1}*r_{2})*e^{ \theta_{1} + \theta_{2}}
  • 将两个复数Z1Z2的除法打印为Z = (r_{1}\div r_{2})*e^{ \theta_{1} - \theta_{2}}

下面是上述方法的实现:

Python3
# Python program for the above approach
import math
  
# Function to find the polar form
# of the given Complex Number
def get_polar_form(z):
    
    # Z is in cartesian form
    re, im = z
  
    # Stores the modulo of complex number
    r = (re * re + im * im) ** 0.5
  
    # If r is greater than 0
    if r:
        theta = math.asin(im / r)
        return (r, theta)
        
    # Otherwise
    else:
        return (0, 0)
  
# Function to add two complex numbers
def Addition(z1, z2):
    
    # Z is in polar form
    r1, theta1 = z1
    r2, theta2 = z2
  
    # Real part of complex number
    a = r1 * math.cos(theta1) + r2 * math.cos(theta2)
      
    # Imaginary part of complex Number
    b = r1 * math.sin(theta1) + r2 * math.sin(theta2)
      
    # Find the polar form
    return get_polar_form((a, b))
  
# Function to subtract two
# given complex numbers
def Subtraction(z1, z2):
    
    # Z is in polar form
    r1, theta1 = z1
    r2, theta2 = z2
  
    # Real part of the complex number
    a = r1 * math.cos(theta1) - r2 * math.cos(theta2)
      
    # Imaginary part of complex number
    b = r1 * math.sin(theta1) - r2 * math.sin(theta2)
  
    # Converts (a, b) to polar
    # form and return
    return get_polar_form((a, b))
  
# Function to multiply two complex numbers
def Multiplication(z1, z2):
    
    # z is in polar form
    r1, theta1 = z1
    r2, theta2 = z2
  
    # Return the multiplication of Z1 and Z2
    return (r1 * r2, theta1 + theta2)
  
  
# Function to divide two complex numbers
def Division(z1, z2):
    
    # Z is in the polar form
    r1, theta1 = z1
    r2, theta2 = z2
  
    # Return the division of Z1 and Z2
    return (r1 / r2, theta1-theta2)
  
  
# Driver Code
if __name__ == "__main__":
    
    z1 = (2, 3)
    z2 = (4, 6)
  
    # Convert into Polar Form
    z1_polar = get_polar_form(z1)
    z2_polar = get_polar_form(z2)
  
    print("Polar form of the first")
    print("Complex Number: ", z1_polar)
    print("Polar form of the Second")
    print("Complex Number: ", z2_polar)
  
    print("Addition of two complex")
    print("Numbers: ", Addition(z1_polar, z2_polar))
      
    print("Subtraction of two ")
    print("complex Numbers: ",
           Subtraction(z1_polar, z2_polar))
      
    print("Multiplication of two ")
    print("Complex Numbers: ",
           Multiplication(z1_polar, z2_polar))
            
    print("Division of two complex ")
    print("Numbers: ", Division(z1_polar, z2_polar))


输出:
Polar form of the first
Complex Number:  (3.605551275463989, 0.9827937232473292)
Polar form of the Second
Complex Number:  (7.211102550927978, 0.9827937232473292)
Addition of two complex
Numbers:  (10.816653826391967, 0.9827937232473292)
Subtraction of two 
complex Numbers:  (3.605551275463989, -0.9827937232473292)
Multiplication of two 
Complex Numbers:  (25.999999999999996, 1.9655874464946583)
Division of two complex 
Numbers:  (0.5, 0.0)

时间复杂度: O(1)
辅助空间: O(1)