# scipy.special.agm¶

scipy.special.agm(a, b) = <ufunc 'agm'>

Compute the arithmetic-geometric mean of a and b.

Start with a_0 = a and b_0 = b and iteratively compute:

```a_{n+1} = (a_n + b_n)/2
b_{n+1} = sqrt(a_n*b_n)
```

a_n and b_n converge to the same limit as n increases; their common limit is agm(a, b).

Parameters
a, barray_like

Real values only. If the values are both negative, the result is negative. If one value is negative and the other is positive, nan is returned.

Returns
float

The arithmetic-geometric mean of a and b.

Examples

```>>> from scipy.special import agm
>>> a, b = 24.0, 6.0
>>> agm(a, b)
13.458171481725614
```

Compare that result to the iteration:

```>>> 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
```

When array-like arguments are given, broadcasting applies:

```>>> a = np.array([[1.5], , ])  # 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]])
```