微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在数据框中使用具有多个变量的 fsolve

如何解决如何在数据框中使用具有多个变量的 fsolve

假设我有两个函数和这些库

from scipy.optimize import fsolve
import sympy as sym

def f19(u,a):
    return (math.sqrt(25 + 26*u + 4*a*u + u**2 + 4*a*u**2 + 4*a**2*u**2) + 2*a*u + u - 5)/(4*a + 6)

def f13(x,u,a,d):    # u,d = args[0],args[1],args[2]
    return ((x + 1) ** (a - 1)*x ** ((d*(x + 1) ** a*(x - u)) / u - 1)*(d*x*math.log(x)*(a*(x - u) + x + 1) - d*(x + 1)*(u - x))) / u

还有一个熊猫数据框

df = df.sort_values(['u','a','d','k','z','x_max'],ascending=(True,True,True))

我想根据上面的两个函数创建一些新列。

我可以让它工作

df['x_max19'] = np.vectorize(f19)(df['x_max'],df['a'])

但我不知道使用 fsolve 和数据帧中的变量的函数的语法。

k_t = math.log(0.55 + 2*df['u'])/df['u']
df['x_max13'] = .... fsolve(f13,k_t)[0].real 

我尝试过 np.vectorize、df.apply 和两者的混合。

df['x_max1'] = fsolve(np.vectorize(f13)(x,[df['u'],df['a'],df['d']]),k_t) # eg

我收到此错误

    u,args[2]
IndexError: invalid index to scalar variable.

当我使用以下内容时:

df['x_max1'] = df.apply(fsolve(f13,k_t),axis=1)

我收到此错误

k_t = math.log(0.55 + 2*df['u'])/df['u']
TypeError: cannot convert the series to <class 'float'>

如果可能,我想在我的公式中使用我现有的数学符号,这样我就不必将所有公式重新编写为向量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。