gpt4 book ai didi

python - 如何将不定积分放入目标函数 Python

转载 作者:行者123 更新时间:2023-12-05 04:28:46 24 4
gpt4 key购买 nike

我有一个关于“t”的目标函数,我想将它最小化,在这个函数中,有一个从 0 到 t 的积分,必须考虑进行优化。但是,我不知道如何将这个积分包含到我的目标函数中。我为此使用了 simpy 和 scipy 库,但它们似乎都不起作用。这是我的代码:

Cf= 100;
Cp=50;
Eta=72.66585511711865;
Beta=1.18609324
def R(t):
return math.exp(-t/Eta)**Beta
def f(t):
return (Beta/(Eta**Beta))*t**(Beta-1)*(math.exp(-t/Eta)**Beta)
def M(t):
return t*f(t)
import sympy as sp
from scipy import *
import scipy.integrate
t = sp.Symbol('t')
Mt=t*(Beta/(Eta**Beta))*t**(Beta-1)*(sp.exp(-t/Eta)**Beta);
intM=sp.integrate(Mt,t)
print(intM)
def C(t):
return (Cp*R(t)+Cf*(1-R(t)))/(t*R(t)+ intM)
from scipy.optimize import minimize_scalar
res = minimize_scalar(C)
res

这给了我错误“类型错误:无法确定关系的真值”。在 scipy.integrate.quad 中,我无法将上限定义为“t”。另一方面,当我尝试将 sp.integrate 输出放入目标函数时,它不会起作用。如果你能帮忙,我会很高兴。谢谢。

最佳答案

首先,您不能在优化例程中有一个不定积分,因为它被定义为一个常数。不是一个函数,而是一类函数。

但看起来你的是定积分 - 你将它积分到某个虚拟变量上,比如 t',从 t'=0 到 t'=t。所以这很好,您只需要这样做。

首先,让我们做定积分:

intM = sp.integrate(Mt, (t, 0, t))
# second arg is variable of integration, lower bound, upper bound
# we can skip defining tprime, a mathematician would hate you for this but meh

这仍然取决于t,所以现在让我们把它变成一个数值函数:

intM_func = sp.lambdify(t, intM)
# note how you can do intM_func(3) and get a number

然后将 intM_func(t) 而不是符号 intM 粘贴到您的 C 可最小化函数中,您应该可以开始了:)


适合我的完整版本:

Cf = 100
Cp = 50
Eta = 72.66585511711865
Beta = 1.18609324


def R(t):
return math.exp(-t / Eta) ** Beta


def f(t):
return (Beta / (Eta**Beta)) * t ** (Beta - 1) * (math.exp(-t / Eta) ** Beta)


def M(t):
return t * f(t)


import sympy as sp
from scipy import *
import scipy.integrate

t = sp.Symbol("t")
Mt = t * (Beta / (Eta**Beta)) * t ** (Beta - 1) * (sp.exp(-t / Eta) ** Beta)
intM = sp.integrate(Mt, (t, 0, t))
intMfunc = sp.lambdify(t, intM)
print(intM)


import numpy as np
def C(t):
if t == 0: # dodge a division-by-zero bullet
return np.inf
return (Cp * R(t) + Cf * (1 - R(t))) / (t * R(t) + intMfunc(t))


from scipy.optimize import minimize_scalar

res = minimize_scalar(C)
print(res)

然后我得到:

     fun: 1.5407809938973502
message: '\nOptimization terminated successfully;\nThe returned value satisfies the termination criteria\n(using xtol = 1.48e-08 )'
nfev: 61
nit: 28
success: True
x: 2964.8614509894874

作为输出。

关于python - 如何将不定积分放入目标函数 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72535067/

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