Python - Как построить аргумент в интеграле, который не является интегрируемым значением

1

Я хочу интегрировать функцию, которая не имеет решения закрытой формы с неизвестной переменной, а затем построит зависимость от неизвестной переменной. Чтобы попробовать более простой тест, я попытался использовать интеграл от 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))
  • 1
    Вы действительно не должны писать функцию с именем int . Это создает ненужную путаницу со встроенной функцией .
  • 0
    Какая у вас переменная test ?
Показать ещё 2 комментария
Теги:
scipy
plot
integral

2 ответа

1

Вы передаете массив 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))
0

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()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню