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

时间:2016-05-31 12:57:55

标签: matlab constraints solver equation-solving nonlinear-functions

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

我正在使用直接刚度法在MATLAB中解决FEM问题。现在将问题表述为非线性方程组:

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

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

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

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

非线性形式的约10个等式约束(也可能是正弦曲线):

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

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

X(1) < 30\pi/180

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

1 个答案:

答案 0 :(得分:0)

在不太了解您的问题类型的情况下,您应该看看更具体的数学优化工具,您可以只编写一次“类似”约束,确定它们应用的维度,然后是语言相应地扩展它们。

对于非线性问题的求解器引擎,我建议IPOPT。它是免费的,并且有很好的表现。

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