亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 curve.fit 過度擬合

使用 curve.fit 過度擬合

守候你守候我 2023-10-05 17:49:28
誰能幫我解決 curve.fit 的擬合問題。我想將我的數據擬合到二階方程。但我得到了像線性方程一樣的結果。這是我的代碼:import numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fitdef func(x, a, b, c):    f = a*np.power(x, 2) + b*x + c    return fxdata_prime=[3.0328562996216282, 3.101784841139168, 3.1707134502066894, 3.2396419917242292, 3.308570533241769, 3.3774990747593088, 3.3774990747593088, 3.4337789932367149, 3.4900589392912855, 3.5463388577686916, 3.6026187762460977, 3.6588987223006684]ydata_prime=[6.344300000000002, 6.723900000000002, 7.080399999999999, 7.399800000000001, 7.649099999999999, 7.753100000000002, 7.753100000000002, 7.658600000000002, 7.442100000000002, 7.180100000000001, 6.902700000000001, 6.6211]plt.plot(xdata_prime, ydata_prime, 'b-', label='data')popt, pcov = curve_fit(func, xdata_prime, ydata_prime)poptplt.plot(xdata_prime, func(xdata_prime, *popt), 'r-',label='fit')plt.xlabel('x')plt.ylabel('y')plt.legend()plt.show()
查看完整描述

1 回答

?
青春有我

TA貢獻1784條經驗 獲得超8個贊

您的數組需要是 numpy 數組,因為您的函數正在執行向量化操作(即 a*np.power(x, 2))。所以這樣你的代碼就可以工作了:


import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit


def func(x, a, b, c):

    f = a*np.power(x, 2) + b*x + c

    return f


xdata_prime=np.array([3.0328562996216282, 3.101784841139168, 3.1707134502066894, 3.2396419917242292, 3.308570533241769, 3.3774990747593088, 3.3774990747593088, 3.4337789932367149, 3.4900589392912855, 3.5463388577686916, 3.6026187762460977, 3.6588987223006684])

ydata_prime=np.array([6.344300000000002, 6.723900000000002, 7.080399999999999, 7.399800000000001, 7.649099999999999, 7.753100000000002, 7.753100000000002, 7.658600000000002, 7.442100000000002, 7.180100000000001, 6.902700000000001, 6.6211])


plt.plot(xdata_prime, ydata_prime, 'b-', label='data')

popt, pcov = curve_fit(func, xdata_prime, ydata_prime)

plt.plot(xdata_prime, func(xdata_prime, *popt), 'r-',label='fit')

plt.xlabel('x')

plt.ylabel('y')

plt.legend()

plt.show()

https://img1.sycdn.imooc.com//651e86f000016d6503860263.jpg

查看完整回答
反對 回復 2023-10-05
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號