Русские Блоги
Вычисление интеграла с помощью модуля Scipy в Python
Метод получения интеграла в модуле Scipy на Python:
SciPy реализует базовое использование функции, чтобы найти интеграл функции, интеграл, продвинутая математика имеет много разговоров, основной смысл — найти площадь под кривой.
Среди них rn можно рассматривать как отклонение, которым обычно можно пренебречь, а wi можно рассматривать как вес.
SciPy предоставляет множество функций для вычисления различных типов интегралов, которые можно разделить на две категории в зависимости от разницы входных параметров: одна — это вход известной функции и верхний и нижний пределы интеграла; другая — набор входных точек.Это применимо к некоторым данным, собранным после физической реализации, но функция не может быть определена, но есть много точек данных, тогда какая площадь под огибающей этих точек также является интегральной проблемой, поэтому существует точка, установленная в функции SciPy Integral, параметр функции — это массив или список в форме.
1. Интеграл с известным типом функции
В этом разделе показано, как вычислить интеграл в SciPy в виде нескольких вопросов.
- Вопрос 1: Здесь предположим, что функция f (x) = x + 1, верхний и нижний пределы интеграла равны [1,2] математическое выражение:
Вы можете использовать подмодуль, интегрированный в модуль Scipyчетырехъядерная функцияНайти расчетное значение этой математической задачи.
from scipy import integrate def f(x): return x + 1 v, err = integrate.quad(f, 1, 2) print v
Результат выполнения программы:
2.5
Вопрос 2:Но для функции f (x) = ax + b, можно ли использовать функцию quad, если a и b могут быть неизвестны? Ответ - да, quad имеет формальный параметр args, который можно передавать в некоторых параметрах.
from scipy import integrate def f(x, a, b): return a * x + b v, err = integrate.quad(f, 1, 2, args = (-1, 1)) print v
Результат выполнения программы:
-0.5
Вопрос 3:Если вы встретите точку останова в интегральной функции, вы можете использовать точки функции quad, чтобы задать точку останова и продолжить интегрирование. Например:
Вотf (x) вЕсть точка останова, где x = 0, если точка останова не указана, она будет вычислена путем вычисления квадратов:
from scipy import integrate import numpy as np def f(x): return 1 / np.sqrt(abs(x)) v, err = integrate.quad(f, -1, 1) print v
scipy1801.py:4: RuntimeWarning: divide by zero encountered in double_scalars return 1 / np.sqrt(abs(x)) inf
Результат — бесконечность (бесконечность, бесконечность) и есть ошибка деления на 0! немного отредактируйте:
from scipy import integrate import numpy as np def f(x): return 1 / np.sqrt(abs(x)) v, err = integrate.quad(f, -1, 1, points=[0]) print v
Мы можем нарисовать визуальную кривую этой функции:
from scipy import integrate import numpy as np def f(x): return 1 / np.sqrt(abs(x)) v, err = integrate.quad(f, -1, 1, points=[0]) print v
import numpy as np, matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
fig, ax = plt.subplots(figsize=( 8, 3))
x = np.linspace(- 1, 1, 10000)
ax.plot(x, f(x), lw= 2)
ax.fill_between(x, f(x), color= ‘green’, alpha= 0.5)
ax.set_xlabel( » x x x «, fontsize= 18)
ax.set_ylabel( » f ( x ) f(x) f ( x ) «, fontsize= 18)
ax.set_ylim( 0, 25)
plt.show()
Получите следующую таблицу результатов:
2 Дайте интеграл от множества точек
В случае, если интегральная функция не может быть подтверждена, некоторые последовательности также могут быть интегрированы.
- Вопрос 4: Интегрировать Но есть 10 примеров данных этой функции, функция quad не f (x) = x, но соответствующие (xi,yi)。
from scipy import integrate import numpy as np def f(x): return np.sqrt(x) x = np.linspace(0, 2, 10) y = f(x) v = integrate.trapz(y, x) print v
3 Несколько точек
Двойной интеграл в SciPy можно вычислить с помощью функции dblquad, а тройной интеграл можно вычислить с помощью функции tplquad. Функцию nquad можно использовать для множественных интегралов от f (x1, x2, . xn).
- Двойная интегральная функция dblquad для вычисления, предположим, что есть функция f (x, y) необходимо вычислить свой двойной интеграл.
Как использовать Scipyфункция dblquadКакая? Общий формат выражения для универсального двойного интеграла:
Тогда первый параметр функции dblquad должен бытьf (x, y), второй, третий, четвертый и пятый - это a, b, g (x), h (x), что означает, что четвертая и пятая функции dblquad являются функцией.
from scipy import integrate import numpy as np def f(x, y): return x * y def h(x): return x v, err = integrate.dblquad(f, 1, 2, lambda x: 1, h) print v
Результат выполнения программы:
1.125
Тройной интеграл можно вычислить с помощью tplquad. Общий формат выражения тройного интеграла:
tqlquad(f, a, b, g, h, q, r)
Среди них все функции f, g, h, q и r. Ниже для расчета
Программа, написанная на Python, выглядит так:
from scipy import integrate import numpy as np f = lambda x, y, z : x g = lambda x : 0 h = lambda x : (1 - x) / 2 q = lambda x, y : 0 r = lambda x, y : 1 - x - 2 * y v, err = integrate.tplquad(f, 0, 1, g, h, q, r) print v
Результаты выполнения программы:
0.02083333333
scipy.integrate.trapezoid#
Integrate along the given axis using the composite trapezoidal rule.
If x is provided, the integration happens in sequence along its elements — they are not sorted.
Integrate y (x) along each 1d slice on the given axis, compute \(\int y(x) dx\) . When x is specified, this integrates along the parametric curve, computing \(\int_t y(t) dt = \int_t y(t) \left.\frac\right|_ dt\) .
Parameters : y array_like
x array_like, optional
The sample points corresponding to the y values. If x is None, the sample points are assumed to be evenly spaced dx apart. The default is None.
dx scalar, optional
The spacing between sample points when x is None. The default is 1.
axis int, optional
The axis along which to integrate.
Returns : trapezoid float or ndarray
Definite integral of y = n-dimensional array as approximated along a single axis by the trapezoidal rule. If y is a 1-dimensional array, then the result is a float. If n is greater than 1, then the result is an n-1 dimensional array.
Image [2] illustrates trapezoidal rule – y-axis locations of points will be taken from y array, by default x-axis distances between points will be 1.0, alternatively they can be provided with x array or with dx scalar. Return value will be equal to combined area under the red lines.
Use the trapezoidal rule on evenly spaced points:
>>> import numpy as np >>> from scipy import integrate >>> integrate.trapezoid([1, 2, 3]) 4.0
The spacing between sample points can be selected by either the x or dx arguments:
>>> integrate.trapezoid([1, 2, 3], x=[4, 6, 8]) 8.0 >>> integrate.trapezoid([1, 2, 3], dx=2) 8.0
Using a decreasing x corresponds to integrating in reverse:
>>> integrate.trapezoid([1, 2, 3], x=[8, 6, 4]) -8.0
More generally x is used to integrate along a parametric curve. We can estimate the integral \(\int_0^1 x^2 = 1/3\) using:
>>> x = np.linspace(0, 1, num=50) >>> y = x**2 >>> integrate.trapezoid(y, x) 0.33340274885464394
Or estimate the area of a circle, noting we repeat the sample which closes the curve:
>>> theta = np.linspace(0, 2 * np.pi, num=1000, endpoint=True) >>> integrate.trapezoid(np.cos(theta), x=np.sin(theta)) 3.141571941375841
trapezoid can be applied along a specified axis to do multiple computations in one call:
>>> a = np.arange(6).reshape(2, 3) >>> a array([[0, 1, 2], [3, 4, 5]]) >>> integrate.trapezoid(a, axis=0) array([1.5, 2.5, 3.5]) >>> integrate.trapezoid(a, axis=1) array([2., 8.])