我将尝试描述我的问题,但最后有一些具体问题。
我在解决 Matlab 中的涡轮机械问题时遇到了一些麻烦。目标是计算具有已知物理测量和运行条件的涡轮机的效率。为此,我使用科学论文中给出的方程式:http ://www.sciencedirect.com/science/article/pii/S0196890409003124
我的问题是,要知道效率,我需要出口气体参数(温度压力速度......),这又取决于效率。我主要在一个名为 EES(工程方程求解器)的软件中解决了这个问题,其中方程可以按任何顺序编写,程序将它们分组并自动求解。由于程序中的限制不允许我扩展问题,我切换到 Matlab。
在 matlab 中,我首先以可解的顺序将所有方程编写为函数,但解决问题所需的两个退出参数除外。两个退出参数被设置为函数的输入。我使用了两个基本方程(质量守恒和计算出的损失)作为输出,正确的解决方案会将这些方程设置为零。然后我尝试用 fsolve 解决这个问题。
这并没有真正解决,我找不到解决方案。现在我将问题(27)的所有方程都提供给matlab,并尝试以类似的方式解决它们。这也不好用。(“未找到解决方案。fsolve 停止,因为最后一步无效”)。
在方程中有一些逻辑和 if 语句,我还使用流体参数库作为 com-server,以获取不同压力和温度下的气体参数。这些都不允许从 -inf 到 +inf 的输入,并且可能还存在一些不连续性......我想这可能是我的问题的一个原因。
所以,我想这不是典型的编程问题。我不知道代码本身会有多大帮助。如果您对解决此问题的方法有任何想法,那将有很大帮助!我也有一些具体的问题:
是否有可能以某种方式向 fsolve 发送一个参数,告诉它某些方程超出范围?(在这种情况下,com-server 会发送错误消息,但我不知道如何自动使用它。)
是否可以给 fsolve 一个范围,类似于 fzero?
我试图将其设置为零向量的函数的结果向量具有来自非常不同的方程的结果,因此值变化很大。等式之间的误差容限也非常不同。有什么聪明的方法可以解决这个问题吗?我刚刚将结果与不太精确的方程相除以减少值。