2017-03-12 52 views
5

मैं निम्नलिखित की तरह एक समीकरण प्रणाली है:प्रतीकात्मक समाधान

enter image description here

इस विशिष्ट प्रणाली के लिए, मुझे पता है कि एक nontrivial समाधान (रों) केवल मौजूद है यदि पी 1 == पी 2, जो

enter image description here है।

हालांकि, मैं सिम्पी का उपयोग कर सामान्य मामले में इसे कैसे निर्धारित कर सकता हूं?

इस उदाहरण के लिए, मेरी कार्यान्वयन इस प्रकार है:

from sympy import Matrix, symbols, pprint, lcm, latex 
from sympy.solvers import solve_linear_system 

top_matrix = Matrix.zeros(8,7) 
p1 = symbols("p1") 
p2 = symbols("p2") 

top_matrix[0,0] = 1 
top_matrix[0,1] = -1 

top_matrix[1,1] = (1-p1) 
top_matrix[1,2] = -1 

top_matrix[2,2] = 1 
top_matrix[2,4] = p2-1 

top_matrix[3,1] = p1 
top_matrix[3,3] = -1 

top_matrix[4,3] = 1 
top_matrix[4,4] = -p2 

top_matrix[5,4] = 1 
top_matrix[5,5] = -1 

top_matrix[6,1] = -1 
top_matrix[6,6] = 1 

top_matrix[7,4] = -1 
top_matrix[7,6] = 1 

pprint(top_matrix) 
vars = symbols("a1, a2, a3, a4, a5, a6, a7, a8") 
print solve_linear_system(top_matrix, *vars) 

परिणाम

None 

है अगर मैं सेट

p2 = p1 

परिणाम

{a1: -1, a5: -1, a2: -1, a6: -1, a3: p1 - 1, a4: -p1} 
है

क्या यह आवश्यकता स्वचालित रूप से खोजने का कोई तरीका है?

उत्तर

3

आपके उदाहरण कोड में, solve_linear_system एक संवर्द्धित प्रणाली की अपेक्षा करता है, यानी, यदि सही हाथ की ओर शून्य है, तो मैट्रिक्स को Matrix.zeros(8,8) के रूप में घोषित किया जाना चाहिए। इस संशोधन के साथ, अपने कोड पैदावार

{a3: 0, a1: 0, a5: 0, a7: 0, a6: 0, a2: 0, a4: 0} 

जो वास्तव में एक समाधान है,

इसे ठीक करने के हालांकि नहीं दिलचस्प एक है ..., एक स्पष्ट रूप से अनुरोध कर सकते हैं कि समाधान के एक घटक के लिए सामान्यीकृत किया जाना चाहिए , तो अगर आप की तरह कुछ करना कहते हैं, 1. निम्नलिखित:

from sympy import Matrix, symbols, pprint, lcm, latex, solve 

top_matrix = Matrix.zeros(8,7) 
p1,p2 = symbols("p1, p2") 

top_matrix[0,0] = 1 
top_matrix[0,1] = -1 

top_matrix[1,1] = (1-p1) 
top_matrix[1,2] = -1 

top_matrix[2,2] = 1 
top_matrix[2,4] = p2-1 

top_matrix[3,1] = p1 
top_matrix[3,3] = -1 

top_matrix[4,3] = 1 
top_matrix[4,4] = -p2 

top_matrix[5,4] = 1 
top_matrix[5,5] = -1 

top_matrix[6,1] = -1 
top_matrix[6,6] = -1 

top_matrix[7,4] = 1 
top_matrix[7,6] = 1 

pprint(top_matrix) 

a1,a2,a3,a4,a5,a6,a7 = list(symbols("a1, a2, a3, a4, a5, a6, a7")) 

B = Matrix([[1],[a2],[a3],[a4],[a5],[a6],[a7]]) 

C = top_matrix * B 

print(solve(C, (a2,a3,a4,a5,a6,a7,p1,p2))) 

और शेष चर के साथ ही मानकों p1,p2 के लिए हल, परिणाम है:

[{a2: 1, a7: -1, a4: p2, a6: 1, a5: 1, p1: p2, a3: -p2 + 1}] 

जो वास्तव में वांछित समाधान है।

4

ऐसा लगता है कि sympy व्यवहार करता है p1 और p2 रूप में गैर-बराबर, जिसका अर्थ है कि

top_matrix.nullspace() 

[]

कि है, मैट्रिक्स गुणांक top_matrix साथ homogeous प्रणाली कोई गैर है साधारण समाधान।

आपके पास दो विकल्प हैं, यहां। सबसे पहले वेक्टर bऔरp2 दोनों तत्वों के अज्ञात चर के रूप में समरूप चर के रूप में व्यवहार करना है, p1 को एक निश्चित पैरामीटर के रूप में इलाज करना।

b = sp.Matrix(sp.symbols('b1:8')) #import sympy as sp 
sp.solve(top_matrix*b, (*b,p2)) 
[{b1: 0, b2: 0, b3: 0, b4: 0, b5: 0, b6: 0, b7: 0}, 
{b1: b7, b2: b7, b3: b7*(-p1 + 1), b4: b7*p1, b5: b7, b6: b7, p2: p1}] 

नोट प्रणाली दो समाधान है। मामूली एक (मनमाना p2 के साथ), और एक गैर-तुच्छ वाला, जहां यह p2==p1 (मनमाने ढंग से b7 के साथ) रखता है।

दूसरा विकल्प यह महसूस करना है कि सिस्टम A*b=0 में एक गैर-तुच्छ समाधान है यदि सिस्टम A.T*A*b=0 में एक गैर-तुच्छ समाधान है। उत्तरार्द्ध संभव है यदि A.T*A का निर्धारक शून्य है।A.T*A की निर्धारक के बराबर होती है

(top_matrix.T * top_matrix).det().factor() 

6*(p1 - p2)**2

तुरंत खुलासा किया है कि यह आदेश एक गैर तुच्छ समाधान करने के लिए p1==p2 पकड़ चाहिए।

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