首先我有两个文件,让我们将它们称为fileA和fileB。
在fileB中,我有两个序列,可以将它们命名为initial和final。每个序列有正好32个值,其中大多数是简单的方程式,彼此之间略有不同,因此有32个唯一值。为简单起见,让我们将它们的范围缩小到5个。因此最初看起来像这样。
~fileB
T1 = 60
inital = [0.112, 0.233, 0.322*T1, 0.55*T1, 0.665*T1]
变量T1完全不改变,因此initial永久不变。第二个变量称为“最终” 最后我有:
T2 = 120
k_0 = T2**2 - T1**2
final = [x * k_0 for x in initial]
这给了我想要的最终值,并且给了我相同长度的序列。在fileA中,我想评估多个T2值的迭代器,并为每个相应的T2值获取一个“答案”。但是,由于我是新手,所以我限制自己,以便只为获得第一个最终价值而这样做。 现在进入fileA:
~fileA
import fileB
import math
answer = []
T2 = np.array(120,400,10)
x = symbols('x')
int1 = Integral(x**2 -1,x)
eq1 = int.doit()
for i in T2:
k = k_0*final[0]
answer.append(solve(eq1 - k, x))
这是棘手的地方,因为我希望它仅对第一个“最终”值进行评估
final[0]
但是我希望它重新评估两个变量
k_0 = T2**2 - T1**2
和
answer = []
在每个T2值处,如何执行此操作,以便可以制作如下所示的数组/表
T2 (header) Answer(header)
value_1 Value_1
value_2 Value_2
value_3 Value_3
value_4 Value_4
.... ....
如果您需要我更好地解释它,请随时提出问题。 如有必要,我会在anaconda发行版中使用python 3.6 / 3.7。
答案 0 :(得分:0)
好的,我的问题有点令人困惑,但是我想出了解决方法。 第一步是为T2而不是np数组编写列表推导,就像这样:
T2 = [20 + x*1.01 +273.15 for x in range(40)]
然后,我将想要求解的积分分配给一个变量,我们将其称为int1。
int1 = Integral((1-x)**-2,x)
然后我必须创建两个新的单独的空序列。
answer = []
X = []
对于第一个序列(答案),我执行了以下操作:
for i,temp in enumerate(t2):
k_0 = math.exp((ee/r)*((1/t1)-(1/t2[i])))
k = initial_k[0]*k_0
v_0 = 2
Fa_0 = 5
Ca_0 = Fa_0/v_0
Q = (k*Ca_0*V)/v_0
eq1 = int1.doit()
answer.append(solve(eq1 - Q,x))
这将给出我一直在寻找的数字答案,每个答案都作为一个序列返回,该序列位于序列内部。
answer = [[value1],[value2],[value3],[value4]]
这会在尝试在其他方程式或运算中使用数字答案时引起问题。
要解决此问题,我使用了与上述相同的技术,并将所有的数字浮点值返回到单个序列中
for i,val in enumerate(answer):
X.append(float(answer[i][0]))
这最终使我可以通过简单地将它们转移到不嵌套的新序列中来使用存储在answer []中的原始数字浮点值。
Ca = [(1-x)*Ca_0 for x in X]
Fa = [(1-x)*Fa_0 for x in X]
最后,我能够得到我本来想要的桌子!
Temperature Conversion Ca Fa
293.15 0.44358038322375287 1.3910490419406178 2.7820980838812357
303.15 0.44398389128120275 1.390040271796993 2.780080543593986
313.15 0.44436136324002395 1.38909659189994 2.77819318379988
323.15 0.4447152402068642 1.3882118994828396 2.7764237989656793
我不确定为什么我必须这样做,但是它确实有效,但是,对此有任何帮助或见解,我们将不胜感激。