polytrim تقارن مقدار المعاملات الطرفية عالية الدرجة بـtol، ثم تحذف ما لا يتجاوزها. [1]
على ماذا يطبق التسامح؟
polytrim تقارن مقدار المعاملات الطرفية عالية الدرجة بـtol، ثم تحذف ما لا يتجاوزها. [1]
تُقرأ معاملات هذه الدالة من الدرجة الدنيا إلى العليا. وإذا أزيلت السلسلة كلها، تعيد مصفوفة تحتوي صفرًا واحدًا. [1]
نسأل هنا عن ادعاء محدد: هل إزالة معامل دون عتبة معينة تجعل فرق قيم كثير الحدود دون العتبة نفسها؟ نختار نقطة تقييم معلومة، ثم نفحص الادعاء بدل استنتاجه من اسم المعامل tol.
الأعداد التالية مؤلفة بلا وحدات أو بيانات تدريب. لم نلائم منحنى ولم نقس أداء نموذج؛ المثال يتناول مصفوفة معاملات موجودة قبل الاستدعاء.
معامل دون العتبة وفرق أكبر
شغّلنا NumPy 2.3.5 وCPython 3.12.14: c=[0,0,1/64] من float64، وtol=1/32؛ أعادت polytrim المصفوفة [0.] بالشكل (1,).
from numpy.polynomial import polynomial as P import numpy as np c=np.array([0,0,1/64],dtype=np.float64) q=P.polytrim(c,tol=1/32) print(q)
قبل القص p(x)=x²/64، وبعده q(x)=0؛ عند x=8 يكون فرق القيم 1، وهو أكبر من tol=1/32.
المعامل الأخير 1/64 أصغر من 1/32. قرأنا خرج التشغيل صفرًا واحدًا، فصار كثير الحدود الناتج صفرًا عند نقاط التقييم في مثالنا. لا نحذف حدًا من الصيغة ونحتفظ بقيمه القديمة في جدول النتائج.
عند 8، نضرب 1/64 في 8²=64، فنحصل على 1. وبعد القص نحصل على 0؛ الفرق المطلق |1−0|=1. هذه عملية جبرية مستقلة للتحقق من أثر المعامل المحذوف، لا نتيجة صنعناها باستدعاء polytrim ثانيةً.
وعند 1 يكون الفرق 1/64، أصغر من التسامح؛ وعند 2 يكون 4/64=1/16، أكبر منه. لذلك يغير موضع التقييم جواب المقارنة، رغم أن مصفوفة المعاملات والتسامح لم يتغيرا.
تحكمان يفصلان أسئلة القص
تحكم tol=0 يحتفظ بـ[0,0,1/64]؛ وتحكم [1/2,1/64,1/2] مع tol=1/32 يحتفظ بالمعامل الصغير الداخلي أيضًا.
keep=P.polytrim(c,tol=0) inside=np.array([1/2,1/64,1/2],dtype=np.float64) print(keep) print(P.polytrim(inside,tol=1/32))
في التحكم الأول بقي الحد x²/64 نفسه، لأن معامله غير صفري. لم نستنتج من تساوي شكل المدخل والخرج أن كل إعداد آخر سيحفظ هذا الحد؛ شاهدنا أن التسامح الآخر أزاله.
في التحكم الثاني، المعامل عالي الدرجة 1/2 أكبر من التسامح؛ بقيت [1/2,1/64,1/2] كلها في التشغيل. بقي 1/64 في الداخل، فلا نقرأ الاستدعاء على أنه تصفية لكل معامل صغير في كل موضع. هذا تحكم مساعد، بينما سؤال المقال الرئيسي يخص فرق قيم الدالة.
بقيت بايتات المدخل الأصلي وشكله (3,) كما هما أثناء الفحوص. نميز المدخل المحفوظ من الناتج الذي قرأناه، ولا نستنتج خصائص مشاركة الذاكرة أو الكتابة من هذا الفحص وحده.

ما الذي أثبتته شبكة الفحص؟
مرت 441 مقارنة على 63 حالة بأعداد ثنائية محددة؛ النطاق درجات 1 و2 و3، ومعامل طرفي واحد قد يكون غير صفري، وتسامح ثابت 1/32.
كتبنا المرجع الكسري p(x)=b+t xᵈ. الدرجة d من 1 و2 و3، والثابت b من 0 و1/2 و−1/2، والمعامل t من −1/16 و−1/32 و−1/64 و0 و1/64 و1/32 و1/16. توجد أصفار بين الثابت والمعامل الطرفي عند الحاجة.
عدد التركيبات 3×3×7=63. قارن المرجع مصفوفة الخرج، ثم قيم كثير الحدود عند −8 و−1 و0 و1 و8. عندما أزيل t، كان الفرق p−q=t xᵈ؛ وعندما بقي، كان الفرق صفرًا. حساب المرجع لا يستدعي polytrim أو polyval.
لكل حالة سبعة فحوص: المعاملات؛ قيم الناتج؛ هوية فرق القيم؛ تحكم التسامح الصفري؛ تحكم المعامل الصغير الداخلي؛ النوع والشكل؛ وثبات بايتات المدخل. المجموع 63×7=441، ومرت كلها.
الأعداد المختارة كسور ذات مقامات من قوى اثنين، ونقاط التقييم أعداد صحيحة صغيرة؛ استعملنا مساواة دقيقة في هذه الفحوص. لا نجعل ذلك ضمان دقة لكل كثير حدود أو نوع عائم.
لم نفحص رتبًا أو أنواعًا أخرى، أو NaN واللانهاية، أو تسامحًا سالبًا، أو مدخلًا فارغًا، أو عدة معاملات طرفية صغيرة غير صفرية، أو تغيير أساس ومتغير أو أداءً. المثال المضاد يكفي لنفي قراءة tol حدًا عامًا لفرق القيم؛ أما تقدير خطأ في مسألة أخرى فيحتاج معاملات ونطاق تقييم معلومين.
| x | p(x) | q(x) | الفرق المطلق |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1/64 | 0 | 1/64 |
| 2 | 1/16 | 0 | 1/16 |
| 8 | 1 | 0 | 1 |
للتوسع: معامل صفري في Lasso.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
