为非线性方程组增加约束条件

问题描述 投票:-1回答:1

这是我关于stackoverflow的第一个问题。抱歉,这有点笨拙。

我正在尝试解决描述层状土壤中的梁的静态平衡问题。就作用在梁上的力而言,存在一些外力,并且土壤会对该力产生反作用。行动和反应显然必须平衡。反应是来自不同层上整合的土壤力的总和。土壤是位移的非线性响应。基本上,这个特定的平衡是标量,因为它只是反应=作用的总和。

另一方面,梁内的内力也必须与作用在所讨论梁元件上的局部力平衡。假设我们有40个这样的元素。因此,我简而言之面临的问题如下:

我需要找到F1(x1,x2,... x40)的根,其中x1,x2 ... x40描述桩在土壤中的位移。我通过并初步猜测了位移,Fsolve返回了向量长度40,得出F1 = [0,0 ... 0]。因此,这基本上平衡了内力与梁上的局部力(实际上是弯矩与弯矩)。

问题是我似乎无法添加一个额外的约束,即我上面描述的全局平衡,因为这违反了确定输出矢量长度必须等于输入矢量长度的条件。我似乎无法在Fsolve中添加这样的约束。我也采用了在哪里可以添加约束的优化方法,但这不起作用,因为它可以优化标量,并且不适用于矢量根。

也许我只是错过了一些愚蠢的东西,但是几天来我一直在徒劳地寻找stackoverflow。我可能可以用微分方程求解器解决它,但是如果可以避免的话,由于各种原因,我不想走那条路。任何给我一个新的角度都将有所帮助! python的新手,所以我非常感谢到目前为止所读的所有有用的解决方案,即使它并不能使我到那里。

python nonlinear-optimization nonlinear-functions
1个回答
0
投票

通常,我们有n个方程和n个变量,即平方系统。如果解决方案不是唯一的,则意味着您的方程式不是独立的。添加其他约束时,您不再可以使用方形系统求解器。但是,很有可能使用非线性优化求解器。例如。我们可以写:

 min 0
 subject to 
      F(x) = 0   (n equations) 
      G(x) = 0   (additional constraints)

如果您想要一个接近的解决方案,则可以添加松弛部分并最小化平方误差的总和:

 min ||s|| + ||t||
 F(x) = s
 G(x) = t

我经常使用这种方法。

© www.soinside.com 2019 - 2024. All rights reserved.