說我有一個功能操縱在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)]);
非常感謝,它的工作,但我有另一個問題,我想不出一種方法讓程序知道哪些變量輸入。我可以這樣做: 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
@Abdulhaq Elhouderi:我會馬上更新我的答案:) – tim
謝謝,您使用符號數學工具箱的建議對我有很大的幫助。我設法寫一個代碼,用戶**選擇**兩個已知變量。 – pythonista