численное решение уравнений с использованием лямбда-функций

#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')
 

и вот вы здесь!