scipy.special.agm#
-
scipy.special.agm(a, b, выход=None) =
'agm'> # Вычислить арифметико-геометрическое среднее a и b.
Начните с a_0 = a и b_0 = b и итеративно вычисляйте:
a_{n+1} = (a_n + b_n)/2 b_{n+1} = sqrt(a_n*b_n)
a_n и b_n сходятся к одному пределу при увеличении n; их общий предел — agm(a, b).
- Параметры:
- a, barray_like
Только вещественные значения. Если оба значения отрицательны, результат отрицателен. Если одно значение отрицательно, а другое положительно, nan возвращается.
- выходndarray, необязательно
Необязательный выходной массив для значений функции
- Возвращает:
- скаляр или ndarray
Среднее арифметико-геометрическое a и b.
Примеры
>>> import numpy as np >>> from scipy.special import agm >>> a, b = 24.0, 6.0 >>> agm(a, b) 13.458171481725614
Сравните этот результат с итерацией:
>>> while a != b: ... a, b = (a + b)/2, np.sqrt(a*b) ... print("a = %19.16f b=%19.16f" % (a, b)) ... a = 15.0000000000000000 b=12.0000000000000000 a = 13.5000000000000000 b=13.4164078649987388 a = 13.4582039324993694 b=13.4581390309909850 a = 13.4581714817451772 b=13.4581714817060547 a = 13.4581714817256159 b=13.4581714817256159
При передаче аргументов в виде массивов применяется трансляция:
>>> a = np.array([[1.5], [3], [6]]) # a has shape (3, 1). >>> b = np.array([6, 12, 24, 48]) # b has shape (4,). >>> agm(a, b) array([[ 3.36454287, 5.42363427, 9.05798751, 15.53650756], [ 4.37037309, 6.72908574, 10.84726853, 18.11597502], [ 6. , 8.74074619, 13.45817148, 21.69453707]])