繁体   English   中英

在MATLAB中求解大量不正确定义的非线性方程

[英]Solving large number of ill-defined non-linear equations in MATLAB

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

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

我的问题是,要了解效率,我需要出口气体参数(温度压力速度...),而出口参数又取决于效率。 我主要是通过一个称为EES(工程方程求解器)的软件解决了这个问题,该软件可以按任意顺序编写方程式,程序将其分组并自动求解。 由于程序限制,我改用Matlab,无法解决问题。

在matlab中,我首先以可解决的顺序将所有方程式写成一个函数,但需要两个出口参数来解决该问题。 将两个出口参数设置为函数的输入。 我使用两个基本方程(质量守恒和计算得出的损失)作为输出,正确的解决方案会将这些方程设置为零。 然后,我尝试使用fsolve解决此问题。

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

在这些方程中,有一些逻辑和if语句,我还使用流体参数库作为com-server,以便获得在变化的压力和温度下的气体参数。 这些都不允许从-inf到+ inf的输入,并且可能还存在一些不连续性……我想这可能是导致我出现问题的原因。

因此,我想这不是典型的编程问题。 我不知道代码本身会提供多少帮助。 如果您对解决此问题有任何想法,那将有很大帮助! 我也有一些具体的问题:

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

  2. 是否可以给出一个类似于fzero的范围来进行分解?

  3. 我试图将函数的结果向量设置为零向量,该结果向量的方程式变化很大,因此值变化很大。 方程之间的容错性也非常不同。 有一些聪明的方法来解决这个问题吗? 我只是将结果与不太精确的方程式相除,以减小该值。

  1. 您可以将方程式写为极小化问题,然后为不想发生的情况添加“软”惩罚,或者仅使用具有约束的非线性最小二乘法。
  2. 不,将fsolve()放在一边。 使用最小化求解器。
  3. 是。 使用非线性最小二乘法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM