sign في slogdet تخص المحدد؛ للمدخل المركب غير الصفري تكون على دائرة الوحدة. أما np.sign فتعمل عنصرًا عنصرًا. [1][2]
إشارة ماذا؟
sign في slogdet تخص المحدد؛ للمدخل المركب غير الصفري تكون على دائرة الوحدة. أما np.sign فتعمل عنصرًا عنصرًا. [1][2]
logabsdet هو اللوغاريتم الطبيعي لمقدار المحدد؛ المحدد الصفري يعطي sign=0 و logabsdet=−inf. [1]
للمدخل المركب غير الصفري، تصف np.sign النتيجة بالنسبة x/|x|. [2]
نثبت المصفوفة الأصلية، ثم ننشئ مصفوفة أخرى من إشارات عناصرها. لا نطلق على المصفوفة الجديدة اسم «إشارة المحدد»؛ نحتاج إلى حساب محددها من عناصرها الفعلية كي نعرف ما حدث.
نستخدم j في الشيفرة. كلمة طور هنا تصف اتجاه العدد المركب الناتج؛ لا نحسب زاوية بالراديان أو الدرجة في هذه التجربة.
المصفوفة نفسها بالشكل لا بالقيم
في مثالنا A=[[j,2],[3,1]]؛ تطبيع عناصرها أعطى B=[[j,1],[1,1]]. المحددان الصحيحان −6+j و−1+j، وطوراهما مختلفان.
np.sign(A) أعادت مصفوفة بالشكل (2,2)؛ sign من slogdet(A) عدد مركب بالشكل (). توافق np.sign(det(A)) معها في التشغيل.
import numpy as np A=np.array([[1j,2],[3,1]],dtype=np.complex128) B=np.sign(A) s,L=np.linalg.slogdet(A) t,K=np.linalg.slogdet(B) d=np.linalg.det(A) u=np.sign(d)
على NumPy 2.3.5 و CPython 3.12.14 كانت المصفوفتان من complex128. أعادت s تقريبًا −0.986394+0.164399j، و t تقريبًا −0.707107+0.707107j. العرض مقرب؛ المقارنة في السجل تستعمل القيم الكاملة وتسامحًا معلنًا.
كان L=1.8054589563221122، و K=0.3465735902799727، وكلاهما float64 بالشكل (). كانت s و t و u من complex128 بالشكل (). سجّلنا الشكل مع القيمة لتمييز العدد الواحد من أربع إشارات في جدول.
في مرجعنا، حاصل القطر الرئيسي لـ A هو j×1=j، وحاصل القطر الآخر 2×3=6؛ الفرق −6+j. مقداره جذر 37. بقسمة الجزأين على هذا المقدار نحصل على (−6/√37)+(1/√37)j.
أما B فقد غيّرت 2 و 3 إلى 1، وأبقت j و 1. صار حاصل القطر الآخر 1، والمحدد −1+j ومقداره جذر 2. اتجاه (−1/√2)+(1/√2)j مختلف عن اتجاه العدد السابق؛ تساوي شكل الجدولين لم يحفظ حاصل القطرين.
سجل np.sign(d) وافق s ضمن تسامح الأجزاء. هذا الطلب يستقبل محددًا واحدًا؛ بخلاف np.sign(A) التي استقبلت العناصر الأربعة. لا نستنتج من التشابه في اسم sign أن المدخل والخرج والعملية متماثلة.
تحكم موجب العناصر وتحجيم مشترك
تحكم R=[[2,4],[3,5]] محدده −2؛ تطبيع عناصره أعطى مصفوفة آحاد محددها صفر، وخرج slogdet لها (0j,−inf).
أنشأنا R من complex128 أيضًا، مع أجزاء تخيلية صفرية. في المرجع الصحيح 2×5−4×3=10−12=−2. أعادت slogdet(R) الإشارة −1+0j ولوغاريتمًا يقارب 0.69314718056.
كل عنصر في R موجب حقيقيًا؛ لذا أعادت np.sign(R) الجدول [[1,1],[1,1]] في التشغيل. محدده الصحيح 1×1−1×1=0. لم يكن في R عنصر صفري، لكن استبدال القيم أضاع اختلاف الصفين.
أجرينا تحكمًا آخر C=2*A، مع ضرب العناصر الأربعة بالعامل نفسه. المحدد الصحيح هو −24+4j، أي أربعة أمثال محدد A. بقي طوره المسجل موافقًا لطور A، وزاد اللوغاريتم بمقدار ln(4) ضمن التسامح.
تطبيع عناصر C أعاد B نفسها في هذا التحكم. يوضح التحجيم المشترك الفرق عن استبدال كل عنصر بإشارته: العامل الموجب المشترك لم يغيّر اتجاه المحدد هنا، بينما غيّر استبدال العناصر حاصل القطرين. بقيت المدخلات دون تعديل.

مرجع مستقل ونطاق الفحص
مرت 61 مقارنة على أربع حالات والتحكمين؛ المرجع أجزاء صحيحة و Decimal بدقة 80 رقمًا، مع تسامحات معلنة، دون ضمان دقة عام.
يحفظ مرجعنا كل عنصر كزوج صحيح للجزأين. لضرب (a,b) في (c,d)، يحسب (ac−bd,ad+bc)، ثم يطرح حاصلَي القطرين. لا يستدعي det أو slogdet لصنع المحدد المرجعي.
العناصر المختارة غير صفرية وتقع على أحد المحورين؛ لذلك نكتب إشارة كل منها بزوج صحيح مستقل. للمحدد المرجعي غير الصفري نحسب مقدارًا من جذر مجموع مربعي الجزأين في Decimal، ثم نقسم الجزأين عليه ونحسب لوغاريتمه. الصفر له فرع منفصل يعطي إشارة صفرية و−inf.
في الحالات الأربع A=[[j,p],[q,1]]، حيث p من 2 أو 4 و q من 3 أو 5. أضفنا R والتحجيم C، فأصبحت ست حالات. لكل حالة عشر مقارنات تشمل إشارات العناصر، وإشارة المحدد والطلب على محدده، واللوغاريتمين والمحددين، واختلاف الطورين، والأنواع والأشكال وثبات المدخلات.
الإجمالي 6×10=60؛ أضفنا مقارنة لعلاقة التحجيم الموجب واللوغاريتم وإشارات العناصر، فصار 61. تسامح الأجزاء 1e-14 مطلق، واللوغاريتم 1e-12 مطلق، وأجزاء المحدد 1e-12 نسبي دون تسامح مطلق موجب.
لم نفحص تكييفًا عدديًا عامًا أو اضمحلالًا أو فيضًا أو دفعات أو أنواعًا أخرى أو أداءً. النتيجة العملية من أمثلتنا: احفظ المصفوفة التي تخصها إشارة المحدد، وسجّل استبدال العناصر كعملية تنشئ مدخلًا جديدًا.
| المصفوفة | المحدد الصحيح | sign المقربة |
|---|---|---|
| A | −6+j | −0.986394+0.164399j |
| B=np.sign(A) | −1+j | −0.707107+0.707107j |
| R | −2 | −1+0j |
| np.sign(R) | 0 | 0j |
للتوسع: الأعداد المركبة.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
