如何在Matlab中隐式求解单个方程?

如何在Matlab中隐式求解单个方程?,matlab,Matlab,用MATLAB求解M的以下方程: (Atemp/At)^2=1/M^2*((2/(gamma+1))*(1+(gamma-1)*M^2/2))^((gamma+1)/(gamma-1)) 用符号来解这个方程是不可能的。在Maple中,很容易隐式求解这样一个方程;现在,在Matlab中是否有一个预先制作的函数可以为我实现这一点?我可以自己编写一个,但由于我的技能有限,它的性能不适合我的需要。我会尝试使用,或者如果因为复杂值/无穷大而遇到问题。不要与F-Zero混淆。)不过,感谢你发布这篇文章,这

用MATLAB求解M的以下方程:

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

用符号来解这个方程是不可能的。在Maple中,很容易隐式求解这样一个方程;现在,在Matlab中是否有一个预先制作的函数可以为我实现这一点?我可以自己编写一个,但由于我的技能有限,它的性能不适合我的需要。

我会尝试使用,或者如果因为复杂值/无穷大而遇到问题。

不要与F-Zero混淆。

)不过,感谢你发布这篇文章,这个函数只给出了方程的根,而不是M的数值解。玩了很多SNES版本@Ingo:fzero和fminbnd都是数值解算器。我不确定我是否理解你的反对意见——你可以简单地重写等式,使其右边有一个零,是吗?马特是对的——你所要做的就是
f=@(m)(Atemp/At)^2-1/m^2*((2/(gamma+1))*(1+(gamma-1)*m^2/2()((gamma+1)/(gamma-1))
f0(f,M0)
其中
M0是一个初步猜测,或
fminbnd
(如果需要)。如果需要符号解决方案,则需要MATLAB符号工具箱,在这种情况下,只需使用
solve()
命令即可。事实上,如果
Atemp
At
gamma
是常量(如果为
M
求解,则为常量),你可以做一点代数运算,把你的方程简化为
log(M)=C1+C2*log(2+C3*M^2)
,其中C1、C2和C3是常数。然后可以使用
fminbnd
并限制
M
大于某个非零值,例如1e-6,以避免对数项中的0。对于感兴趣的项,这是超音速流的面积马赫数关系