2011-06-02 19 views
6

में "स्मार्ट" प्रतिस्थापन पर प्रश्न गणित को इस प्रतिस्थापन को स्मार्ट तरीके से करने के लिए कैसे कहूं? (या कैसे मैं क्या चाहते करने के लिए mathematica कह पर मैं होशियार मिलता है)गणित

expr = b + c d + ec + 2 a; 
expr /. a + b :> 1 

Out = 2 a + b + c d + ec 

मैं जवाब a + cd + ec + 1 होने की उम्मीद। और इससे पहले कि कोई सुझाव देता है, मैं a :> 1 - b नहीं करना चाहता, क्योंकि सौंदर्य उद्देश्यों के लिए, a+b = 1 सरलीकरण को तब तक मेरे समीकरण में a और b दोनों रखना चाहते हैं।


इसके अलावा, मैं इसे कैसे क्रमशः और इसके विपरीत a या -a साथ 1-b, -b+1 या -1+b, b-1 के सभी उदाहरणों को बदलने के लिए मिलता है?

expr = b + c (1 - a) + (-1 + b)(a - 1) + (1 -a -b) d + 2 a 
+3

'Replace' की जगह subexpressions संरचनात्मक समकक्ष के आधार पर ('पूर्णफॉर्म' देखें), यह नहीं करता है कोई बीजगणितीय हेरफेर प्रदर्शन नहीं करते हैं। आप 'Reduce' का उपयोग करने का प्रयास कर सकते हैं, जो इन मामलों के लिए डिज़ाइन किया गया है। हालांकि मैं अब इसका परीक्षण नहीं कर सकता। –

+5

अभिव्यक्ति आमतौर पर बहुपद होने पर पॉलिनोमायरेडियड में देखना चाहती है। –

उत्तर

17

आप FullSimplify लिए अपने स्वयं के परिवर्तनों की आपूर्ति करके FullSimplify का अनुकूलित संस्करण का उपयोग करें और यह विवरण यह पता लगाने कर सकते हैं:

In[1]:= MySimplify[expr_,equivs_]:= FullSimplify[expr, 
      TransformationFunctions -> 
      Prepend[ 
       Function[x,x-#]&/@[email protected][{#,-#}&,equivs/.Equal->Subtract], 
       Automatic 
      ] 
     ] 
In[2]:= MySimplify[2a+b+c*d+e*c, {a+b==1}] 
Out[2]= a + c(d + e) + 1 

equivs/.Equal->Subtract बदल जाता है

यहाँ इस हिस्से के लिए एक उदाहरण है शून्य के बराबर अभिव्यक्तियों में समीकरण दिए गए हैं (उदाहरण के लिए a+b==1 ->a+b-1)। [email protected][{#,-#}&, ] तब भी नकारात्मक संस्करणों का निर्माण करता है और उन्हें एक सूची में फ़्लैट करता है। Function[x,x-#]& /@ शून्य अभिव्यक्तियों को फ़ंक्शंस में बदल देता है, जो शून्य अभिव्यक्तियों को घटाता है (#) जिसे बाद में उन्हें दिया गया है (x) FullSimplify द्वारा।

यह अपनी खुद की FullSimplify के लिए, भी, अगर FullSimplify के डिफ़ॉल्ट ComplexityFunction (जो मोटे तौर पर LeafCount के बराबर है), जैसे से सरल अलग है की अपने विचार ComplexityFunction निर्दिष्ट करने के लिए आवश्यक हो सकता है:

MySimplify[expr_, equivs_] := FullSimplify[expr, 
    TransformationFunctions -> 
    Prepend[ 
     Function[x,x-#]&/@[email protected][{#,-#}&,equivs/.Equal->Subtract], 
     Automatic 
    ], 
    ComplexityFunction -> (
    1000 LeafCount[#] + 
    Composition[ 
     Total,Flatten,Map[ArrayDepth[#]#&,#]&,CoefficientArrays 
    ][#] & 
) 
] 

में अपने उदाहरण के मामले में, डिफ़ॉल्ट ComplexityFunction ठीक काम करता है, हालांकि।

+0

वाह धन्यवाद। इससे पहले कि मैं इसे पूरी तरह से समझूं, मुझे थोड़ा सा समय लगेगा। –

+1

+1, निर्माण 'फंक्शन [एक्स, एक्स - #] और' अकेले के लिए। मैं गलत धारणा के तहत था जो काम नहीं करेगा, इसलिए ऐसा लगता है कि मुझे अपनी कुछ मान्यताओं का पुनर्मूल्यांकन करने की आवश्यकता है। फंक्शन और स्पष्ट स्पष्टीकरण के लिए – rcollyer

+0

+1। इसके साथ ही, मुझे इसे पूरी तरह से समझने में कुछ मिनट लग गए। –

3

पहले मामले के लिए, आप सोच सकते हैं:

expr = b + c d + ec + 2 a 

PolynomialReduce[expr, {a + b - 1}, {b, a}][[2]] 

दूसरे मामले के लिए, पर विचार करें:

expr = b + c (1 - a) + (-1 + b) (a - 1) + (1 - a - b) d + 2 a; 

PolynomialReduce[expr, {x + b - 1}][[2]] 

(% /. x -> 1 - b) == expr // Simplify 

और:

PolynomialReduce[expr, {a + b - 1}][[2]] 

Simplify[% == expr /. a -> 1 - b]