【问题标题】:Constraining an expression in LMFIT to 0将 LMFIT 中的表达式约束为 0
【发布时间】:2021-11-18 21:24:57
【问题描述】:

我刚刚开始使用 LMFIT 解决恒动问题,并希望强制向量的点积为零。我已经定义了参数(向量分量)n0_xn0_yn0_za0_xa0_ya0_z 并赋予它们初始值。然后我定义参数:

param.add('a0dotn0',expr='n0_x*a0_x+n0_y*a0_y+n0_z*a0_z')

a0dotn0 被赋予初始向量a0n0 的点积值。如何强制执行a0dotn0 始终为零的约束?

【问题讨论】:

    标签: lmfit


    【解决方案1】:

    标准建议是提供一个完整的示例来展示您正在尝试做什么。否则,任何试图帮助您的人都必须猜测您在做什么,并且可能会弄错。

    如果你用类似的东西定义参数

    params = lmfit.Parameters()
    param.add('n0_x', 1.0)
    param.add('n0_y', 0.9)
    param.add('n0_z', 0.8)
    param.add('a0_x', 0.5)
    param.add('a0_y', 0.4)
    param.add('a0_z', 0.6)
    

    并希望这些值受到约束,以便n0_x*a0_x+n0_y*a0_y+n0_z*a0_z = 0 是更改要定义的参数之一以满足该约束的最简单方法,例如将最后一个参数定义替换为

    ##  a0_z = -(n0_x*a0_x + n0_y*a0_y)/n0_z
    param.add('a0_z', expr='-(n0_x*a0_x + n0_y*a0_y)/n0_z')
    
    

    您可能希望确保n0_z 不能为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2020-10-12
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多