Pyomo DAE工具箱无法正确区分域

时间:2017-08-18 15:41:42

标签: python pyomo

我正在使用Pyomo DAE工具箱来求解偏微分方程,并且一个自变量(比如m.x)的域长度非常小(如1e-6)。

在我看来,DAE工具箱不能适当地离散域,因为离散化的mx只有2个点(我使用了ContinuousSet.get_finite_elements()方法来检查),即使我在选项中指定了10个有限元点(参见代码)下文)。

m.x = ContinuousSet(bounds=(0, 1e-6))

disc=TransformationFactory('dae.finite_difference')
disc.apply_to(m, nfe=10, wrt=m.x, scheme='BACKWARD')

我将 m.x 的上限增加为

m.x = ContinuousSet(bounds=(0, 1e-5))

并试图再次离婚。这次我在x域中获得了10分。

然而,当我增加有限元点数

m.x = ContinuousSet(bounds=(0, 1e-5))
disc.apply_to(m, nfe=100, wrt=m.x, scheme='BACKWARD')

返回的离散域x仍然有10个点。

我想知道DAE工具箱是否存在1e-6容差或限制。如果有,我该如何自定义此值?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

是的,目前域名长度有限制。离散化转换目前将新的离散点转换为6个小数点。这是因为我看到了多次添加相同离散点的问题,因为浮点数略有不同。正如@QtotheC所提到的,最好的解决方案是修改你的缩放比例,使得ContinuousSet上的边界大约为(0,1)。

要包含的小数点数目前不是用户可以修改的选项,但您始终可以进入源代码并更改数字herehere