المسارات
/
Python
Python
/
المنهج
/
الأعداد المركبة
ال

الأعداد المركبة في Python

{zero: "لا توجد تمارين", one: "1 تمرين", two: "تمرينان", few: "%{count} تمارين", many: "%{count} تمرينًا", other: "%{count} تمرين"}

نبذة عن الأعداد المركبة

Complex numbers ليست معقدة. إنها تحتاج فقط إلى اسم أقل إثارة للقلق.

إنها مفيدة جدًا، لا سيما في الهندسة والعلوم، حتى أن Python تتضمن complex كنوع عددي قياسي، إلى جانب الأعداد الصحيحة (ints) والأعداد العشرية (floats).

الأساسيات

قيمة complex في Python هي في جوهرها زوج من الأعداد العشرية. ويُطلق على هذين العددين الجزء «الحقيقي» والجزء «التخيلي»، لأسباب تاريخية مؤسفة. ومرة أخرى، من الأفضل التركيز على البساطة الكامنة وراءها لا على الأسماء الغريبة.

هناك أسلوبان شائعان لإنشاء الأعداد المركبة.

  1. دالة البناء complex(real, imag) تأخذ معاملين من النوع float:
>>> z1 = complex(1.5, 2.0)
>>> z1
(1.5+2j)

يمكن لدالة البناء أيضًا تحليل مُدخل على شكل سلسلة نصية. وهذا قيد غريب: فهي تفشل إذا احتوت السلسلة النصية على مسافات.

>>> complex('4+2j')
(4+2j)

>>> complex('4 + 2j')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: complex() arg is a malformed string
  1. يمكن تحديد العدد المركب بصيغة حرفية على شكل <real part> + <complex part>j، أو <complex part>j فقط إذا كان الجزء الحقيقي صفرًا:
>>> z2 = 2.0 + 1.5j
>>> z2
(2+1.5j)

والنتيجة النهائية مطابقة لاستخدام دالة البناء complex().

هناك قاعدتان تتعلقان بالجزء التخيلي من العدد المركب:

  • يُرمز إليه بالحرف j (وليس i كما قد ترى في كتب الرياضيات).

  • يجب أن يلي j عددًا مباشرةً، حتى لا يعتبره Python اسم متغير. وإذا لزم الأمر، استخدم 1j.

>>> j
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'j' is not defined

>>> 1j
1j

>>> type(1j)
<class 'complex'>

معظم المهندسين مرتاحون لاستخدام j. أما معظم العلماء والرياضيين فيفضّلون الرمز الرياضي i اختصارًا لكلمة تخيلي، لكن هذا الرمز يتعارض مع استخدام i بمعنى تيار في الهندسة الكهربائية. لذا، عند تصميم Python، انتصر المهندسون الكهربائيون.

للوصول إلى أجزاء العدد المركب كلٌّ على حدة:

>>> z2.real
2.0
>>> z2.imag
1.5

يمكن أن يكون أي من الجزئين صفرًا، وقد يتحدث الرياضيون حينها عن عدد «حقيقي تمامًا» أو «تخيلي تمامًا». لكنه يبقى مع ذلك عددًا مركبًا في Python:

>>> complex(0, 1)
1j
>>> type(complex(0, 1))
<class 'complex'>

>>> complex(1, 0)
(1+0j)

ربما سمعت أن «i (أو j) هو الجذر التربيعي للعدد -1».

في الوقت الحالي، كل ما يعنيه ذلك هو أن الجزء التخيلي بحكم التعريف يحقق المساواة

1j * 1j == -1  # => True

هذه فكرة بسيطة، لكنها تؤدي إلى نتائج مثيرة للاهتمام.

العمليات الحسابية

معظم operators المستخدمة مع الأعداد العشرية والصحيحة تعمل أيضًا مع الأعداد المركبة:

>>> z1 = (1.5+2j)
>>> z2 = (2+1.5j)


>>> z1 + z2  # addition
(3.5+3.5j)

>>> z1 - z2  # subtraction
(-0.5+0.5j)

>>> z1 * z2  # multiplication
6.25j

>>> z1 / z2  # division
(0.96+0.28j)

>>> z1 ** 2  # exponentiation
(-1.75+6j)

>>> 2 ** z1  # another exponentiation
(0.5188946835878313+2.7804223253571183j)

>>> 1j ** 2  # j * j == -1
(-1+0j)

شرح قواعد ضرب الأعداد المركبة وقسمتها خارج نطاق هذا المفهوم (ومن غير المرجح أن تحتاج إلى إجراء هذه العمليات «يدويًا» كثيرًا).

أي مقدمة رياضية أو في الهندسة الكهربائية عن الأعداد المركبة ستغطي هذا، إن أردت التعمق في الموضوع.

أو يمكنك تجربة تمرين Complex Numbers التدريبي على Exercism، حيث يمكنك تنفيذ صنف للأعداد المركبة يوفّر هذه العمليات انطلاقًا من المبادئ الأساسية.

القسمة الصحيحة غير ممكنة على الأعداد المركبة، لذا ستفشل العوامل // و% والدالة divmod() مع نوع العدد المركب.

هناك دالتان مُنفَّذتان للأنواع العددية وهما مفيدتان جدًا عند التعامل مع الأعداد المركبة:

  • تقوم <complex number>.conjugate() ببساطة بقلب إشارة الجزء التخيلي من العدد المركب (من + إلى - أو العكس).
    • ولأن كيفية عمل ضرب الأعداد المركبة على هذا النحو، فإن هذا أكثر فائدة مما قد تظن.
  • من المؤكد أن abs(<complex number>) تُرجع عددًا حقيقيًا بلا جزء تخيلي.
>>> z1
(1.5+2j)

>>> z1.conjugate() # flip the z1.imag sign
(1.5-2j)

>>> abs(z1) # sqrt(z1.real ** 2 + z1.imag ** 2)
2.5

وحدة cmath

تضم المكتبة القياسية في Python وحدة math مليئة بوظائف مفيدة للتعامل مع الأعداد الحقيقية.

كما تضم وحدة cmath مكافئة للتعامل مع الأعداد المركبة.

نشجعك على تصفح الوحدة وتجربتها بنفسك، لكن الفئات الرئيسية هي:

  • التحويل بين الإحداثيات الديكارتية والقطبية،
  • الدوال الأسية واللوغاريتمية،
  • الدوال المثلثية،
  • الدوال الزائدية،
  • دوال التصنيف، و
  • ثوابت مفيدة.

إليك مثالًا يستخدم بعض الثوابت:

>>> import cmath

>>> euler = cmath.exp(1j * cmath.pi) # Euler's equation

>>> euler.real
-1.0
>>> round(euler.imag, 15) # round to 15 decimal places
0.0

إذن، تعبير بسيط يستخدم ثلاثة من أهم الثوابت في الطبيعة، وهي e وi (أو j) وpi، يعطي النتيجة -1. ويعتقد بعض الناس أن هذه أجمل نتيجة في الرياضيات كلها. ويعود تاريخها إلى نحو عام 1740.


قسم اختياري: أسئلة شائعة حول الأعداد المركبة

يمكنك تخطي هذا الجزء إن لم يكن يثير اهتمامك.

أليس هذا نوعًا غريبًا جديدًا من الرياضيات البحتة؟

لقد كان غريبًا وجديدًا في القرن السادس عشر.

وبعد 500 عام، أصبح محوريًا في معظم فروع الهندسة والعلوم الفيزيائية.

لماذا قد يستخدمها أحد؟

اتضح أن الأعداد المركبة هي الأسلوب الأبسط لوصف أي شيء يدور أو أي شيء له خاصية شبيهة بالموجات. لذلك تُستخدم على نطاق واسع في الهندسة الكهربائية ومعالجة الصوت والفيزياء وألعاب الحاسوب والملاحة، على سبيل المثال لا الحصر.

يمكنك أن ترى الأشياء تدور. قد لا تجعل الأعداد المركبة العالم يدور، لكنها ممتازة في شرح ما يحدث نتيجةً لدوران العالم: انظر إلى أي صورة ساتلية لعاصفة كبيرة.

وبشكل أقل وضوحًا، الصوت شبيه بالموجات، والضوء شبيه بالموجات، والإشارات اللاسلكية شبيهة بالموجات، وحتى اقتصاد بلدك هو جزئيًا على الأقل شبيه بالموجات.

يمكن إنجاز الكثير من هذه المعالجة الموجية باستخدام الدوال المثلثية (sin() وcos())، لكن ذلك يصبح فوضويًا بسرعة.

التعامل مع الدوال الأسية المركبة أسهل بكثير.

لكنني لا أحتاج إلى الأعداد المركبة!

هذا صحيح فقط إذا كنت تعيش في كهف وتجمع طعامك من الطبيعة.

وإذا كنت تقرأ هذا على أي نوع من الشاشات، فأنت تعتمد كليًا على بعض الإنجازات المفيدة في القرن العشرين التي تحققت بفضل استخدام الأعداد المركبة.

  1. الرقائق شبه الموصلة.

    • لا معنى لها في الفيزياء الكلاسيكية، ولا يمكن تفسيرها (وتصميمها) إلا بميكانيكا الكم (QM).
    • وفي ميكانيكا الكم، كل شيء ذو قيمة مركبة بحكم التعريف. (إنها موجات إلى أبعد حد)
  2. خوارزمية التحويل السريع لفورييه (FFT).

    • التحويل السريع لفورييه تطبيق للأعداد المركبة، وهو حاضر في كل ما يتصل بنقل الصوت ومعالجة الصوتيات والصور والفيديو.

    • تستخدم صيغة MP3 وغيرها من الصيغ الصوتية FFT للضغط، ما يسمح بتخزين مزيد من الصوت في مساحة تخزين أصغر.

    • كما يستخدم ضغط JPEG وفيديو MP4، إلى جانب العديد من صيغ الصور والفيديو الأخرى، FFT للضغط.

    • وتُستخدم FFT أيضًا في المرشحات الرقمية التي تتيح لأبراج الهاتف الخلوي فصل إشارة هاتفك الشخصية عن إشارات الآخرين.

إذن، من المرجح أنك تستخدم تقنية تعتمد على حسابات الأعداد المركبة آلاف المرات في الثانية.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة