2012-03-10 29 views
11

Tôi có một phương trình như:Yếu tố/collect biểu hiện trong Sympy

 R₂⋅V₁ + R₃⋅V₁ - R₃⋅V₂ 
i₁ = ───────────────────── 
    R₁⋅R₂ + R₁⋅R₃ + R₂⋅R₃ 

định nghĩa và tôi muốn chia nó thành yếu tố bao gồm chỉ biến duy nhất - trong trường hợp này V1 và V2.

Vì vậy, kết quả là tôi mong đợi

 -R₃      (R₂ + R₃) 
i₁ = V₂⋅───────────────────── + V₁⋅───────────────────── 
     R₁⋅R₂ + R₁⋅R₃ + R₂⋅R₃  R₁⋅R₂ + R₁⋅R₃ + R₂⋅R₃ 

Nhưng tốt nhất mà tôi có thể nhận được cho đến nay là

 -R₃⋅V₂ + V₁⋅(R₂ + R₃) 
i₁ = ───────────────────── 
    R₁⋅R₂ + R₁⋅R₃ + R₂⋅R₃ 

sử dụng equation.factor(V1,V2). Có một số tùy chọn khác để yếu tố hoặc phương pháp khác để tách các biến hơn nữa?

Trả lời

6

Nếu có thể loại trừ một thứ gì đó khỏi thuật toán nhân tố (mẫu số trong trường hợp này) thì sẽ dễ dàng. Tôi không biết một cách để làm điều này, vì vậy đây là một giải pháp thủ công:

In [1]: a 
Out[1]: 

r₁⋅v₁ + r₂⋅v₂ + r₃⋅v₂ 
───────────────────── 
r₁⋅r₂ + r₁⋅r₃ + r₂⋅r₃ 

In [2]: b,c = factor(a,v2).as_numer_denom() 

In [3]: b.args[0]/c + b.args[1]/c 
Out[3]: 

     r₁⋅v₁    v₂⋅(r₂ + r₃)  
───────────────────── + ───────────────────── 
r₁⋅r₂ + r₁⋅r₃ + r₂⋅r₃ r₁⋅r₂ + r₁⋅r₃ + r₂⋅r₃ 

Bạn cũng có thể nhìn vào đánh giá = tùy chọn False trong Add và Mul, để xây dựng những biểu hiện bằng tay. Tôi không biết một giải pháp tổng thể tốt đẹp.

Trong [3] có thể là danh sách hiểu nếu bạn có nhiều thuật ngữ.

Bạn cũng có thể kiểm tra xem có thể coi đây là đa thức đa biến trong v1 và v2 hay không. Nó có thể cung cấp một giải pháp tốt hơn.

3

Ở đây tôi có sympy 0.7.2 cài đặt và sympy.collect() công trình cho mục đích này:

import sympy 
i1 = (r2*v1 + r3*v1 - r3*v2)/(r1*r2 + r1*r3 + r2*r3) 

sympy.pretty_print(sympy.collect(i1, (v1, v2))) 

# -r3*v2 + v1*(r2 + r3) 
# --------------------- 
# r1*r2 + r1*r3 + r2*r3 
Các vấn đề liên quan