# Source code for secml.optim.function.c_function_beale

```"""
.. module:: CFunctionBeale
:synopsis: Beale function

.. moduleauthor:: Marco Melis <marco.melis@unica.it>

"""
from secml.optim.function.c_function import CFunction
from secml.array import CArray

[docs]class CFunctionBeale(CFunction):
"""The Beale function.

2-Dimensional, multimodal, with sharp peaks
at the corners of the input domain.

Global minimum f(x) = 0 @ x = (3, 0.5).

Given by:
.. math::

f(x) = (1.5 - x_0 + x_0 * x_1)^2 + (2.25 - x_0 + x_0 * x_1^2)^2 +
(2.625 - x_0 + x_0 * x_1^3)^2

Attributes
----------
class_type : 'beale'

"""
__class_type = 'beale'

def __init__(self):

# Passing data to CFunction
super(CFunctionBeale, self).__init__(

def _fun(self, x):
"""Apply Beale function to point x.

Parameters
----------
x : CArray
Data point.

Returns
-------
float
Result of the function applied to input point.

"""
x = x.atleast_2d()
if x.shape[1] != 2:
raise ValueError(
"Beale function available for 2 dimensions only")

# Split into 3 parts
f1 = (1.5 - x[0].item() + x[0].item() * x[1].item()) ** 2
f2 = (2.25 - x[0].item() + x[0].item() * x[1].item() ** 2) ** 2
f3 = (2.625 - x[0].item() + x[0].item() * x[1].item() ** 3) ** 2

return f1 + f2 + f3

"""Beale function gradient wrt. point x."""
x = x.atleast_2d()
if x.shape[1] != 2:
raise ValueError("Gradient of Beale function "
"only available for 2 dimensions")
# Computing gradient of each dimension
grad1_1 = 2 * (1.5 - x[0] + x[0] * x[1]) * (-1 + x[1])
grad1_2 = 2 * (2.25 - x[0] + x[0] * x[1] ** 2) * (-1 + x[1] ** 2)
grad1_3 = 2 * (2.625 - x[0] + x[0] * x[1] ** 3) * (-1 + x[1] ** 3)
grad2_1 = 2 * (1.5 - x[0] + x[0] * x[1]) * x[0]
grad2_2 = 2 * (2.25 - x[0] + x[0] * x[1] ** 2) * (2 * x[0] * x[1])
grad2_3 = 2 * (2.625 - x[0] + x[0] * x[1] ** 3) * \
(3 * x[0] * x[1] ** 2)

[docs]    @staticmethod
def global_min():
"""Value of the global minimum of the function.

Global minimum f(x) = 0 @ x = (3, 0.5).

Returns
-------
float
Value of the global minimum of the function.

"""
return 0.

[docs]    @staticmethod
def global_min_x():
"""Global minimum point of the function.

Global minimum f(x) = 0 @ x = (3, 0.5).

Returns
-------
CArray
The global minimum point of the function.

"""
return CArray([3., 0.5])
```