2012-01-23 3 views
1

는 I 함수조작 수학적 함수

a = b/c 

을 가지고 있고 이러한 변수의 입력 2 사용자 요청 중 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 

을 나는이 세 개의 변수와 함수 알고 쉽게 t은 그래서 o if 문과 voil에 넣으십시오. 그러나 방정식이 많은 시스템 (예를 들어 제트 엔진)에 적용하고 싶습니다. 이전에 TkSolver을 사용했는데 정말 좋았습니다. 원하는만큼 방정식을 던졌습니다 (제트 엔진이 좋은 예입니다!). 알려진 양을 알려주고 몇 초 만에 모든 미지수를 계산 된 것입니다. (방정식의 한쪽에 알려진 양이 있고 다른 쪽이 알려지지 않은 경우에도 알려지지 않은 것으로 계산 되어도 계산이 가능합니다.)

MatLab 또는 아마도 Python에서이를 수행 할 수있는 방법이 있습니까? 내가 배우는거야?


질문에 대한 편집은 상징적 인 도구 상자를 사용하라고 지시 주셔서 감사합니다, 그것은 좋아요, 나는 또 다른 문제가 : 프로그램이 알려

내가있는 방법을 생각하지 수를 어느 변수가 입력됩니다. (예를 들어, C & A)

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

은 내가 지금 원하는 것은 사용자가 두 개의 과학적 이해를 입력시키는 하나의 방법이며, 코드는 알 수없는 변수로 인식하고 해결합니다 (예를 들어, 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 = 0 당신이 오른쪽에 제로가되도록 단순히 방정식을 다시 작성, 설정되지 않은 값에 a = b/c를 해결하려면, 의미

:,, :

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 (예 : 및 c = 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