Функция
|
Описание
|
legendrc(n)
|
полиномы Лежандра Рп{х) (р{х) = 1, I = [— 1,1])
|
chebyt (n)
|
полиномы Чебышева первого рода Тп(х)
(р(.т) = (1-х2Г1/2, / = [-1.1])
|
chebyu(n)
|
полиномы Чебышева второго рода Un(x) (р(х) = (1 - х2)1/2, / = [-1,1])
|
chebyc(n)
|
полиномы Чебышева первого рода Сп(х) (р(х) = (1 - (.т/2)2)1/2, / = [-2,2])
|
chebys(n)
|
полиномы Чебышева второго рода Sn(x) (р(х) = (1-(х/2)2)1/2, / = [-2,2])
|
jacobi(n,a, (3)
|
полиномы Якоби Рпф{х) (р(х) = (1 — х)°(1 + х)^, I = [—1,1])
|
laguerre(n)
|
полиномы Лагерра Ln(x) {р{х) = ехр(-х), I = [0, оо])
|
genlaguerre(n,ct)
|
обобщенные полиномы Лагерра L“(x) (р(,х) = ехр(-х)ха, I = [0, оо])
|
hermite(n)
|
полиномы Эрмита Нп{х) {р{х) = ехр(-х2), / = [-оо,оо])
|
hcrmitenorm(n)
|
нормированные полиномы Эрмита Неп{х) (р(х) = ехр(—(х/2)2), I = [-оо,оо])
|
gcgeribaucr(n,a:)
|
полиномы Гегенбауэра (ультрасферичсские) С%(х) (р(.т) = (1-х2)“-1/2, / = [-1,1])
|
sh_legendre(n)
|
смещенные полиномы Лежандра Рп(х) (р(х) = 1, I = [0,1])
|
sh_chebyt(n)
|
смещенные полиномы Чебышева первого рода Тг(х) (р(х) = (х - х2)~1/2, I = [0,1])
|
sh_chebyu(n)
|
смещенные полиномы Чебышева второго рода Un{x)
(р(х) = (х-х2)1/2, I = [0,1])
|
sh_jacobi(n,a:, /3)
|
полиномы Якоби Рп'0{х) (р(,х) = (1 — х)а~рхр~1, I = [0,1])
|
yl = spec.chebyt(l)(х)
pit.plot(x, yl, label="$T_l(x)$")
y2 = spec.chebyt(2)(x)
pit.plot(x, y2, ’ — \ label="$T_2(x)$")
y3 = spec.chebyt(3)(x)
pit.plot(x, y3, >-.\ label="$T_3(x)$")
y4 = spec.chebyt(4)(x)
pit.plot(x, y4, label="$T_4(x)$")
pit .xlabelC’x’)
pit.legend(loc=9)
pit.grid(True)
pit. showO
па рис. 3.26 показаны графики полиномов Чебышева.
Модуль special предоставляет большие возможности по работе с функциями Бесселя (цилиндрическими функциями). Имеется возможность не только вычислять значения цилиндрических функций, но и интегралы и производные от них, а также найти корни. Например, функция jn(n,x) (уп(п,х)) вычисляет значение функции Бесселя первого (второго) рода целого порядка п в точке х. В случае нецелого порядка v для комплексного аргумента z
Рис. 3.26 Полиномы Чебышева первого рода
используются функции jv(v,z) (yv(v,z)) соответственно. Для вычисления корней используются функции jn_zeros(n,nt) (yn_zeros(n,nt)), где nt — число корней.
Ниже представлена программа для рисования функций Бесселя первого рода Jn(x),n = 0,1,3 и первых 6 корней функции J0(x) (см. рис. 3.27).
import scipy.special as spec import numpy as np import matplotlib.pyplot as pit x = np.linspace(0., 20., 100) yl = spec.jn(0,x)
plt.plot(x, yl, >->, label="$J_0(x)$") y2 = spec.jn(l,x)
pit.plot(x, y2, ’label="$J_l(x)$") y3 = spec.jn(2,x)
pit.plot(x, y3, label="$J_2(x)$")
zeros = spec.jn_zeros(0, 6) for xz in zeros:
pit.scatter(xz, 0) pit.xlabel(’x’)
Рис. 3.2Т Функции Бесселя первого рода
pit. legendO pit.grid(True) pit.show()
В качестве еще одного примера отметим гамма-функцию
которая определена как для вещественных, так и для комплексных 2. График функции Г(а;) для — 5 < х < 5 приведен на рис. 3.28. Расчет выполнен по следующей программе.
import scipy.special as spec
import numpy as np
import matplotlib.pyplot as pit
x = np.arange(-5,5,0.01)
у = spec.gamma(x)
for i in x:
if у[i] > 1.e20: y[i] = l.e20
if y[i] < -l.e20: y[i] = -l.e20 plt.plot(x, y, label="$\\Gamma(x)$")
pit.axis([-5.,5.,-20.,20.])
pit.xlabel(’x’)
pit.legend(loc=4)
pit.grid(True)
pit. showO
В данном примере для корректной прорисовки слишком большие по модулю значения функции обрезаются.
Быстрое преобразование Фурье
На основе преобразования Фурье решаются многие задачи обработки сигналов. Задачи прямого и обратного преобразования Фурье возникают также при применении метода разделения переменных для краевых задач математической физики. Отметим возможности модуля fftpack пакета SciPy но преобразованию Фурье сеточных периодических функций.
Будем считать, что комплексная периодическая функция y^j — 0, ±1,... с периодом N определяется но значениям в узлах j = 0,1,...,7V -- 1, так что у:) = yj+tnN. где т любое целое. Функция y^j = 0, dhl,... представляется в
v
(3.1)
s = Е
где г = yf-\. Здесь ац, /с = 0, 1,..., iV — 1— коэффициенты Фурье, для которых имеет место представление
(
виде
3.2)
Вычисление коэффициентов Фурье по (3.2) есть прямое преобразование Фурье функции yj — 0,1, ...,7V — 1, а восстановление самой функции по коэффициентам хк)к = 0,1, — 1 согласно (3.1) — обратное преобразование
Фурье.
В общем случае прямое и обратное преобразование Фурье требует 0(N2) арифметических действий. Вычислительную работу удается снизить до величины 0(N\ogN), например, при N = 2п — алгоритмы быстрого преобразования Фурье.
В модуле fftpack для прямого преобразования Фурье используется функция fft (), обязательным аргументом которой является массив значений сеточной функции. Обратное преобразование Фурье обеспечивается функцией if ft О.
Приведенная ниже программа иллюстрирует использование функций fft() и if ft () при Фурье-преобразовании разрывной функции. На рис. 3.29 приведены модули коэффициентов Фурье, а на рис. 3.30 представлены точные значения сеточной функции и полученные после применения прямого, а затем обратного преобразования Фурье.
import пшпру as пр import matplotlib.pyplot as pit from scipy import fftpack def f (x): f = x
if x > 0.5: f = 0. return f N = 32
У = np.zeros((N), ’float’) t = np.zeros((N), ’float’) for k in range(N):
tk = np.float(k) / N t[k] = tk у[k] = f(tk) x = fftpack.fft(y) z = np.sqrt(x.real**2 + x.imag**2) pit.figure(1)
pit.bar(range(N), z, align=’center’, width=0.5, color=’g’)
p
Do'stlaringiz bilan baham: |