2015-04-09 22 views
5
syms Gr Ra Ri A B Gr1 Gr2 c d 
Gr = 2*c*(Ra^2 - Ri^2) - d*(Ra^4 - Ri^4)/2; 
Gr1 = subs(Gr, [c*(Ra^2 - Ri^2), -d*(Ra^4 - Ri^4)/2], [A, B]) 
Gr2 = subs(Gr, [c*(Ra^2 - Ri^2), d*(Ra^4 - Ri^4)/2], [A, B]) 

powracaMATLAB subs(): dziwne zachowanie

Gr1 = 

2*A + B 


Gr2 = 

2*A - (d*(Ra^4 - Ri^4))/2 

Czy istnieje sposób, aby przekonać do powrotu Gr2 = 2*A - B MATLAB w drugim przypadku bez obejścia? Mam bardziej złożone wyrażenie do zastąpienia, ale nie mogę pracować z tym zachowaniem subs(). Dzięki.

+1

Czy to rozwiązanie dla ciebie w porządku? 'Gr2 = subs (Gr, [c * (Ra^2 - Ri^2), -d * (Ra^4 - Ri^4)/2], [A, -B])' – Nemesis

+0

Niestety nie. Potrzebuję czegoś bez obejścia, ponieważ wyrażenie, które chcę zastąpić, ma w sobie coś takiego jak B i -B. Czy naprawdę muszę używać subs() z B i -B? Nie rozumiem, dlaczego Matlab nie robi tego automatycznie. – Thomas

+0

Testowałem to na Octave i nie dostałem takiego beahviour – articuno

Odpowiedz

1

Myślę, że problem tkwi w operacji mnożenia/Division w drugim argumencie subs ponieważ problem znika raz zmienić kod w następujący sposób:

syms Gr Ra Ri A B Gr1 Gr2 c d 
Gr = 2*c*(Ra^2 - Ri^2) - d*(Ra^4 - Ri^4)/2; 
Gr1 = subs(Gr, [(Ra^2 - Ri^2),(Ra^4 - Ri^4)], [A/c,-2*B/d]) 
Gr2 = subs(Gr, [(Ra^2 - Ri^2),(Ra^4 - Ri^4)], [A/c,2*B/d]) 

i wyjście jest:

Gr1 = 
2*A + B 

Gr2 = 
2*A - B 
+0

Interesujące ... Zgodnie z sugestią @horchlera, zgłoszę wątpliwe zachowanie MATLAB do MathWorks. – Thomas