Как установить границы только для одного параметра - PullRequest
0 голосов
/ 25 марта 2020

Я использую Curve_fit от scipy.optimize, чтобы соответствовать моим данным. У меня есть функция, которая соответствует трем параметрам (Z1, Z2, Z3). Я хочу предоставить границы. Тем не менее, я хотел бы указать только границу Z2 (Z2 будет ниже 40). Я не хочу устанавливать границы для Z1 и Z3. Это возможно?

            popt, pcov = curve_fit(func, xdata, ydata, p0 = [Z1, Z2, Z3],
                           bounds = ((10, 20, 5), (100, 50, 100,)))

            # This way I provide bounds to Z1, Z2 and Z3
            # I, however, only want to say that Z2 < 40
            # Also interesting would be to say Z2 < Z1, with no bounds for Z1 or Z3

1 Ответ

0 голосов
/ 25 марта 2020

Из документации :

bounds: 2-кортеж array_like, необязательный

Нижняя и верхняя границы параметров. По умолчанию нет границ. Каждый элемент кортежа должен быть либо массивом с длиной, равной числу параметров, либо скаляром (в этом случае граница считается одинаковой для всех параметров.) Используйте np.inf с соответствующим знак, чтобы отключить границы для всех или некоторых параметров.

Так что вам просто нужно указать np.inf в качестве верхней границы и -np.inf в качестве нижней границы для Z1 и Z3:

import numpy as np
popt, pcov = curve_fit(func, xdata, ydata, p0 = [Z1, Z2, Z3],
                           bounds = ((-np.inf, -np.inf, -np.inf), (np.inf, 40, np.inf)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...