علوم وفضاء

eig: هل المتجهات الذاتية في الصفوف أم الأعمدة؟

عمود وصف وباقي معادلة.
اختياران للقيمة2.

eig تعيد المتجهات الذاتية اليمنى في أعمدة V؛ العمود V[:,i] بطول الوحدة ويقابل القيمة w[i]. [1]

اقرأ العمود مع قيمته

eig تعيد المتجهات الذاتية اليمنى في أعمدة V؛ العمود V[:,i] بطول الوحدة ويقابل القيمة w[i]. [1]

ترتيب القيم الذاتية ليس مضمونًا؛ حافظ على اقتران w[i] بالعمود V[:,i]. [1]

معادلة المتجه الذاتي الأيمن هي A@V[:,i]=w[i]*V[:,i]. [1]

فيما يأتي نسجل ترتيبًا ظهر في تشغيل محدد. نختار فهرس القيمة2 من الخرج نفسه، ثم نفحص العمود والصف عند ذلك الفهرس. لا نفترض أن أصغر قيمة ستأتي أولًا في كل تشغيل.

الصف بالحجم الصحيح لكنه يفشل

في تشغيل مثالنا، w[0]=2؛ العمود V[:,0]=[1,0,0] يحقق المعادلة، والصف V[0,:] يفشل رغم أن كليهما شكله (3,).

أطوال الأعمدة في المثال نحو1، بينما أطوال الصفوف نحو1.2336 و0.8341 و0.8847؛ الطول وحده لا يغني عن اختبار المعادلة.

import numpy as np A=np.array([[2.,1.,0.],[0.,3.,1.],[0.,0.,5.]],dtype=np.float64) w,V=np.linalg.eig(A) k=w.tolist().index(2.) right=V[:,k] wrong=V[k,:] r1=A@right-w[k]*right r2=A@wrong-w[k]*wrong cols=np.linalg.norm(V,axis=0) rows=np.linalg.norm(V,axis=1)

مع axis عددًا صحيحًا تحسب norm معيار المتجه على ذلك المحور؛ المعيار الافتراضي للمتجه إقليدي. [2]

في التشغيل على NumPy 2.3.5 وCPython 3.12.14، كانت w=[2,3,5] بالشكل (3,)، وV بالشكل (3,3)، وكلاهما من float64. كانت صفوف V تقريبًا [1,0.707107,0.147442]، ثم [0,0.707107,0.442326]، ثم [0,0,0.884652].

العمود الموافق2 يعطي A[1,0,0]=[2,0,0]، فيكون الباقي r1=[0,0,0]. أما الصف الخاطئ فالباقي r2 تقريبًا [0.707107,0.854549,0.442326]؛ ليس متجه الصفر.

إذا سمينا الصف الخاطئ [1,t,u]، فإن A[1,t,u]−2[1,t,u]=[t,t+u,3u]. مع t≈0.707107 وu≈0.147442، تظهر المركبات المسجلة دون اعتماد على استدعاء eig لصنع مرجع الباقي.

cols نحو [1,1,1]، وrows نحو [1.2336,0.8341,0.8847]. هذه أعداد مثالنا؛ مراجعة الباقي هي التي حسمت أن الصف لا يقابل القيمة2. مجرد قبول الضرب للأبعاد الثلاثة لم يصحح الاختيار.

التحكم الذي يخفي الخطأ

التحكم القطري أعاد V مصفوفة الوحدة؛ الصفوف والأعمدة نجحت فيه، فاختبار ذلك التحكم وحده أخفى خطأ الفهرسة.

D=np.array([[2.,0.,0.],[0.,3.,0.],[0.,0.,5.]],dtype=np.float64) wd,Vd=np.linalg.eig(D)

في هذا التشغيل كانت wd=[2,3,5] وVd=[[1,0,0],[0,1,0],[0,0,1]]. الصف الأول والعمود الأول كلاهما [1,0,0]، والثانيان [0,1,0]، والثالثان [0,0,1]. لذلك نجح فحص المعادلة للصفوف والأعمدة هنا.

هذا سجل التحكم القطري نفسه؛ لا نحوله إلى ضمان ترتيب أو إشارة ثابتة للمتجهات في كل تشغيل. المثال غير القطري السابق هو الذي كشف اختلاف الصف عن العمود.

حتى في المثال الرئيسي، طول العمود1 لا يعني أن الأعمدة متعامدة: جداء العمود [1,0,0] بالعمود [1,1,0]/√2 يساوي1/√2، وليس صفرًا. لم نفحص خاصية التعامد بوصفها شرطًا لهذه المصفوفة.

أطوال وتحكم قطري.
التحكم يخفي الخطأ.

مرجع جبري وحدود المقارنة

مرت660 مقارنة على81 مدخلًا مثلثيًا والمثال والتحكم؛ النطاق float64 وقيم قطرية متميزة، دون حكم على الأعداد المركبة أو القيم المتكررة أو الأداء.

في مثالنا، det(A−λI)=(2−λ)(3−λ)(5−λ). نعوض اتجاهات [1,0,0] و[1,1,0] و[1,3,6] فنجد أنها تقابل2 و3 و5. اتجاه القيمة3 طوله√2، واتجاه القيمة5 طوله√46.

للتأكد من الاتجاه دون التعويل على الإشارة، يبني مرجعنا لكل اتجاه x جدولًا عناصره xᵢxⱼ/Σx² باستخدام Fraction. نقارنه بالجداء الخارجي للعمود الموافق. تغيير x إلى −x يبقي ذلك الجدول نفسه.

في الشبكة A=[[2s+h,bs,0],[0,3s+h,cs],[0,0,5s+h]]، حيث b وc وs من1 و2 و4، وh من0 و1 و3؛ إذن3⁴=81 مدخلًا. جذور كثيرة الحدود هي عناصر القطر، واتجاهاتها [1,0,0] و[b,1,0] و[bc,3c,6].

في الاتجاه الأخير، الصف الأول من A−(5s+h)I يعطي −3sbc+bs×3c=0، والصف الثاني يعطي −2s×3c+cs×6=0؛ الثالث صفر. بهذا نشتق الاتجاه من الأعداد، قبل مقارنة خرج الدالة.

ثمانية فحوص لكل مدخل: قيم w ونوعها وشكلها؛ V ونوعها وشكلها؛ اتجاهات الأعمدة؛ بواقي المعادلة؛ أطوال الأعمدة؛ أطوال الصفوف؛ نجاح العمود وفشل الصف للقيمة الأصغر؛ وثبات المدخل. مع ثمانية للمثال وأربعة للتحكم: ‏81×8+8+4=660.

سمحنا بتفاوت نسبي ومطلق1e−12 للمتجهات والأطوال والبواقي المحسوبة. طابقنا الأعمدة بحسب القيم المقابلة، ولم نرتب w منفصلة عن V. لم نستخدم eig أو norm لبناء الجذور والاتجاهات المتوقعة.

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

الاختيارالشكلباقي المعادلة
V[:,k] مع w[k]=2(3,)[0,0,0]
V[k,:] مع w[k]=2(3,)[0.707107,0.854549,0.442326] تقريبًا
صفوف التحكم القطري(3,) لكل صف[0,0,0] في التشغيل

للتوسع: أنواع المصفوفات.

المراجع

  1. NumPy eig
  2. NumPy norm

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