Я хочу интегрировать функцию, которая не имеет решения закрытой формы с неизвестной переменной, а затем построит зависимость от неизвестной переменной. Чтобы попробовать более простой тест, я попытался использовать интеграл от f(x,c) = (x^2+c)
, интегрированный по x
и график с разными значениями c
. Однако приведенный ниже код получает ошибку
только массивы size-1 могут быть преобразованы в сканы Python
хотя интеграл от числа, например, integral(5)
, кажется, возвращает правильное скалярное значение.
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
def f(x,c):
return x**2+c
def integral(c):
return integrate.quad(f,0,10, args = (c,))[0]
y = np.linspace(0,20,200)
plt.plot(y, integral(y))
Вы передаете массив numpy как аргумент c
то время как вы хотите интегрировать по x
для всех элементов c
. Поэтому вы можете использовать это:
def f(x,c):
return x**2+c
def integrate_f(c):
result = np.zeros(len(c))
counter = 0
for item in c:
result[counter] = integrate.quad(f,0,10, args = (item))[0]
counter +=1
return result
c_array = np.linspace(0,1,200)
plt.plot(c_array, integrate_f(c_array))
onno было немного быстрее. Но вот мое подобное решение. Вам нужно перебрать все разные c
:
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
def f(x,c):
return x**2+c
def getIntegral(c_list):
result = []
for c in c_list:
integral = integrate.quad(f,0,10,args = c)[0]
result.append(integral)
return result
if __name__ == "__main__":
c_list = np.linspace(0,20,200)
plt.plot(c_list, getIntegral(c_list))
plt.show()
int
. Это создает ненужную путаницу со встроенной функцией .test
?