علوم وفضاء

trapezoid: هل ترتب قيم x قبل الحساب؟

ترتيبان للأزواج نفسها.
رسم أصلي للنقاط المؤلفة.

تتبع trapezoid تسلسل x المقدمة ولا ترتبها تلقائيًا. [1] نراجع ثلاثة أزواج مؤلفة.

احفظ ترتيب الأزواج

مع x مقدمة صراحة، يحافظ الحساب على تسلسلها ولا يفرزها. [1]

نعطي كل زوج اسمًا: A=(0,2)، وB=(3,4)، وC=(1,1). ترتيب تجربتنا A ثم B ثم C؛ لا نقرأ النقاط بوصفها جدولًا رُتب مسبقًا على x.

في هذا المسار نذهب من x=0 إلى x=3 ثم نعود إلى x=1. الأسماء تحفظ هوية الأزواج عند تغيير ترتيب القراءة. هذه نقاط تعليمية بلا وحدة معلنة، وليست أزمنة قياس ينبغي لنا إصلاحها أو بيانات مصنف.

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

راجع مساهمتي الترتيب الأصلي

في مراجعة شبه المنحرف نضرب فرق x في متوسط قيمتي y للطرفين. [1]

أنشأنا x=np.array([0,3,1],dtype=np.float64) وy=np.array([2,4,1],dtype=np.float64). أعاد np.trapezoid(y,x=x) القيمة 4.0 في NumPy 2.3.5 على CPython 3.12.14.

حسبنا مرجعًا مستقلًا بكسور Fraction. للقطعة A إلى B عرض 3−0=3، ومتوسط الارتفاعين (2+4)/2=3؛ المساهمة 9. للقطعة B إلى C عرض 1−3=−2، والمتوسط (4+1)/2=5/2؛ المساهمة −5.

المجموع 9−5=4. لا تأتي المساهمة الثانية السالبة من y سالبة؛ قيمتاها 4 و1 موجبتان. الذي انعكس في هذه القطعة هو اتجاه فرق x.

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

ميّز إعادة الترتيب من عكس المسار

أعدنا قراءة الأزواج وفق الفهارس p=[0,2,1]، فصار التسلسل A ثم C ثم B. أصبح x[p] بالقيم 0 و1 و3، وy[p] بالقيم 2 و1 و4. أعاد np.trapezoid(y[p],x=x[p]) القيمة 6.5.

المساهمتان هنا 1×(2+1)/2=3/2، ثم 2×(1+4)/2=5. المجموع 13/2 أو 6.5. احتفظنا بكل زوج، لكن بدلنا أي نقطة تتصل بأي نقطة بعدها؛ ليس هذا نتيجة فرز تلقائي للاستدعاء الأول.

وشغّلنا تحكمًا نرتب فيه x وحدها: np.trapezoid(y,x=x[p]). بقيت y بالترتيب 2 و4 و1، فأصبحت مساهمتا الحساب 1×(2+4)/2=3 و2×(4+1)/2=5. ظهر 8.0؛ هذه أزواج مختلفة عن A وC وB.

ثم عكسنا ترتيب المصفوفتين كاملتين باستعمال y[::-1] وx[::-1]. صار المسار C ثم B ثم A: المساهمتان 5 و−9، وظهر الناتج −4.0. عكس المسار الأصلي ليس هو ترتيبه على x متزايدة.

وللمراجعة حسبنا |9|+|−5|=14. هذا مجموع مقداري مساهمتين فقط، لا حساب لمساحة اتحاد المناطق في الرسم. لا نبدل به العدد 4 عندما نسجل نتيجة الاستدعاء الأصلي.

نحتفظ في بطاقة التجربة بالمصفوفتين وقائمة الفهارس واسم الاستدعاء. تغير الرقم هنا يخص تغيير ترتيب المدخل أو أزواجه، ولا يثبت أي ترتيب أنسب لمهمة فعلية لم نعرّفها.

مساهمات الترتيبين.
رسم أصلي للنقاط المؤلفة.

حدد نطاق الفحوص

وسعنا المرجع إلى جميع ثلاثيات x من الأعداد −2 و−1 و0 و1 و2؛ عددها 5**3=125. أخذنا أيضًا جميع ثلاثيات y من 0 إلى 4؛ عددها 125. بذلك توجد 125×125=15625 حالة، ومنها حالات تتكرر فيها قيمة x.

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

لكل حالة أربعة فحوص: القيمة الأصلية مقابل المرجع، وناتج عكس المصفوفتين مقابل سالبه، وناتج إعادة ترتيب الأزواج معًا مقابل مرجعه الخاص، وثبات بايتات المدخلين. فحص الثبات يضم المصفوفتين في بند واحد عند العد.

اخترنا ترتيب فهارس مشتركًا باستخدام sorted في Python على قيم x. عند تساوي القيم احتفظنا بسياسة ترتيب هذا التحكم، ولم نزعم ضمان ترتيب افتراضي من خوارزمية فرز في NumPy. كل مرجع يقارن الاستدعاء بمدخلاته الفعلية بعد إعادة الترتيب.

إجمالي الشبكة 15625×4=62500. ستة تحكمات مباشرة راجعت 4 و6.5 و−4 و8 ومجموع المقدارين 14 وثبات المدخلين في المثال الرئيسي؛ صار الإجمالي 62506 ومرت جميع الفحوص.

لم نفحص محاور متعددة أو x=None وdx أو NaN واللانهاية أو فائض أنواع صحيحة أو دقة قياسات عائمة عامة. ولم نقدر خطأ منحنى حقيقي أو مساحة اتحاد هندسي أو الأداء والذاكرة. الاختبار يراجع هذا الحساب المحدد، ولا يجعل ترتيبًا مختارًا سياسة تلقائية للبيانات.

الترتيبقيم xقيم yنتيجة التشغيل
A ثم B ثم C0؛ 3؛ 12؛ 4؛ 14.0
A ثم C ثم B0؛ 1؛ 32؛ 1؛ 46.5
C ثم B ثم A1؛ 3؛ 01؛ 4؛ 2−4.0
ترتيب x وحدها0؛ 1؛ 32؛ 4؛ 18.0

للتوسع: التحليل العددي.

المراجع

  1. NumPy 2.3 — trapezoid

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