用matlab或任何其他语言操纵数学函数

时间:2012-01-23 23:59:58

标签: matlab

说我有一个功能

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)]);

0 个答案:

没有答案