【问题标题】:Pyomo DAE toolbox cannot discretize the domain appropriatelyPyomo DAE 工具箱无法适当地离散域
【发布时间】:2017-08-18 15:41:41
【问题描述】:

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

在我看来,DAE 工具箱无法适当地离散域,因为离散后的 m.x 只有 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 容差或限制。如果有,我该如何自定义这个值?

提前谢谢你!

【问题讨论】:

  • Bethany Nicholson 是最熟悉 Pyomo.DAE 的开发人员。您可能需要考虑扩展您的连续集,使其不受限制,因为您也可能会遇到求解器的问题。

标签: python pyomo


【解决方案1】:

是的,目前对域长度有限制。离散化变换当前将新的离散化点四舍五入到小数点后 6 位。这是因为我看到由于浮点舍入的细微差异而多次添加相同的离散化点的问题。正如@QtotheC 提到的,最好的解决方案是修改缩放比例,使 ContinuousSet 的边界在 (0,1) 左右。

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

【讨论】:

  • 谢谢!你的回答很有帮助!
猜你喜欢
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多