Решение функции 2-переменной только для одной переменной не работает с массивами - PullRequest
0 голосов
/ 27 января 2019

Я нашел в StackOverflow, как решить функцию с двумя переменными, которые задают одну постоянную / известную.

Это часть кода:

def R(gg,a):
    return a-r0*g0**(1/2)*D(gg)/gg**(1/2)
def G(r):
    partial_func = functools.partial(R, a=r)
    return fsolve(partial_func,10,xtol=10**-1)

, и она работает, поскольку для первых двух отпечатков я получаю одинаковое значение

f=([10,15])
print(G(10))
print(G(f[0]))
print(G(f))

, но при выдаче полного массива возникает следующая ошибка:

The array returned by a function changed size between calls

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Похоже, вы пытаетесь найти корни R для различных значений, включенных в f.

Проблема в том, что partial_func имеет единственное значение в качестве начальной оценки и хочет вернутьмассив той же длины, что и a (в вашем случае 2 значения).

Другими словами, в вашей проблеме нет ни одного значения root.Например, корень для f[0]=10, вероятно, отличается от корня для f[1]=15.Решением в этом случае должен быть массив из двух значений.

Чтобы исправить это, вам нужно дать массив для параметра x0 (начальная оценка) fsolve.

def G(r):
    partial_func = functools.partial(R, a=r)
    return fsolve(partial_func,[10,10],xtol=10**-1)

Так что для каждого значения в a есть инициализатор для gg, а решением является вектор такой же длины, как и f.

0 голосов
/ 27 января 2019

Поэтому, читая это без знания всех параметров, используемых в функции, я бы сказал, что в случае print(G(f)) вы предоставляете скаляр и возвращаете массив, который не работает.

Попробуйте вызвать вашу функциюс a=f и посмотрите возвращаемое значение.

Состояние документов:

fsolve: func: A function that takes at least one (possibly vector) argument, and returns a value of the same length

...