Несколько значений кортежей - PullRequest
0 голосов
/ 01 июня 2018

У меня проблема с аппроксимацией в python.У меня есть функция, которая дает мне диктовать результаты.Например {1: 0.5, 2: 0.25}.Это означает, что f(1)==0.5, f(2)==0.25 и т. Д.

Ниже описано, что я делаю после получения значений из своей функции.

lists = sorted(resultsDict.items())
x, y = zip(*lists)
startvalues = [0.5,1.0,0]
popt, pcov = curve_fit(func, x, y,p0)
function=func(x,popt[0],popt[1],popt[2])
plt.plot(x,y,'x',x,function,'r-')
plt.show()

И теперь у меня есть ответ.Если я определю функцию func таким образом, все будет в порядке.

def func(x,a,b,c):
   return  a+b/x

Если я определю этот способ

def func(x,a,b,c):
   return  a+b/x+c*x

У меня будет ошибка:

TypeError: 'numpy.float64' object cannot be interpreted as an integer

И еслиЯ определяю таким образом

def func(x,a,b,c):
   return  a+b/x+c/(x*x) # or x**2

У меня ошибка:

TypeError: can't multiply sequence by non-int of type 'tuple'

Я не знаю, где проблема, особенно во втором, и я не знаю, как я могу увернутьсяпроблема в третьем, если я хотел проверить функцию 1/x**2.

1 Ответ

0 голосов
/ 01 июня 2018

Первые две строки вашего кода отображают x и y как кортежи, которые действуют не так, как массивы с математическими операторами.Все, что вам нужно сделать, это: x,y=np.array(sorted(resultsDict.items())).T Это сделает массив для вас, затем транспонируйте его так, чтобы он имел 2 строки и n столбцов, чтобы его можно было распаковать на x,y.

...