في حين أن ملاءمة المنحنى متعدد الحدود متاحة بسهولة في بايثون باستخدام polyfit()، يستكشف هذا الدليل طرقًا للمنحنى الأسي واللوغاريتمي ملائمة.
لتناسب سطر من النموذج y = A B log x، ما عليك سوى إجراء ملاءمة متعددة الحدود لـ y مقابل السجل x.
import numpy as np
x = np.array([1, 7, 20, 50, 79])
y = np.array([10, 19, 30, 35, 51])
coeffs = np.polyfit(np.log(x), y, 1)
print("y ≈", coeffs[1], "log(x) ", coeffs[0]) # y ≈ 8.46 log(x) 6.62
لتناسب سطر من النموذج y = Ae^{Bx}، خذ اللوغاريتم لكلا الجانبين وقم بإجراء توافق متعدد الحدود لـ log y مقابل x.
x = np.array([10, 19, 30, 35, 51])
y = np.array([1, 7, 20, 50, 79])
coeffs = np.polyfit(x, np.log(y), 1)
print("y ≈ exp(", coeffs[1], ") * exp(", coeffs[0], " * x) = 0.670 * exp(0.105 * x)")
للحصول على دقة أفضل ، الاستفادة من الأوزان المتناسبة مع y باستخدام الكلمة الأساسية w في polyfit().
coeffs = np.polyfit(x, np.log(y), 1, w=np.sqrt(y))
print("y ≈ exp(", coeffs[1], ") * exp(", coeffs[0], " * x) = 4.12 * exp(0.0601 * x)")
لاحظ أن معظم تستخدم تطبيقات جداول البيانات والآلة الحاسبة العلمية صيغة غير مرجحة للانحدار الأسي، لذا تجنب الأوزان إذا كان التوافق مطلوبًا.
إذا كان scipy متاحًا، استخدم curve_fit لتركيب النماذج بدون التحولات.
from scipy.optimize import curve_fit
# Logarithmic fitting
coeffs, _ = curve_fit(lambda t, a, b: a b * np.log(t), x, y)
print("y ≈", coeffs[1], "log(x) ", coeffs[0]) # y ≈ 6.62 8.46 log(x)
# Exponential fitting with initial guess
coeffs, _ = curve_fit(lambda t, a, b: a * np.exp(b * t), x, y, p0=(4, 0.1))
print("y ≈", coeffs[0], "exp(", coeffs[1], " * x) = 4.88 exp(0.0553 x)")
من خلال توفير تخمين أولي، يمكن أن يصل المنحنى الملائم إلى الحد الأدنى المحلي المطلوب للتركيب الأسي، مما يؤدي إلى توافق أكثر دقة من طريقة polyfit المحولة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3