0

我有一个 Python 函数,它有参数Slope并且Distance它返回Cost. 坡度可以在 1 - 80 范围内。距离可以在 1 - 20000 范围内。成本可以是任何正数。

我想看看斜率、距离和成本之间的关系。显示这三个变量之间关系的最佳图是什么?我将如何创建它。例如,我想知道如果坡度上升和距离下降会发生什么成本?如果坡度和距离增加,成本会怎样?ETC...

def func(Slope, Distance):
     ...
     return cost


SlopeList = list(xrange(81))
DistanceList = list(xrange(20000)



myList= []
for Distance in DistanceList:
    for Slope in SlopeList:   
         cost = func(Slope, Distance)
         var = (Slope, Distance, Cost)
         append.myList(var)
4

1 回答 1

2

这个问题有点不清楚,所以我将尝试涵盖所有可能性:

a)如果您有两个变量的函数,例如func,并且您可以对两个变量的许多组合执行该函数,则可以使用matplotlib(可能)分别在 x 和 y 轴上绘制带有斜率和距离的等高线图,和成本显示为等高线。有关示例,请参见此处。

b) 如果您有以下功能:

Cost = func(Slope,Distance)

...并且您知道成本和其他两个变量之一的值,那么您可以:

b1) 再写两个函数(例如funcSlope(Cost,Distance)funcDistance(Slope,Cost)),从已知变量中产生未知变量,或者

b2)如果func您无法使用该函数,因此您不知道它是如何计算的,因此无法明确编写我为选项 1 建议的函数,或者很难通过func分析反演找到斜率或距离另外两个变量,您可以使用如下代码以数字方式找到未知变量:

def func(Slope,Distance):
    # Imagine that we didn't know the definition of this function
    # so we couldn't write funcSlope() explicitly
    return Slope * Distance**0.1234

def funcSlope(Cost,Distance,minSlope,maxSlope):
    def fs (Slope):
        return Cost - func(Slope,Distance)
    return scipy.optimize.brentq(fs, minSlope, maxSlope)

print (func(2,6))
print (funcSlope(2.4949,6,0,10))

...其输出为:

2.494904118641096
1.999996698357211

您会看到在调用时需要为未知变量指定边界brentq()

于 2013-03-13T05:37:56.400 回答