تقنية

qr بنمط raw: هل المصفوفة h هي Q؟

خانات R وذيول العاكسات.
الواحد في متجه العاكس ضمني.

h في raw تخزن بيانات العاكسات مع R، وtau معاملات تحجيمها؛ h منقولة في خرج NumPy، وليست Q الصريحة عمومًا. [1]

بيانات البناء ليست العامل الصريح

h في raw تخزن بيانات العاكسات مع R، وtau معاملات تحجيمها؛ h منقولة في خرج NumPy، وليست Q الصريحة عمومًا. [1]

نستقبل h وtau في اسمين، لكننا لا نسميهما Q وR لمجرد عدد الأسماء. الموضوع هنا محتوى التخزين: توجد أعداد تؤدي أدوارًا مختلفة داخل الجدول نفسه، ولا يصلح كل عنصر فيه باعتباره عنصرًا في مصفوفة تعامد.

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

النمط reduced يعيد Q وR بأبعادهما المختزلة. [1]

انقل الجدول ثم افصل الأدوار

في A=[[3,2],[4,−1],[0,6]]، خرج h بالشكل (2,3) وtau بالشكل (2,)، بينما Q المختزلة (3,2). جعل h منقولة لا يحول محتواها تلقائيًا إلى Q.

import numpy as np A=np.array([[3,2],[4,-1],[0,6]],dtype=np.float64) h,tau=np.linalg.qr(A,mode="raw") Q,R=np.linalg.qr(A,mode="reduced") print(h.shape,tau.shape,Q.shape,R.shape)

على NumPy 2.3.5 وCPython 3.12.14 سجلنا h≈[[-5,0.5,0],[-0.4,6.390618,−0.698436]]، وtau≈[1.6,1.344255]. نعرض هذه الخانات مقربة؛ الفحص استخدم القيم المعادة كاملة، لا الأعداد المقربة في المقال.

في التخزين غير المنقول، تؤخذ R من القطر وما فوقه؛ ذيول العاكسات تحته، مع واحد ضمني في متجه كل عاكس. [2]

بعد نقل الجدول في مثالنا، الصف الأول [-5,−0.4]، والثاني [0.5,6.390618]، والثالث [0,−0.698436]. لا نمسح 0.5 و−0.698436 من السجل الخام؛ نحتفظ بهما للخطوة التالية، ونضع الصفر تحت قطر R عندما نبني العامل المثلثي منفصلًا.

R في المثال ≈[[-5,−0.4],[0,6.390618]]؛ حفظنا 0.5 في التخزين، ولم نضعها في R.

ابنِ العاكسين بالترتيب

في حالتنا ذات ثلاثة صفوف وعمودين نكتب v₀=(1,hᵀ[1,0],hᵀ[2,0]) وv₁=(0,1,hᵀ[2,1]). ثم Hⱼ=I−tau[j]vⱼvⱼᵀ، وQ الكاملة=H₀H₁؛ نأخذ أول عمودين للمختزلة. [2]

يعطينا السجل v₀=(1,0.5,0) وtau[0]=1.6. من ذلك H₀=[[-0.6,−0.8,0],[−0.8,0.6,0],[0,0,1]] في الحساب الدقيق لهذه الأعداد. حاصل H₀ في العمود الأول (3,4,0) هو (−5,0,0)، وهي مراجعة مباشرة للعدد −5.

متجه العاكس الثاني تقريبيًا (0,1,−0.698436)، ويستعمل معامله الثاني كاملًا. لا نبدل موضع الواحد إلى الخانة التي تحمل العدد 6.390618؛ هذا العدد بقي في R. ولا نجمع العاكسين بدل ضربهما.

بناء المنتج من القيم الكاملة أعطى Q المختزلة تقريبًا [[−0.6,0.275404],[−0.8,−0.206553],[0,0.938876]]. هذه القيم مختلفة بوضوح عن أول عمود في التخزين المنقول، الذي يبدأ بالعدد −5 لا −0.6.

راجعنا تعامد كل عاكس وQ الكاملة، ثم حاصل Q المختزلة في R مقابل أعداد A الصحيحة. خطأ إعادة المثال كان نحو 6.92×10⁻¹⁶؛ أما استعمال التخزين المنقول نفسه في مكان Q فأعطى أكبر فرق عن A نحو 41.64. لا نفسر هذا الفرق بأنه خطأ تقريب صغير.

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

فك المثال مقابل استعمال التخزين مباشرة.
الاتفاق في التحكم خاص بهذا المدخل.

التحكم وحدود الحالات

تحكم الهوية المستطيلة [[1,0],[0,1],[0,0]] أعاد tau=[0,0] واتفق التخزين المنقول مع Q في التشغيل. هذا الاتفاق الخاص لا يثبت أنهما الشيء نفسه لكل مدخل.

في التحكم، R هي مصفوفة الوحدة 2×2، والعاكسان المبنيان من معاملات صفرية هما الهوية. المنتج الكامل الهوية 3×3، وأول عمودين منه يعطيان Q المختزلة المطلوبة. أصبحت الخانات الخام متفقة معها في هذه الأعداد الخاصة.

وجود هذا النجاح لا يبرر تجاوز فك التخزين في A. الذي تغير هو المدخل ومعاملاته، لا تعريف raw. نراجع لكل سجل ما يمثل ذيلًا وما يمثل قطرًا قبل إجراء حاصل ضرب.

شمل الفحص 29 حالة float64: 58 استدعاءً إلى qr و522 قيمة عددية داخل المصفوفات المعادة؛ أخفق استعمال التخزين المنقول بوصفه Q في 28 حالة واتفق في التحكم وحده.

تتكون الشبكة من [[3,a],[4,b],[0,c]]، حيث كل من a وb وc من {−2,0,3}؛ لذلك فيها 3³=27 حالة، وأضفنا المثال والتحكم خارجها. إنشاء المصفوفات بواسطة np.array حدث 29 مرة، خارج عد استدعاءات qr الثمانية والخمسين.

كل طلب raw أعاد ست قيم في h وقيمتين في tau؛ وكل reduced أعاد ستًا في Q وأربعًا في R. إذن 29×(8+10)=522 قيمة أصلية معادة. العاكسات والمنتجات التي حسبناها بعد ذلك قيم مشتقة، ولا نضمها لهذا العد.

استخدم البناء جمعًا وضربًا بمكتبة Decimal القياسية بدقة 90 رقمًا على القيم الخام، لا عمليات ضرب NumPy لإنتاج المتوقع. فُحصت الهوية وإعادة أعداد المدخل، وقورنت النتيجة بالنمط المختزل كتحكم إضافي. أكبر بقايا تحقق مسجلة نحو 1.22×10⁻¹⁵، وكلها تحت سماحية مطلقة 10⁻¹².

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

المخرجشكل المثالملاحظة التشغيل
h(2,3)التخزين المنقول يبدأ بـ−5
tau(2,)1.6 و1.344255 تقريبًا
Q المختزلة(3,2)أول عمود يبدأ بـ−0.6

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

المراجع

  1. NumPy qr
  2. LAPACK dgeqrf

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