2015-04-09 17 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]) 

lợi nhuậntàu ngầm MATLAB(): Hành vi Strange

Gr1 = 

2*A + B 


Gr2 = 

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

Có cách nào để thuyết phục MATLAB để trở Gr2 = 2*A - B trong trường hợp thứ hai mà không cần cách giải quyết? Tôi có một biểu thức phức tạp hơn nhiều để thay thế, nhưng tôi không thể làm việc với hành vi subs() này. Cảm ơn.

+1

Giải pháp này có phù hợp với bạn không? 'Gr2 = subs (Gr, [c * (Ra^2 - Ri^2), -d * (Ra^4 - Ri^4)/2], [A, -B])' – Nemesis

+0

Thật không may là không. Tôi cần một cái gì đó mà không có một workaround, bởi vì biểu thức tôi muốn thay thế có một cái gì đó giống như B và -B trong nó. Tôi có thực sự phải sử dụng subs() với B và -B? Tôi không hiểu tại sao điều này không được thực hiện bởi Matlab tự động. – Thomas

+0

Tôi đã thử nghiệm nó trên Octave và tôi đã không nhận được như vậy beahviour – articuno

Trả lời

1

Tôi nghĩ vấn đề là trong các hoạt động nhân/bộ phận trong đối số thứ hai của subs kể từ khi vấn đề biến mất khi tôi sắp xếp lại các mã như sau:

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

và đầu ra là:

Gr1 = 
2*A + B 

Gr2 = 
2*A - B 
+0

Thú vị ... Theo đề xuất của @horchler, tôi sẽ báo cáo hành vi MATLAB đáng ngờ này cho MathWorks. – Thomas

Các vấn đề liên quan