علوم وفضاء

gradient: هل تقبل edge_order=2 نقطتين فقط؟

نقطتان ورتبتان مختلفتان.
نجاح الرتبة الأولى ورفض الثانية.

رفضت التجربة حساب الفروق الطرفية بالرتبة الثانية لمصفوفة من نقطتين. إضافة نقطة ثالثة أتاحت الحساب في المثال المحدد.

رتبة الحدود

تحدد edge_order رتبة الفروق المستخدمة عند الحدود؛ يبقى التباعد واحدًا في تجربتنا. [1]

نقطتان وتباعد ثابت

شغلنا NumPy 2.3.5 على CPython 3.12.14 بمدخل int64 هو [8,-3]، وتباعد صريح يساوي 1.

الأعداد مؤلفة، وليست عينات لدالة ذات مشتقة تحليلية معلومة. نفحص قبول المدخل والنتائج العددية، ولا نقيس دقة مشتقة مجهولة.

رفض الرتبة الثانية

مع edge_order=1 ظهر [-11.0,-11.0] من float64؛ ومع edge_order=2 ظهر ValueError.

a=np.array([8,-3],dtype=np.int64) print(np.gradient(a,1,edge_order=1)) # np.gradient(a,1,edge_order=2) raises ValueError

الفرق بين النقطتين هو −3−8=−11. النتيجة المقبولة لا تعني قبول الخيار الآخر للمدخل نفسه.

تحكم بثلاث نقاط.
نتائج الرتبتين عند طول ثلاثة.

نقطة ثالثة وتحكم واضح

يفحص التنفيذ أن طول المحور لا يقل عن edge_order+1 قبل حساب الفروق. [2]

تحكم [8,-3,2] أعطى [-11.0,-3.0,5.0] بالرتبة الأولى و[-19.0,-3.0,13.0] بالثانية. مرت 38 حالة و76 نداءً، منها 10 حالات رفض لطول المحور.

b=np.array([8,-3,2],dtype=np.int64) print(np.gradient(b,1,edge_order=2))

للمثال الثلاثي، الفرق الأوسط هو (2−8)/2=−3. حسب المرجع الكسري المستقل الطرفين من ثلاث نقاط، فكانا −19 و13. بقيت بايتات المدخل وشكله ونوعه دون تغيير.

الشبكة تضم 9 متجهات بطول 2 و27 بطول 3، من القيم −2 أو صفر أو 3. أضفنا المثالين المؤلفين: 38 حالة، ولكل حالة رتبتان، أي 76 نداءً. رفضت الرتبة الثانية المتجهات العشرة ذات النقطتين، ونجحت النداءات الـ66 الأخرى.

اقتصر التنفيذ على مصفوفات int64 أحادية بطول 2 أو 3، وتباعد 1 ورتبتين محددتين. لم نفحص التباعد غير المنتظم أو محاور أخرى أو أطوالًا أخرى أو أنواعًا أخرى أو قيمًا كبيرة أو غير منتهية أو ضوضاء أو أداءً أو إصدارات سابقة. قبول الحساب لا يثبت أن رتبة معينة أدق لكل بيانات.

المدخلedge_orderالنتيجة
[8,-3]1[-11.0,-11.0] / float64
[8,-3]2ValueError
[8,-3,2]1[-11.0,-3.0,5.0] / float64
[8,-3,2]2[-19.0,-3.0,13.0] / float64

للتوسع: فحص المشتقة بالفروق.

المراجع

  1. NumPy gradient
  2. NumPy 2.3.5 gradient implementation

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