ValueError: Массив, возвращаемый функцией, изменял размер между вызовами scipy.fsolve () - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь использовать scipy.optimize.fsolve (), чтобы решить для х, что делает функцию равной нулю, но продолжаю получать ошибку выше.Мой код:

import scipy.optimize as optimize
from scipy.stats import genextreme as gev

gevcombined = [(-0.139, 3.035, 0.871),(-0.0863, 3.103, 0.818),(-0.198, 3.13, 0.982)]
ratio = [0.225, 0.139, 0.294]
P = [0.5,0.8,0.9,0.96,0.98,0.99]
def mixedpop(x):
    for j in range(len(ratio)):
        F = (ratio[j]*gev.cdf(x,gevcombined[j][0],gevcombined[j][1],gevcombined[j][2]))+((1-ratio[j]*gev.cdf(x,gevcombined[j][0],gevcombined[j][1],gevcombined[j][2]))-P
    return F

initial = 10
Rm = optimize.fsolve(mixedpop,initial)

Я получаю сообщение об ошибке:

ValueError:the array returned by a function changed size between calls

Что означает эта ошибка?Ожидаемый результат будет значением для каждого значения P. Таким образом, значения x из Rm будут равны примерно как [3.5, 4, 5.4, 6.3, 7.2, 8.1] для каждого отношения

1 Ответ

0 голосов
/ 16 февраля 2019

Хорошо, я выяснил, как заставить fsolve работать для массива решений.

Это работает, если я напишу все это так:

Rm = []
initial = [10,10,10,10,10,10]
for j in range(len(ratio)):
    f = lambda x : (ratio[j]*gev.cdf(x,gevcombined[j][0],gevcombined[j][1],gevcombined[j][2]))+((1-ratio[j]*gev.cdf(x,gevcombined[j][0],gevcombined[j][1],gevcombined[j][2]))-P
    Rm.append(list(optimize.fsolve(f,initial)))

И мой вывод:

[[3.37, 4.37, 5.13, 6.43, 7.91, 9.88],[3.41, 4.42, 5.09, 6.13, 7.07, 8.18],[3.49, 4.87, 5.95, 7.51, 8.80, 10.19]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...