如何在Matlab中隐式求解单个方程?
用MATLAB求解M的以下方程:如何在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混淆。)不过,感谢你发布这篇文章,这
(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。对于感兴趣的项,这是超音速流的面积马赫数关系