Skip to main content
`Ctrl`+`K`

# Source code for SALib.test_functions.Ishigami

    import numpy as np

    def evaluate(X: np.ndarray, A: float = 7.0, B: float = 0.1) -> np.ndarray:
        r"""Non-monotonic Ishigami-Homma three parameter test function:

        `f(x) = \sin(x_{1}) + A \sin(x_{2})^2 + Bx^{4}_{3}\sin(x_{1})`

        This test function is commonly used to benchmark global sensitivity
        methods as variance-based sensitivities of this function can be
        analytically determined.

        See listed references below.

        In [2], the expected first-order indices are:

            x1: 0.3139
            x2: 0.4424
            x3: 0.0

        when A = 7, B = 0.1 when conducting Sobol' analysis with the
        Saltelli sampling method with a sample size of 1000.

        Parameters
        ----------
        X : np.ndarray
            An `N*D` array holding values for each parameter, where `N` is the
            number of samples and `D` is the number of parameters
            (in this case, three).
        A : float
            Constant `A` parameter
        B : float
            Constant `B` parameter

        Returns
        -------
        Y : np.ndarray

        References
        ----------
        .. [1] Ishigami, T., Homma, T., 1990.
               An importance quantification technique in uncertainty analysis for
               computer models.
               Proceedings. First International Symposium on Uncertainty Modeling
               and Analysis.
               https://doi.org/10.1109/ISUMA.1990.151285

        .. [2] Saltelli, A., Ratto, M., Andres, T., Campolongo, F., Cariboni, J.,
               Gatelli, D., Saisana, M., Tarantola, S., 2008.
               Global Sensitivity Analysis: The Primer. Wiley, West Sussex, U.K.
               https://dx.doi.org/10.1002/9780470725184
        """
        Y = np.zeros(X.shape[0])
        Y = (
            np.sin(X[:, 0])
            + A * np.power(np.sin(X[:, 1]), 2)
            + B * np.power(X[:, 2], 4) * np.sin(X[:, 0])
        )

        return Y