【问题标题】:How can I implicitly solve a single equation in Matlab?如何在 Matlab 中隐式求解单个方程?
【发布时间】:2010-08-25 00:24:49
【问题描述】:

Matlab 求解以下方程:

(Atemp/At)^2=1/M^2*((2/(gamma+1))*(1+(gamma-1)*M^2/2))^((gamma+1)/(gamma-1))

无法以符号方式求解此方程。在 Maple 中,可以很容易地隐式求解这样的方程。现在,Matlab 中是否还有一个预制函数可以为我执行此操作?我可以自己编程,但由于我的技能有限,它的性能无法满足我的需求。

【问题讨论】:

  • 对于有兴趣的人来说,这是超音速流动的面积-马赫数关系

标签: matlab


【解决方案1】:

我会尝试使用fzero,或者如果由于复杂的值/无穷大而遇到问题,fminbnd

【讨论】:

  • 不要与 F-Zero 混淆。 :) en.wikipedia.org/wiki/F-Zero_(video_game)
  • 感谢您发布此信息,但是,此函数仅给出方程的根,而不是 M 的数值解。顺便说一下,真棒游戏:)。经常玩 SNES 版本!
  • @Ingo:fzero 和 fminbnd 都是数值求解器。我不确定我是否理解你的反对意见——你可以简单地将等式改写为右侧为零,是吗?
  • Matt 是对的——您所要做的就是f = @(M) (Atemp/At)^2 -1/M^2*((2/(gamma+1))*(1+(gamma-1)*M^2/2))^((gamma+1)/(gamma-1)))fzero(f,M0) 其中M0 是初步猜测,或者fminbnd 如果需要。如果您需要符号解决方案,则需要 MATLAB 符号工具箱,在这种情况下,只需使用 solve() 命令即可。
  • 事实上,如果AtempAtgamma 是常数(如果你正在求解M,它们就是常数),你可以做一点代数来减少log(M) = C1 + C2*log(2 + C3*M^2),其中 C1、C2 和 C3 是常数。然后,您可以使用 fminbnd 并将 M 限制为大于某个非零数,例如 1e-6,以避免在对数项中出现 0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多