首页 文章

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

提问于
浏览
0

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

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

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

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

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

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

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

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

  • 是否可以给fsolve一个范围,类似于fzero?

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

1 回答

  • 0
    • 您可以将方程编写为最小化问题,然后为您不希望发生的情况添加"Soft"惩罚,或者仅使用具有约束的非线性最小二乘法 .

    • 不,请留下 fsolve() . 使用最小化求解器 .

    • 是的 . 使用非线性最小二乘法 .

相关问题