Passing arguments to fsolve

前端 未结 2 1343
梦谈多话
梦谈多话 2020-12-16 00:51

I\'m solving a nonlinear equation with many constants.
I created a function for solving like:

def terminalV(Vt, data):
    from numpy import sqrt
    ro_         


        
相关标签:
2条回答
  • 2020-12-16 01:31

    The problem is that you need to use an asterisk to tell your function to repack the tuple. The standard way to pass arguments as a tuple is the following:

    from numpy import sqrt   # leave this outside the function
    from scipy.optimize import fsolve
    
    #  here it is     V
    def terminalV(Vt, *data):
        ro_p, ro, D_p, mi, g = data   # automatic unpacking, no need for the 'i for i'
        return sqrt((4*g*(ro_p - ro)*D_p)/(3*C_d(Re(data, Vt))*ro)) - Vt
    
    data = (1800, 994.6, 0.208e-3, 8.931e-4, 9.80665)
    Vt0 = 1
    Vt = fsolve(terminalV, Vt0, args=data)
    

    Without fsolve, i.e., if you just want to call terminalV on its own, for example if you want to see its value at Vt0, then you must unpack data with a star:

    data = (1800, 994.6, 0.208e-3, 8.931e-4, 9.80665)
    Vt0 = 1
    terminalV(Vt0, *data)
    

    Or pass the values individually:

    terminalV(Vt0, 1800, 994.6, 0.208e-3, 8.931e-4, 9.80665)
    
    0 讨论(0)
  • 2020-12-16 01:55

    Like so:

    Vt = fsolve(terminalV, Vt0, args=[data])
    
    0 讨论(0)
提交回复
热议问题