这是我关于stackoverflow的第一个问题。抱歉,这有点笨拙。
我正在尝试解决描述层状土壤中的梁的静态平衡问题。就作用在梁上的力而言,存在一些外力,并且土壤会对该力产生反作用。行动和反应显然必须平衡。反应是来自不同层上整合的土壤力的总和。土壤是位移的非线性响应。基本上,这个特定的平衡是标量,因为它只是反应=作用的总和。
另一方面,梁内的内力也必须与作用在所讨论梁元件上的局部力平衡。假设我们有40个这样的元素。因此,我简而言之面临的问题如下:
我需要找到F1(x1,x2,... x40)的根,其中x1,x2 ... x40描述桩在土壤中的位移。我通过并初步猜测了位移,Fsolve返回了向量长度40,得出F1 = [0,0 ... 0]。因此,这基本上平衡了内力与梁上的局部力(实际上是弯矩与弯矩)。
问题是我似乎无法添加一个额外的约束,即我上面描述的全局平衡,因为这违反了确定输出矢量长度必须等于输入矢量长度的条件。我似乎无法在Fsolve中添加这样的约束。我也采用了在哪里可以添加约束的优化方法,但这不起作用,因为它可以优化标量,并且不适用于矢量根。
也许我只是错过了一些愚蠢的东西,但是几天来我一直在徒劳地寻找stackoverflow。我可能可以用微分方程求解器解决它,但是如果可以避免的话,由于各种原因,我不想走那条路。任何给我一个新的角度都将有所帮助! 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
我经常使用这种方法。