Скажем, у меня есть функцияманипулируя математические функции в MATLAB или любом другом языке
a = b/c
и я прошу, чтобы пользователь ввел два из этих переменных, либо б и или с и и я хочу, чтобы вычислить неизвестная переменная без необходимости писать функции для каждой переменной
в этом случае я хотел бы использовать:
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
Я знаю, что это функция только три переменных, так что легко т o поставьте его в if-statement и voilà, но я хочу применить его к системе, содержащей множество уравнений (например, реактивный двигатель). Раньше я использовал TkSolver, и это было действительно здорово, вы выбрасываете столько уравнений, сколько хотите (реактивный двигатель был примером!), Вам нужно всего лишь указать количество известных величин, и через несколько секунд все неизвестные (даже если у меня была известная величина в одной стороне уравнения и неизвестна на другой стороне, смешанной с известными, она будет делать математику!)
Итак, есть ли способ сделать это в MatLab или, возможно, на python который я изучаю?
Edit на вопрос, спасибо за направление мне использовать Символическое набор инструментов, это здорово, у меня есть еще одна проблема:
Я не мог придумать способ, чтобы программа могла знать, какая из переменные введены. Я могу это сделать:
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))
То, что я хочу сейчас, это способ позволить пользователю ввести два knowns (например с & а) и код будет распознавать их и решить к неизвестной переменной (например б).
Edit 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