用于 ODE 约束问题的伴随方法的不准确导数

计算科学 约束优化
2021-12-13 11:18:05

我有这个非常简单的 ODE 约束优化问题:

  1. h(x,x,p,t)=xA(p)xb(p)=0, 约束
  2. g(x(0))=x0, 不涉及参数的初始条件
  3. F=(XXobs)2dt, 目标方程

根据伴随方法,我需要

  1. 积分约束方程:

    x=A(p)x+b(p)

  2. 整合伴随方程和逆λt

    λ=A(p)Tλ(XXobs)

  3. 计算dFdp

    dFdp=λThpdt,
    自从
    fp=gp=0

但是对于参数只显示在b(p)项,伴随方法的导数与使用估计的导数不一致Fp直接,而其他参数的导数似乎还可以。

我认为这种不一致可能是由于参数b(p)不影响计算λ直接,即它没有出现在伴随方程中?但也有可能是我在编码时做错了。

有没有机构有类似的经历?谢谢!

2个回答

正如评论中所讨论的,方程对我来说看起来不错,除了缺少λ在伴随方程中。它应该读,

λ=A(p)Tλ(XXobs)

我假设失踪λ在原始帖子中是一个错字,否则您将向向量添加矩阵,因此您的代码甚至无法运行。

因为你还没有发布你的公式hp,那里可能有错误。它应该是,

hp=A(p)xb(p).

如果你忘记了b(p)术语在这里,它可能会导致您描述的问题。

否则,如果错误很大,则代码中可能存在错误。

如果误差很小,那么它可能是优化然后离散化与离散化然后优化的问题。仅当您使用 Galerkin 方法进行离散化时,这些操作才会通勤。您可以通过在空间和时间上使用非常查找离散化来检查这是否是问题,并查看梯度误差是否消失。

我使用人工参数运行模型,然后使用我的“伴随方法”代码来检索参数。我发现只要我分配了足够好的初始参数值,“伴随方法”代码确实会按预期给出导数。因此,我最初遇到的问题令人惊讶的是,直接估计有限差分的 dF/dp 不准确。这当然是因为我的模型方程的复杂性/不稳定性,这是一个非常危险的信号......无论如何,问题已经解决。谢谢大家!