2013-06-21 4 views
1

잠시 동안 MATLAB 해결 함수로 문제를 해결했지만 기호 변수를 출력하는 순서를 결정하는 것처럼 보일 수 없습니다.MATLAB 해결 함수의 출력 순서

특히, 나는 동시에 풀고 싶은 방정식 시스템을 가지고 있습니다.

a = f(a, b, c, d) 
b = f(a, b, c, d) 
c = f(a, b, c, d) 
d = f(a, b, c, d) 

이 방정식은 기호이며 다른 기호 변수 (a, b, c 및 d 제외)가 있습니다. (따라서 솔루션 출력은 숫자가 아니지만 기호입니다).

예를 들어 거꾸로 된 스프링 진자에 대한 운동 방정식을 풀 때, 나는 phiDDot과 lenDDot에 의존하는 두 개의 방정식을가집니다. ddlen 행렬의 처음 기간에 대응한다 ddphi위한

[eom2, eom1] = solve(Lag(1)==0, Lag(2)==0, ddphi, ddlen); 

용액을, 출력 매트릭스의 두 번째 항에 해당 I는 phiDDot ​​및 lenDDot 별도로이 통화에 사용하기위한 해결하기 위해 해결 기능을 사용한다. MATLAB이 ddphi를 먼저 출력하고 ddlen을 두 번째로 출력하도록 지시하거나 출력 순서를 결정하는 방법이 있는지 궁금합니다. 변수의 순서를 알지 못하는 것은 4 개 이상의 변수를 풀 때 ode45를 사용하여 미분 방정식을 풀려고 할 때 큰 문제가됩니다.

조언이 도움이 될 것입니다 !!

답변

1

나는 방정식의 변수 이름의 ASCII 값을 기반으로 알파벳순으로 생각합니다. solve에 대한 documentation에 따라 sym/symvar은 출력 변수의 이름을 제공하지 않은 경우 수식을 구문 분석하는 데 사용됩니다. sym/symvar에 대한 도움말은 lexicographical order에 변수를 반환합니다. 즉, setdiff을 호출하여 알파벳순 (symvar은 똑같습니다. 그렇다고해도 그렇게하지 않습니다). solve.m의 실제 코드 (명령 창에 edit solve 입력)를보고 assignOutputs (R2012b의 190 행)이라는 하위 함수를 살펴보면 sort을 호출하고 이에 대한 설명이 있다는 것을 알 수 있습니다. 사전 식 순서.

R2012b (및 그 이전 일 가능성이 있음)에서는 설명서가 R2013a와 다른 점을 보였습니다. R2013a, this sentence is added에서 :

명시 적으로 독립 변수 vars을 지정하는 경우는, 다음 솔버는 솔루션을 반환하는 동일한 순서 를 사용합니다.

저는 여전히이 동작을 확인할 수 없으므로 R2012b를 실행하고 있습니다.