sympy

2016-01-05 10 views
6

में मैट्रिक्स अभिव्यक्ति का विस्तार कैसे करें हाय मैं मैट्रिक्स गुणा करने की कोशिश कर रहा हूं और इसे बाद में विस्तारित कर रहा हूं। हालांकि, sympy मैट्रिक्स समीकरणों के विस्तार का समर्थन नहीं करता है। उदाहरण के लिए मैट्रिक्स के लिए Runge-Kutta 4:sympy

from sympy import init_session 
init_session() 
from sympy import * 

A = MatrixSymbol('A', 3, 3) 
x = MatrixSymbol('x', 3, 1) 
dt = symbols('dt') 

k1 = A*x 
k2 = A*(x + S(1)/2*k1*dt) 
k3 = A*(x + S(1)/2*k2*dt) 
k4 = A*(x + k3*dt) 
final = dt*S(1)/6*(k1 + 2*k2 + 2*k3 + k4) 
final.expand() 

परिणाम के साथ

Traceback (most recent call last) 
<ipython-input-38-b3ff67883c61> in <module>() 
    12 final = dt*1/6*(k1+2*k2+2*k3+k4) 
    13 
---> 14 final.expand() 

AttributeError: 'MatMul' object has no attribute 'expand' 

मुझे आशा है कि अभिव्यक्ति सिर्फ अदिश संस्करण की तरह विस्तारित किया जा सकता:

A,x,dt = symbols('A x dt') 
k1 = A*x 
k2 = A*(x+k1*dt*S(1)/2) 
k3 = A*(x+k2*dt*S(1)/2) 
k4 = A*(x+k3*dt) 
final = x+dt*(S(1)/6)*(k1+k2+k3+k4) 
collect(expand((final)),x) 
परिणाम के साथ

:

x*(A**4*dt**4/24 + A**3*dt**3/8 + A**2*dt**2/3 + 2*A*dt/3 + 1) 

क्या मैट्रिक्स अभिव्यक्ति को भी बदलना संभव है?

निकोगुआरो का जवाब त्रुटि लेता है, लेकिन पूरी अभिव्यक्ति को एक मैट्रिक्स में फैलाता है। जैसा कि स्केलर उदाहरण के साथ सचित्र है, मैं

+0

से नीचे अतिरिक्त पंक्ति देखें, इसे काम करना चाहिए। मैंने https://github.com/sympy/sympy/issues/10360 खोला। – asmeurer

उत्तर

0

पर विचार नहीं करता हूं, मुझे लगता है कि आप मैट्रिक्स अभिव्यक्तियों का विस्तार कर सकते हैं। लेकिन आपके पास एक मैट्रिक्स नहीं है लेकिन दो प्रतीकात्मक matrices (Matsymbols) के गुणा है। यदि आप अपनी अभिव्यक्ति को मैट्रिक्स में बदल देते हैं तो आप जो विस्तार चाहते हैं उसे प्राप्त कर सकते हैं।

from sympy import init_session 
init_session() 
from sympy import * 

A = MatrixSymbol('A', 3, 3) 
x = MatrixSymbol('x', 3, 1) 
dt = symbols('dt') 

k1 = A*x 
k2 = A*(x + S(1)/2*k1*dt) 
k3 = A*(x + S(1)/2*k2*dt) 
k4 = A*(x + k3*dt) 
final = dt*S(1)/6*(k1 + k2 + k3 + k4) 
Matrix(final).expand() 
+0

आपके उत्तर के लिए धन्यवाद !, यह वास्तव में कोई त्रुटि नहीं देता है, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं, मुझे उम्मीद है कि अभिव्यक्ति को सरल, विस्तारित और स्केलर संस्करण के रूप में एकत्रित किया जा सकता है (मैंने स्केलर जोड़ा है प्रश्न के लिए संस्करण) –

संबंधित मुद्दे