Как численно решить многопараметрические уравнения с несколькими известными переменными? - PullRequest
0 голосов
/ 07 июня 2018

Как решить пару нелинейных уравнений с помощью Python? В этом вопросе была решена пара нелинейных уравнений, каждое из которых имеет два аргумента.

Теперь у меня более двух уравнений,у каждого есть ряд аргументов.Количество аргументов больше, чем число уравнений.

При использовании метода в вопросе.Например:

'''
def func0(a,b,c,d,local1=α,local2=β):
    #process
    return function
# func0==0
def func1():
    return
#etc

def multi_equ(p):
    a,b,c,d,e = p
    return (func0(a,b,c,d,local1,local2),func1(c,d,e),func2(a,b,c,d,e,local),etc)
'''

Мой вопрос:

Как написать fsolve () для решения такой функции, когда, например, когда-нибудь известен аргумент c, я пытаюсь решить остальные.

1 Ответ

0 голосов
/ 07 июня 2018

Чтобы использовать fsolve, вам нужна

Функция, которая принимает хотя бы один (возможно, векторный) аргумент и возвращает значение изодинаковая длина .

Итак, число уравнений должно быть равно числу неизвестных.Если у вас есть функция, которая принимает аналогичные входные данные, за исключением того, что одна из входных переменных известна, то оберните ее в другую функцию, например:

def f(a, b, c, d): 
    return [a-b, b-c, c-d] 

def func(p):
    a, b, d = p
    c = 0.5
    return f(a, b, c, d)

Здесь func подходит для использования в fsolve, например

fsolve(func, [0, 0, 0])   # returns [0.5, 0.5, 0.5]

Количество неизвестных, отличное от числа уравнений

Если в математических задачах больше (или меньше) неизвестных, чем уравнений, то fsolve использовать нельзя,Тогда я использовал бы инструмент least_squares, который минимизирует сумму квадратов func.

def func(p):
    a, b, c, d = p
    return [a-b, b-c, c-d] 

least_squares(func, [3, 2, 5, 1]) 

Это находит решение задачи наименьших квадратов как [2.75, 2.75, 2.75, 2.75].Он также возвращает стоимость, которая, будучи почти нулевой, говорит нам, что func действительно превращается в ноль в найденной точке.Это решение не является уникальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...