lstsq تعيد مجموع مربعات البواقي لكل عمود من الطرف الأيمن. [1] نراجع الفرق نفسه أيضًا.
سمِّ المصفوفة والخرج
lstsq تعيد مجموع مربعات البواقي لكل عمود من الطرف الأيمن. [1] نراجع الفرق نفسه أيضًا.
مع B ثنائية البعد، حلول X ومجاميع مربعات البواقي تقابل أعمدة B. [1]
نسمي مصفوفة الفرق E، ونبقي اسم residuals لخرج الدالة. فصل الاسمين يمنع استعمال قائمة قصيرة كما لو أنها جميع أخطاء الصفوف. لا نحذف الإشارة أو نربع الفروق قبل أن نحدد أي حقل نريد حفظه.
يفرغ residuals عند رتبة A<N أو M≤N. [1] مثالنا كامل الرتبة وله M>N.
الأعداد تعليمية بلا وحدات أو بيانات مقيسة، ولا نقدر بها خطأ تنبؤ على حالات جديدة. السؤال هو قراءة خرج حساب محدد، مع مراجعة الفروق نفسها.
طرفان أيمنان وحلان
على NumPy 2.3.5 وCPython 3.12.14، نختار A=[[1,0],[0,1],[2,1]] وB=[[3,0],[2,−3],[2,9]] من float64. الحل X يوافق [[1,4],[1,−1]] بتسامح مطلق 10⁻¹².
import numpy as np A=np.array([[1,0],[0,1],[2,1]],dtype=np.float64) B=np.array([[3,0],[2,-3],[2,9]],dtype=np.float64) X,residuals,rank,s=np.linalg.lstsq(A,B,rcond=None) E=B-A@X print(X,residuals,rank) print(E)
مصفوفة الفرق E=B−A@X توافق [[2,−4],[1,−2],[−1,2]]. خرج residuals يوافق [6,24]، وشكله (2,)؛ هذه مجموعات مربعات للعمودين، لا ستة فروق منفردة.
في الحساب الكسري الدقيق، العمود الأول للحل هو (1,1)، وصورته A@(1,1)=(1,1,3). بطرح الصورة من (3,2,2)، نجد (2,1,−1). مجموع مربعاته 4+1+1=6.
العمود الثاني للحل هو (4,−1)، وصورته (4,−1,7). الطرف الموافق (0,−3,9) يعطي الفرق (−4,−2,2)، ومجموع مربعاته 16+4+4=24. ننسب كل مجموع إلى العمود نفسه، لا إلى صف في B.
سجل التشغيل X=[[1.0,3.999999999999999],[0.9999999999999998,−1.0000000000000002]]، وresiduals=[5.999999999999999,24.000000000000014]، والرتبة 2. الأعداد الصحيحة والكسور هي المرجع الدقيق، لا ادعاء تطابق حرفي للخرج العشري.
لأي طرف (a,b,c) مع A المختارة، نحسب u=(a−b+c)/3 وv=(−2a+5b+c)/6. الفروق (a−u,b−v,c−2u−v) تحقق e₀+2e₂=0 وe₁+e₂=0.
لإثبات أن الحل يقلل المربعات، غيّر المعاملين بمقدارين h وk. تتغير الصورة بمقدار (h,k,2h+k). بسبب العلاقتين الصفريتين، تختفي الحدود المختلطة مع الفروق؛ وتزيد الكلفة بمقدار h²+k²+(2h+k)².
هذه الزيادة غير سالبة، ولا تنعدم إلا عند h=k=0. لذلك الصيغة تعطي الحل الوحيد الأدنى لكل عمود في هذا التصميم. البرهان للحساب المختار؛ لا نستنتج منه وحده قواعد دقة لكل مصفوفة.
ثلاث طرق للجمع وتحكمان
جمع مربعات E كلها يعطي 30، والجمع على الصفوف يعطي [20,5,5]؛ كلاهما حساب آخر. حل كل عمود منفردًا يوافق عموده في X وقيمته في residuals، وتبديل العمودين يبدل ترتيبهما.
print(np.sum(E*E,axis=0)) print(np.sum(E*E,axis=1)) print(np.sum(E*E)) x0,r0,_,_=np.linalg.lstsq(A,B[:,0],rcond=None) x1,r1,_,_=np.linalg.lstsq(A,B[:,0:1],rcond=None)
في المرجع الدقيق، الجمع على الأعمدة يبقي رقمًا لكل طرف: [6,24]. أما الجمع على الصفوف، فيجمع 2²+(−4)²=20 في الأول، و1²+(−2)²=5 في الثاني، و(−1)²+2²=5 في الثالث.
الجمع الكلي يعطي 6+24=30، ويساوي أيضًا 20+5+5. تساوي المجموعين النهائيين لا يجعل القائمتين السابقتين متبادلتين؛ تختلف أطوالهما وما ينسب كل عنصر إليه. لا نعرض 30 على أنه خرج residuals الأصلي.
عند B[:,0] يكون الطرف متجهًا بشكله (3,)، ويكون الحل بشكله (2,). أما B[:,0:1] فتبقي عمودًا ثنائي البعد بشكله (3,1)، ويكون الحل بشكله (2,1). في التشغيل كلا خرجَي residuals بشكله (1,) ويوافقان [6].
كررنا التحكم للعمود الثاني فوافق الحل (4,−1) والمجموع 24. ثم حللنا B[:,::-1] فانتقل العمود الثاني إلى الأول: أعمدة X والقائمة residuals انعكس ترتيبها معًا. لم يتغير التصميم A.
هذه تحكمات لتطابق الجهة التي ننسب إليها الناتج. لا تدعي أن تنفيذ عدة حلول منفصلة أسرع أو أبطأ من حلها معًا، ولا تتناول اشتراك المدخلات أو المخرجات في الذاكرة.

الفحص وحدود القراءة
مرت 5840 مقارنة على المثال و729 طرفًا أيمن مؤلفًا مع A ثابتة كاملة الرتبة. استخدم المرجع Fraction لحساب الحل والفروق؛ لا نفحص هنا فراغ residuals أو الرتبة الناقصة أو حدود دقة عامة.
ولّدنا أطرافًا B من ثلاث قيم صحيحة −2 و0 و3 في كل واحدة من خاناتها الست. العدد 3⁶=729، مع المثال الرئيسي الإضافي. تبقى A كما هي في جميع الحالات.
لكل حالة ثماني مجموعات: X مقابل الصيغ الكسرية؛ E مقابل الفروق الدقيقة وتعامدها مع عمودي A؛ residuals مقابل مجموع كل عمود؛ الأشكال والأنواع والرتبة وثبات المدخلات؛ حل المتجهين منفصلين؛ حل العمودين ثنائيي البعد منفصلين؛ تبديل العمودين؛ ثم المجموع الكلي ومجاميع الصفوف. الإجمالي 730×8=5840.
المرجع يحسب u وv والفروق ومربعاتها باستخدام Fraction، دون استدعاء lstsq أو solve أو pinv لإنتاج المتوقع. الحلول المنفصلة تشغيلات ثانوية، وليست المرجع الوحيد للنتيجة.
المقارنة بتسامح مطلق 10⁻¹² ونسبي صفر؛ النتائج العشرية من float64 وrcond=None. فحصنا أيضًا أن بايتات A وB الأصلية بقيت كما هي. توافق هذه الحالات ليس حدًا عامًا للدقة العددية.
لم نفحص مدخلات مركبة أو دفعات أو قيمًا غير منتهية، ولا تصميمًا ناقص الرتبة أو أقل صفوفًا من أعمدته. ولم نختبر أداءً أو ثباتًا أو ملاءمة إحصائية. عند قراءة تجربة أخرى، احتفظ بالطرف الأيمن وترتيب أعمدته وX والفروق، ثم فسّر خرج الجمع الموافق لها.
| الحقل | الشكل | القيم الدقيقة |
|---|---|---|
| E | 3×2 | [[2,−4],[1,−2],[−1,2]] |
| residuals | (2,) | [6,24] |
| جمع الصفوف | (3,) | [20,5,5] |
| الجمع الكلي | عدد | 30 |
للتوسع: أنواع المصفوفات.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
