#lambda #minimize
#лямбда — выражение #свести к минимуму
Вопрос:
Я хочу решить уравнение с помощью scipy.minimize. Это довольно просто, если это простое уравнение выглядит следующим образом. Но уравнение, которое я пытаюсь решить, намного сложнее, чем представленное здесь, так что в идеале я бы использовал RHS и LHS для приравнивания вещей. Другими словами, вместо лямбда x: (f1(a,b,c,x)[0]-f1(a,b,c,x)[1])**2….) Я хочу иметь возможность писать так, лямбда x:(LHS-RHS)** 2…. где и LHS, и RHS являются выражениями, зависящими от x, неизвестного. Однако, как только я это сделаю, python объявит, что x не определен. Как мне это решить? Без использования некоторой подстановки реальное уравнение было бы практически невозможно записать. Большое вам спасибо!
from scipy.optimize import minimize_scalar
def test_david(a,b,c):
def f1(a,b,c,x):
return a*x-1,(b c)*x**2 #a,b,c=[2,1,0], x**2-2*x 1=0
#LHS=f1(a,b,c,x)[0]
#RHS=f1(a,b,c,x)[1]
res = minimize_scalar(lambda x: (f1(a,b,c,x)[0]-f1(a,b,c,x)[1])**2, bounds=(-5, 5), method='bounded')
return res
Ответ №1:
Я сделал это. Оказывается, решение очень простое: определите каждую часть уравнения как функцию, такую как,
def LHS(a,b,c,x):
return a b*x c2*x**3 ... #put any close form function of x over here
def RHS(a,b,c...x):
return x a/x ... #again, put any close form function of x over here
теперь напишите
res = minimize_scalar(lambda x: (LHS(a,b,c,x)-RHS(a,b,c,x))**2, bounds=(-5, 5), method='bounded')
и вот вы здесь!