在資料科學、工程分析、自然科學研究等領域,多項式曲線擬合和運算是很常見的基本功。NumPy 提供了強大的工具:polyfit
、polyval
、poly1d
,讓你能輕鬆完成「數據擬合 → 曲線預測 → 多項式操作」的完整流程。本教學帶你三步驟完全掌握這些魔法工具!
1. polyfit
:用資料點擬合多項式
numpy.polyfit(x, y, deg)
會根據你給定的 x、y 數據,找出最適合的多項式曲線(最小平方法),並回傳多項式係數。
範例:
import numpy as np
x = np.array([0, 1, 2, 3, 4])
y = np.array([1, 2.9, 7.2, 13.5, 24.1])
# 擬合二次多項式
coeffs = np.polyfit(x, y, 2)
print("多項式係數:", coeffs)
輸出結果:

多項式係數: [1.38571429 0.13714286 1.15142857]
代表 1.38x^2 + 0.13x + 1.15
2. polyval
:帶入 x 計算多項式數值
numpy.polyval(p, x)
可以將「多項式係數」和「自變數 x」帶入,計算對應的 y 值。
範例:
# 用剛剛 polyfit 得到的係數計算 y 值
x_new = np.array([5, 6, 7])
y_new = np.polyval(coeffs, x_new)
print("預測值:", y_new)
輸出結果:

3. poly1d
:多項式物件,操作更進階
numpy.poly1d(coeffs)
將多項式係數包裝成一個「多項式物件」,不僅能直接像函數一樣帶入 x 計算,還能做加減乘除、微分積分等高級操作。
範例:
p = np.poly1d(coeffs)
print("多項式表示:")
print(p)
# 計算 p(5)
print("p(5) =", p(5))
# 多項式的微分、積分
print("p 的微分:")
print(p.deriv())
print("p 的積分:")
print(p.integ())
# 與另一個多項式相加
q = np.poly1d([1, -1]) # q(x) = x - 1
print("p + q = ")
print(p + q)
輸出結果:

綜合範例:從資料擬合到預測與運算
import numpy as np
import matplotlib.pyplot as plt
# 假設有一組實驗數據
x = np.array([0, 1, 2, 3, 4])
y = np.array([1, 2.9, 7.2, 13.5, 24.1])
# 1. 用 polyfit 擬合二次多項式
coeffs = np.polyfit(x, y, 2)
# 2. 用 polyval 或 poly1d 計算新點的預測值
x_pred = np.linspace(0, 5, 100)
y_pred = np.polyval(coeffs, x_pred)
# 3. 或用 poly1d 做同樣的事,還能進行進階操作
p = np.poly1d(coeffs)
y_pred2 = p(x_pred) # 結果跟 y_pred 一樣
# 畫圖比較
plt.scatter(x, y, label="原始數據")
plt.plot(x_pred, y_pred, "r-", label="polyval 預測")
plt.plot(x_pred, y_pred2, "g--", label="poly1d 預測")
plt.legend()
plt.show()
輸出結果:

小結
polyfit
:讓你從數據點得到「最佳多項式曲線」。polyval
:快速計算多項式在任何 x 的值,適合批量預測。poly1d
:多項式物件導向操作,進階運算更方便。
這三個工具配合使用,能大大提升你在數據擬合、預測、分析上的效率。
快動手試試,讓你的數據分析流程更流暢!
推薦hahow線上學習python: https://igrape.net/30afN
近期留言