2012-01-23 45 views
1

說我有一個功能操縱在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)) 

我現在想的是讓用戶輸入兩個的已知,的方式(例如ç& 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)]); 

回答

1

您可以使用此:http://www.mathworks.de/help/toolbox/symbolic/solve.html但你必須有符號數學工具箱(:

編輯:關於solve有文檔頁面的一個句子:

如果等式右邊爲0,則將左側指定爲符號表達式或字符串:

這意味着,如果你想解決a = b/c對於沒有設定值,只需重寫等式,以便有在右手側的零:,即a - b/c = 0,比你可以使用:

syms a b c 
% E.g. assign values to a and c and automatically let matlab chose the 'free' variable (in this case, it's b: 
a = input('Input var a: ') 
a = input('Input var c: ') 
solve(a - b/c) 

這比給你b(例如輸入a = 10c = 40給你b = a * c = 400)。輸入功能在這裏解釋:http://www.mathworks.de/help/techdoc/ref/input.html!希望有所幫助!

+0

非常感謝,它的工作,但我有另一個問題,我想不出一種方法讓程序知道哪些變量輸入。我可以這樣做: syms f a b c f = a * c - b%(我想寫a = b/c) c = 10; a = 5; X = eval(solve(f,b)) 我現在想要的是一種讓用戶輸入兩個知識(例如c&a)的方法,代碼將識別它們並解決未知變量(例如b) 。 *看看問題的編輯,代碼看起來更好。 – pythonista

+0

@Abdulhaq Elhouderi:我會馬上更新我的答案:) – tim

+1

謝謝,您使用符號數學工具箱的建議對我有很大的幫助。我設法寫一個代碼,用戶**選擇**兩個已知變量。 – pythonista

相關問題