簡體   English   中英

向非線性方程組添加約束

[英]adding constraints to system of nonlinear equations

這是我關於stackoverflow的第一個問題。 對不起,如果它有點笨拙。

我正在嘗試解決描述層狀土壤中的梁的 static 平衡。 就作用在梁上的力而言,有一些外力,還有土壤對該力的反應。 行動和反應顯然必須平衡。 反作用力是來自不同層的土壤綜合力的總和。 土壤非線性響應為位移 function。 基本上,這種特殊的平衡是一個標量,因為它只是反應 = 行動的總和。

另一方面,梁內的內力也必須與作用在所討論的梁單元上的局部力相平衡。 假設我們有 40 個這樣的元素。 因此,簡而言之,我面臨的問題如下:

我需要找到 F1(x1,x2,...x40) 的根,其中 x1,x2...x40 描述了樁在土壤中的位移。 我通過了位移的初始猜測,然后 Fsolve 返回向量長度 40,它給出 F1 = [0,0...0].. 所以這基本上平衡了內力與梁上的局部力(實際上是曲率與力矩)。

問題是我似乎無法添加一個額外的約束,即我上面描述的全局平衡,因為這違反了 fsolve 中的條件,即 output 向量長度必須等於輸入向量長度。 我似乎無法在 Fsolve 中添加這樣的約束。 我還采用了可以添加約束的優化方式,但這不起作用,因為它優化了標量,並且不適用於向量根。

也許我只是錯過了一些愚蠢的事情,但是幾天來我徒勞地搜索了stackoverflow。 我可能可以用微分方程求解器來解決它,但如果我可以避免的話,我不想因為各種原因那樣 go 。 任何能給我一個新角度的東西都會有所幫助,全新的 python。 所以我非常感謝到目前為止我讀過的所有有用的解決方案,即使它並沒有讓我到達那里。

通常,我們有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

我經常使用這種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM