2017-02-05 11 views
0
#Grdient acent 
from sympy import Derivative, Symbol, sympify, solve 
from sympy.core.sympify import SympifyError 
def grad_ascent(x0, flx, x): 

    if not solve(flx): 
     print('Cannot continue, solution for {0}=0 does not exist'.format(flx)) 
     return 
    epsilon= 1e-6 
    step_size= 1e-4 
    x_old= x0 
    x_new= x_old+step_size*flx.subs({x: x_old}).evalf() 
    while abs(x_old-x_new)>epsilon: 
     x_old= x_new 
     x_new= x_old+step_size*flx.subs({x_old}).evalf() 
    return x_new 

if __name__=='__main__': 

    f=input('Enter a function in one variable: ') 
    var=input('Enter the variable to differenriate with respect to: ') 
    var0=float(input('Enter the initial value of the variable: ')) 
    try: 
     f=sympify(f) 
    except SympifyError: 
     print("Invalid function entered ") 
    else: 
     var=Symbol(var) 
     d=Derivative(f, var).doit() 
     var_max=grad_ascent(var0, d, var) 
     if var_max: 
      print('{0}:{1}'.format(var.name, var_max)) 
      print('Maximum value: {0}'.format(f.subs({var:var_max}))) 

私はなぜ動かないのですか? 私が実行している場合は、唯一の 『フロート』オブジェクトが反復可能ではないメッセージ」を表示私が間違え 私の間違いを教えてくださいPythonエラー=> 'Float'オブジェクトは反復不可能です

+5

含めます – MYGz

+1

常にQUESTIONにFULLエラーメッセージを入れてください。 – furas

+0

[this](http://stackoverflow.com/questions/8120019/typeerror-float-object-notiterable)の可能な複製。 –

答えて

0

問題がflx.subs({x_old})である - 。?。それは{x: x_old}または類似したものでなければなりません

関連する問題