Scipy:最大化插值曲线之间的距离

时间:2015-12-06 07:14:00

标签: python numpy scipy interpolation mathematical-optimization

我有两条用scipy.interpolate.interp1d创建的插值曲线 - 如何计算最大化这两条曲线差异的x值?

以下是相关代码:

from scipy import interpolate

units =   [0.0, 1.0, 2.0 ,..., 49.0, 50.0]
revenue = [0.0, 1.2, 2.4 ,..., 79.1, 80.0]
cost =    [0.3, 0.6, 0.9 ,..., 14.7, 15.0] 

revenue_func = interpolate.interp1d(units,revenue,kind='cubic')
cost_func = interpolate.interp1d(units,cost,kind='linear')

我需要找到最大化revenue_func - cost_func的单位的价值。如果我可以将结果限制为单位的整数值,这将很容易,但我需要将单位视为0到50之间的连续值。

我很难接受这个,并且非常感谢任何建议 - 即使那些使用除了scipy之外的其他包装的建议

1 个答案:

答案 0 :(得分:2)

可能性是 scipy.optimize 包,其中包括最小化 minimize_scalar 功能。由于这些函数会搜索最小值而不是最大值,因此必须否定要最大化的函数。最大化收入 - 成本

import scipy.optimize as opt

negated_profit_func = lambda x : cost_func(x) - revenue_func(x)
result = opt.minimize_scalar(negated_profit_func, bounds = (0, 50), method = 'bounded')

print(result)