在matlab中求解大型约束线性和非线性方程组的最佳方法是什么



在MATLAB 中求解约束线性和非线性方程组

我正在MATLAB中使用直接刚度法解决一个有限元问题。这个问题现在被公式化为一个非线性方程组:

KU=F or CF=U with C = K^{-1}.

该问题用3-Dd表示,并且具有200多个节点。该模型被用作变形估计器,力始终是变形的输入和输出。所以有很多线性方程。现在这个问题需要扩展,需要实现两种类型的约束。某些节点必须受到约束,以便它们只能围绕给定点进行圆周运动。并且一些节点必须以最大变形量进行绑定。

总共会有数百个形式的方程形式的方程:

a_1 X(1) + a_2 X(2) + ... - F(1) = 0

大约10个非线性形式的等式约束,例如(也可以是正弦曲线):

X(1)^2 + X(2)^2 = L

和形式的10个不等式约束:

X(1) < 30pi/180

同时求解具有此类约束的非线性方程组的最佳方法是什么?是否可以使用fsolve?还是fmincon?我一直在研究求解器,但我找不到一个确切的结论,即什么求解器可以同时处理所有这些方程类型,以及在计算时间方面什么最有效。

在不了解太多问题类型的情况下,您应该看看更具体的数学优化工具,在这些工具中,您可以只编写一次"相似"约束,决定它们适用于哪些维度,然后语言相应地扩展它们。

对于非线性问题的求解引擎,我建议使用IPOPT。它是免费的,而且有非常好的表演。

对于建模工具,您可以选择专用的数学优化包,如GAMS或AMPL,或者现在越来越常见的将通用语言扩展到数学优化领域的库(在第二种情况下,我建议Pyomo用于Python,JuML用于Julia)

最新更新