说我有一个功能
a = b / c
我要求用户输入其中两个变量,b和a或c和a,我希望它能够计算未知变量而无需为每个变量编写函数
在这种情况下,我会使用:
pseudo-code
if input is a & b
then c = b / a
if input is a & c
then b = a * c
if input is b & c
then a = b / c
我知道这是一个只有三个变量的函数,所以很容易将它放在一个if语句中,但是我想把它应用到一个包含很多方程的系统(例如喷气发动机)。我之前使用过TkSolver并且它真的很棒,你可以在它上面输出任意数量的方程式(喷射引擎就是一个例子!),你只需要提供一些已知的数量,并在几秒钟内,所有未知数都被计算出来(即使我在等式的一边有一个已知的数量,而另一边的未知数量与已知数量相混合,它将进行数学运算!)
那么,有没有办法在MatLab或者我正在学习的python中做到这一点?
编辑问题,感谢指导我使用符号工具箱,这很好,我还有另一个问题:
我想不出让程序知道输入了哪些变量的方法。我可以这样做:
syms f a b c
f = a * c - b %(I want to write a = b / c)
c = 10; a = 5;
X = eval(solve(f,b))
我现在想要的是一种让用户输入两个知识的方法(例如c& a),代码将识别它们并解决未知变量(例如b)。
编辑2:我设法得到我想要的东西,它有点长,可能还有另一种方法可以达到同样的目的。
clear, clc
syms a b c
var = [{'a'}, {'b'}, {'c'}];
var1n = 0;
var2n = 0;
while isvarname(var1n) == 0
var1n = input('Which variable is known: ','s');
while ( any( strcmpi(var1n,var) ) )== 0
fprintf('\nThe variable entered is wrong, please enter a, b, or c')
var1n = input('\nWhich variable is known: ', 's');
end
end
fprintf('\nPlease enter the value of %s', var1n)
var1v = input(': ');
eval([var1n '=' num2str(var1v)]);
while isvarname(var2n) == 0
var2n = input('What is the second known variable: ', 's');
while ( any( strcmpi(var2n,var) ) ) == 0
fprintf('\nThe variable entered is wrong, please enter a, b, or c')
var2n = input('\nWhat is the second known variable: ', 's');
end
end
fprintf('\nPlease enter the value of %s', var2n)
var2v = input(': ');
eval([var2n '=' num2str(var2v)]);
var3n = char ( var ( find( strcmpi(var1n, var) == strcmpi(var2n, var) ) ) );
var3v = solve(a - b / c);
eval([var3n '=' char(var3v)]);