>  기사  >  백엔드 개발  >  Python에서 지수 및 로그 곡선 피팅을 어떻게 수행할 수 있나요?

Python에서 지수 및 로그 곡선 피팅을 어떻게 수행할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-10-28 13:55:30845검색

How can I perform exponential and logarithmic curve fitting in Python?

곡선 피팅: Python의 지수 및 로그 접근 방식

다항식 곡선 피팅은 Python에서 polyfit()을 사용하여 쉽게 사용할 수 있지만 이 가이드에서는 지수 및 로그 곡선에 대한 방법을 탐색합니다. 피팅.

로그 피팅

y = A B log x 형식의 선을 피팅하려면 로그 x에 대해 y의 다항식 피팅을 수행하면 됩니다.

<code class="python">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</code>

지수 피팅

y = Ae^{Bx} 형식의 선을 피팅하려면 양변에 로그를 취하고 x에 대해 로그 y의 다항식 피팅을 수행합니다.

<code class="python">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)")</code>

더 나은 방법 정확성, 폴리핏()의 w 키워드를 사용하여 y에 비례하는 가중치를 활용합니다.

<code class="python">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)")</code>

대부분의 스프레드시트 및 공학용 계산기 애플리케이션은 지수 회귀에 비가중 공식을 사용하므로 호환성이 필요한 경우 가중치를 사용하지 마세요.

scipy.optimize.curve_fit 사용

scipy를 사용할 수 있는 경우 변환 없이 모델을 맞추려면 curve_fit을 사용하세요.

<code class="python">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)")</code>

초기 추측을 제공함으로써 curve_fit은 원하는 값에 도달할 수 있습니다. 지수 피팅을 위한 국소 최소값을 사용하므로 변환된 폴리핏 방법보다 더 정확한 피팅이 가능합니다.

위 내용은 Python에서 지수 및 로그 곡선 피팅을 어떻게 수행할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.