该程序解释了描述连续反应中试剂浓度的方程 A->B->C->...
http://en.wikipedia.org/wiki/Rate_equation#Consecutive_reactions
该算法是我自己设计的,可以完全忽略求解微分方程以获得浓度函数的需要。它利用了仔细检查这些方程时出现的模式。
有效的代码使用浮点数,但它们处于劣势。当任意两个给定 n 值的速率常数 k_n 的值相似时,浮点数的不精确性就会出现,结果会淹没在误差放大的海洋中:
我认为将 float() 替换为 decimal() 应该可以解决此问题,但令我沮丧的是,这些更改导致了意外错误:
用小数()代替float()后:
Traceback (most recent call last):
File "conreact9.py", line 280, in <module>
exec(comm)
File "<string>", line 1, in <module>
File "conreact9.py", line 256, in graphit
p += plt.plot(t,eval(c_(i)),label= "c_" + str(i) + "(t)")
File "<string>", line 1, in <module>
File "C:\Python27\lib\decimal.py", line 658, in __new__
raise TypeError("Cannot convert %r to Decimal" % value)
TypeError: Cannot convert array([0, -0.1, -0.2, -0.3, -0.4, -0.5, -0.6, -0.7, -0
.8, -0.9, -1.0, -1.1,
-1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8, -1.9, -2.0, -2.1, -2.2,
-2.3, -2.4, -2.5, -2.6, -2.7, -2.8, -2.9, -3.0, -3.1, -3.2, -3.3,
-3.4, -3.5, -3.6, -3.7, -3.8, -3.9, -4.0, -4.1, -4.2, -4.3, -4.4,
-4.5, -4.6, -4.7, -4.8, -4.9], dtype=object) to Decimal
当我将 NumPy exp() 替换为十进制等效项时出现此错误:
Traceback (most recent call last):
File "conreact10.py", line 280, in <module>
exec(comm)
File "<string>", line 1, in <module>
File "conreact10.py", line 256, in graphit
p += plt.plot(t,eval(c_(i)),label= "c_" + str(i) + "(t)")
File "<string>", line 1, in <module>
AttributeError: exp
在十进制模块上使用谷歌或官方文档没有找到任何东西。
以下是未修改的代码供参考:
这是我修改它的尝试:
这也可能是我看不到的非常基本的东西。我是化学学院的学生,在编程方面我是新手(没有以前的背景)。非常感谢你。