根据一个参数的变化给出多个输出的方程式

Equation to give a number of outputs based on change of one paramater

这是我的等式:

import math 
import pandas as pd
import numpy as np

ha = 8.14
k = 0.0187
Do = 0.1738
Di = 0.0138
L = 3
F = 20 
Ta = 293
Ts = 113
pi = 3.14159265

Q = (pi*(Ta-Ts))/(((1/ha*Do))+(1/(2*k))*math.log(Do/Di)) * L

h = (Q*3600)/F

基本上,我想要 F = np.arange(20,100,10)

时的输出

这可能吗?

我试过了

 a = np.arange(20,100,10)
 F = 20 + i 
 for i in range(a):
    print h

不确定为什么这不起作用?

有什么想法吗?

您需要定义一个接受参数的函数。然后您可以根据一组参数调用该函数。下面我将向您展示一个带有 sin(x) 函数的示例,因为我相信您可以弄清楚如何根据您的需要调整它

import math

points = np.arange(20, 100, 10)

def sine(x, a=1.0, b=2.0):
    return a*math.sin(b*x)

for i in points:
    print(sine(i,b=i), end=" ")

-0.8509193596391765 0.9978032744219705 -0.8012247906768953 -0.6501275235748956 -0.2620839590180966 -0.7736233386803075 -0.5444763096196569 0.8272184413093554 

这将使用各种参数 b 调用您的 sin 函数,并将在不同的点进行计算 x

你这样做的方式应该总是打印出完全相同的数字。因为你已经计算了一切。你在任何地方都没有函数,将它全部放在 for 循环中不会自动改变任何东西。

除非是我不知道的 pandas 解释器中的某些魔法。 (抱歉,我不是 pandas 的大用户)

当前,您的代码正在为 Qh 指定一个特定值,并且永远不会再更改该值。

解释:

在下面的代码中

Q = 4
W = Q

print(Q)
print(W)

你说的是:name Q指的是值4,name W指的是Q当前值(即4,不管 Q 以后是否改变)。

如果你输入Q = 10,W不会改变:

Q = 10

print(Q)
print(W)

因此您需要每次调用时都会计算的函数:

def Q():
    return (pi*(Ta-Ts))/(((1/ha*Do))+(1/(2*k))*math.log(Do/Di)) * L


def h():    
    return (Q()*3600)/F    


for i in np.arange(20,100,10):
    F = 20 + i
    print h()

上面的解释有点过于简单,所以你可能想检查这个link

当你使用numpy时,你应该尽量不要使用显式循环,因为numpy的主要优点是以编译语言的速度隐式执行循环。

来到我们的问题,简直就是

F = np.arange(20,100,10) 
h = Q*3600/F
print h

我将数组 F 用作普通的 Python 变量,这取决于 numpy 魔术来识别循环的必要性。

请记住:您可以在表达式中使用 numpy 的数组,就像使用标量一样,as far as your usage is a sensible one、Python 将计算数组 zed 结果。


旁注 使用 np.pi 而不是 3.14159...