Fit с функцией, которая включает в себя интегральную - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь снабдить график c функцией, которая включает в себя интеграл. Если я не использую np.array (), возникает ошибка: «Результат от вызова функции не является правильным массивом с плавающей точкой». И если я использую np.array (), возникает другая ошибка: x и y должны иметь одинаковое первое измерение, но иметь формы (501,) и (1,). Как я могу это исправить?

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
import sympy as sp


x1=[1,2,3,4,5]
y=[6,12,18,24,30]


x,a,t=sp.symbols('x a t')

def f(x,a):
    return np.array([sp.integrate(t*x*a,(t,0,2))],dtype=float)

xFit=np.arange(0,5.01,0.01)
popt, pcov=curve_fit(f,x1,y)
plt.scatter(x1,y)
plt.plot(xFit,f(xFit,*popt),color="r")
print(popt[0])

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

хорошо ... мне кажется, что это решено:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
import sympy as sp


x1=[1,2,3,4,5]
y=[6,12,18,24,30]


x,a,t=sp.symbols('x, a, t', real=True)
g=sp.integrate(t*x*a,(t,0,2))
f=sp.lambdify((x,a),g)

xFit=np.arange(0,5.01,0.01)
popt, pcov=curve_fit(f,x1,y)
plt.scatter(x1,y)
ystar = [f(_x, popt[0]) for _x in xFit]
plt.plot(xFit, ystar, color="r")
print(popt[0])
0 голосов
/ 28 апреля 2020

Функция f(x,a) ожидает скалярные аргументы и возвращает скалярное значение, даже если x является вектором. Попробуйте заменить строку plot() на следующую:

ystar = [f(_x, popt[0]) for _x in xFit]
plt.plot(xFit, ystar, color="r")
...