在MATLAB中求解大量不明确的非线性方程

时间:2012-05-31 12:18:08

标签: matlab com logic nonlinear-functions

我会尝试描述我的问题,但最后会有一些具体的问题。

我在解决Matlab中的涡轮机械问题时遇到了一些麻烦。目标是用已知的物理测量和操作条件计算涡轮机的效率。为此,我使用科学论文中给出的等式:http://www.sciencedirect.com/science/article/pii/S0196890409003124

我的问题是,要知道效率,我需要出口气体参数(温度压力速度......),而这又取决于效率。我主要在一个名为EES(工程方程求解器)的软件中解决了这个问题,其中方程可以按照任何顺序编写,程序将它们分组并自动解决它们。由于程序中的限制,我切换到Matlab,这不允许我扩展问题。

在matlab中,我开始将所有方程式作为一个函数以可解的顺序编写,除了解决问题所需的两个退出参数。两个退出参数被设置为函数的输入。我使用两个基本方程(质量守恒和计算的损失)作为输出,其中正确的解将这些方程设置为零。然后我尝试用fsolve解决这个问题。

这没有真正解决,我找不到解决方案。现在我给matlab提供问题的所有方程(27),并尝试以类似的方式解决它们。这也不太好用。 (“没有找到解决方案。因为最后一步无效,所以fsolve停止了”)。

在这些方程式中有一些逻辑和if语句,我也使用流体参数库作为com服务器,以获得不同压力和温度下的气体参数。这些都不允许从-inf到+ inf的输入,也可能存在一些不连续性...我想这可能是我的问题的原因。

所以,我想这不是典型的编程问题。我不知道代码本身会有多大帮助。如果你有任何解决这个问题的方法,那将会有很大的帮助!我也有一些具体的问题:

  1. 是否有可能以某种方式向fsolve发送参数,告诉它某些方程式是否超出范围? (在这种情况下,com服务器发送错误消息,但我不知道如何自动使用它。)

  2. 是否有可能给fsolve一个范围,类似于fzero?

  3. 函数的结果向量,我试图设置为零向量,其结果来自非常变化的方程,因此值变化很大。方程之间的误差容差也是非常不同的。有一些聪明的方法来处理这个?我刚刚将结果与不太精确的公式进行了划分,以减少该值。

1 个答案:

答案 0 :(得分:0)

  1. 您可以将方程编写为最小化问题,然后添加" Soft"惩罚你不想发生的情况或只是使用有限制的非线性最小二乘。
  2. 不,将fsolve()放在一边。使用最小化求解器。
  3. 是。使用非线性最小二乘法。