根据一个参数的变化给出多个输出的方程式
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 的大用户)
当前,您的代码正在为 Q
和 h
指定一个特定值,并且永远不会再更改该值。
解释:
在下面的代码中
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...
这是我的等式:
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 的大用户)
当前,您的代码正在为 Q
和 h
指定一个特定值,并且永远不会再更改该值。
解释:
在下面的代码中
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...