我有机会获得以下代码作为我之前问题的答案。
function [] = calc_third(varname_1, var_value_1, varname_2, var_value_2)
gamma = sym('gamma');
M1 = sym('M1');
TR = sym('TR');
eq = TR ==(((gamma - 1)*M1^2 + 2)*(2*gamma*M1^2 - gamma + 1))/(M1^2*(gamma + 1)^2);
subs_eq = (subs(eq,[sym(varname_1), sym(varname_2)],[var_value_1,var_value_2]));
missing_var = symvar(subs_eq)
solve(subs_eq,missing_var)
end
它应该在控制台中给出一个输出:
>>calc_third('gamma', 0.5, 'TR', 100)
missing_var =
M1
ans =
(2*2^(1/2))/(3*88609^(1/2) + 893)^(1/2)
相反,Matlab给了我以下错误:
>> calc_third('gamma',1.4,'TR',100)
missing_var =
Empty cell array: 0-by-1
Warning: List of equations is empty.
> In solve at 70
In calc_third at 13
ans =
[ empty sym ]
我在Matlab 7.12.0(R2011a)上,带有符号工具箱。我错过了什么?
答案 0 :(得分:0)
从其他用户的评论来看,symvar看起来无法识别R2011a中的剩余变量。这对于较新的Matlab来说不是问题,至少从R2013a开始,使用符号数学工具箱v5.10开始。