gpt4 book ai didi

python - 最小化函数,如何将参数传递给函数 scipy

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:16 25 4
gpt4 key购买 nike

我已经编写了一个代码,用于使用 scipy 最小化关于 r 和 alpha 的某个函数。但是,我在将参数传递给函数时遇到了问题。

#!/usr/bin/env python
import numpy as np
from scipy.integrate import quad
import scipy.optimize as opt

def integrand(t, alpha, r):
return np.exp(-alpha*(t-r))**2

def my_function(parameters, rho):
alpha = parameters[0]
r = parameters[1]
return quad(integrand, 0, rho, args=(alpha, r))[0]

alpha_0 = 1
r_0 = 1
rho = 5.0

vec_expint = np.vectorize(my_function)

res = opt.minimize(my_function(rho), np.asarray([alpha_0, r_0]), method='CG', tol=1.e-2, options={'gtol': 0.01, 'maxiter': 5})
print(res)

我想将积分界限作为变量。我添加了一个变量 rho,但收到以下错误消息:

 res = opt.minimize(my_function(rho), np.asarray([alpha_0, r_0]), method='CG', tol=1.e-2, options={'gtol': 0.01, 'maxiter': 5})
TypeError: my_function() takes exactly 2 arguments (1 given)

谁能解释一下如何以正确的方式传递参数?

最佳答案

您已经定义:

def my_function(parameters, rho):

现在试试

my_function(1)

错误是什么?显而易见的 Python 版本,对吧?当你运行时

 res = opt.minimize(**my_function(rho)**, np.asarray([alpha_0, r_0]), method='CG', tol=1.e-2, options={'gtol': 0.01, 'maxiter': 5})

它甚至没有超过我突出显示的那个表达式。

有几个解决方案:

  • 定义一个只接受一个参数的新函数,parameters,并预先定义rho。这可以通过 deflambdapartial 来完成。

  • optimize 一个 args 参数。您在调用 quad 时已经在使用 args 功能。

关于python - 最小化函数,如何将参数传递给函数 scipy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41387978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com