Python 用十进制替换浮点会导致错误

Python 用十进制替换浮点会导致错误,python,numpy,decimal,floating,floating-point-conversion,Python,Numpy,Decimal,Floating,Floating Point Conversion,该程序构造了描述连续反应A->B->C->中试剂浓度的时间方程 该算法是我自己设计的,可以完全忽略求解微分方程以获得浓度函数的需要。它利用了当人们仔细研究这些方程时出现的模式 有效的代码使用浮点数,但它们有一个缺点。当任意两个给定n值的速率常数k_n的值相似时,浮点数的不精确性就会出现,结果就会淹没在误差放大的海洋中: 我认为用decimal()替换float()应该可以解决这个问题,但令我沮丧的是,这些更改导致了意外的错误: 将float()替换为decimal()后: 回溯(最近一次呼叫

该程序构造了描述连续反应A->B->C->中试剂浓度的时间方程

该算法是我自己设计的,可以完全忽略求解微分方程以获得浓度函数的需要。它利用了当人们仔细研究这些方程时出现的模式

有效的代码使用浮点数,但它们有一个缺点。当任意两个给定n值的速率常数k_n的值相似时,浮点数的不精确性就会出现,结果就会淹没在误差放大的海洋中:

我认为用decimal()替换float()应该可以解决这个问题,但令我沮丧的是,这些更改导致了意外的错误:

将float()替换为decimal()后:

回溯(最近一次呼叫最后一次):
文件“conreact9.py”,第280行,在
行政主任(通讯)
文件“”,第1行,在
graphit中第256行的文件“conreact9.py”
p+=plt.plot(t,eval(c_u(i)),label=“c_u”+str(i)+(t)”
文件“”,第1行,在
文件“C:\Python27\lib\decimal.py”,第658行,新__
raise TypeError(“无法将%r转换为十进制”%value)
TypeError:无法转换数组([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],数据类型=对象)到十进制
当我将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
回溯(最近一次呼叫最后一次):
文件“conreact10.py”,第280行,在
行政主任(通讯)
文件“”,第1行,在
文件“conreact10.py”,第256行,在graphit中
p+=plt.plot(t,eval(c_u(i)),label=“c_u”+str(i)+(t)”
文件“”,第1行,在
属性错误:exp
没有发现任何使用谷歌或官方文档的十进制模块

以下是未触及的代码供参考:

下面是我试图修改它的尝试:


这可能是我看不到的最基本的东西。我是化学系的一名学生,在编程方面我是个新手(没有以前的背景)。非常感谢。

问题是用
Decimal.Decimal.exp()替换
numpy.exp()

并返回一个数组,其中e已提升到每个元素的幂:

>>> x = np.linspace(-2*np.pi, 2*np.pi, 100)
>>> xx = x + 1j * x[:, np.newaxis] # a + ib over complex plane
>>> out = np.exp(xx)
:


(示例取自上面链接的页面)。

问题在于用
Decimal.Decimal.exp()替换
numpy.exp()

并返回一个数组,其中e已提升到每个元素的幂:

>>> x = np.linspace(-2*np.pi, 2*np.pi, 100)
>>> xx = x + 1j * x[:, np.newaxis] # a + ib over complex plane
>>> out = np.exp(xx)
:


(示例取自上面链接的页面)。

请在问题中包含您的代码;不过最好是一个小的可复制的样本。代码有279行,我认为把它放在Pastebin比在我在这里做的更改前后粘贴代码要好得多。我不认为你可以拿出一个代码样本,期望它能工作。一切都是交织在一起的——用户提供起始条件,算法构建方程,matplotlib绘制它们。当然,我可以添加代码,但这将使我的初始帖子更加冗长。不,你的问题需要有用且可回答,而不需要依赖外部服务。Pastebin.com可能会倒闭,或者完全消失,但你在这里提出的问题仍然是可以回答的。这就是为什么我要求你们把它变成一个可复制的样品。找出如何在一个简短的代码片段中重现您的问题也将帮助您自己找出问题所在。我可以列出进行更改的行,但可以通过查找“float”()和“exp”()在代码的第一个版本中。正如我所说,我认为不可能删掉任何部分并期望它工作。这正是我必须开始编程来解决这个问题的原因-提供这么多的信息(建立方程是最费力的)手动将花费数天时间。请在问题中包含您的代码;不过最好是一个小的可复制样本。该代码有279行,我认为将其放在Pastebin比在我所做的更改之前和之后粘贴代码要好得多。我不认为您可以取出代码样本并期望它工作。一切都是集成的rtwined-用户提供起始条件,算法构建方程,matplotlib绘制它们。当然我可以添加代码,但这会使我的初始帖子更长。不,你的问题需要可用且可回答,而不依赖外部服务。Pastebin.com可能会关闭,或完全消失,但你的que这里的stion仍然可以回答。这就是为什么我要求您将其作为一个可复制的样本。找出如何在一个简短的片段中复制您的问题也将帮助您自己找出问题所在。我可以列出进行更改的行,但可以通过查找“float”()和“exp”()找到这些行在代码的第一个版本中。正如我所说,我认为不可能删掉任何部分并期望它工作。这正是我必须开始编程来解决这个问题的原因-手动提供这么多的信息(构建方程是最费力的)需要几天。
>>> decimal.Decimal(1).exp()
Decimal('2.718281828459045235360287471')