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