Olumlu ve olumsuz güçler liste halinde nasıl ayrılır / çıkarılır?

Aug 18 2020

Aşağıdaki ifadeye sahibim

expr = x1^d1 * x2^d2 * x3^d3;

nerede d1,d2,d3negatif değerler / ifade içerebilir, yani genel olarak bunlar d1,d2,d3sayısal değerler olmayabilir. Söyle

d1 = 4 d;
d2 = -5 e;
d3 =  -6 d;
with assumption d, e are positive.

Soru: Biri pozitif üs ve diğeri negatif üs içeren iki liste yapmanın bir yolu var mı?

Şu anki denemem, Exponentbu terimlerin her biri için kullanmak ve onları pozitif ve negatif için test etmek.

Yanıtlar

3 BobHanlon Aug 18 2020 at 01:42
$Version

(* "12.1.1 for Mac OS X x86 (64-bit) (June 19, 2020)" *)

Clear["Global`*"]

expr = x1^d1*x2^d2*x3^d3;

exponents = 
 Cases[expr, x_^p_. :> p, 1] /. {d1 -> 4 d, d2 -> -5 e, d3 -> -6 d}

(* {4 d, -5 e, -6 d} *)

pos = Assuming[{d > 0, e > 0}, Select[exponents, Simplify[# > 0] &]]

(* {4 d} *)

neg = Assuming[{d > 0, e > 0}, Select[exponents, Simplify[# < 0] &]]

(* {-5 e, -6 d} *)
1 kglr Sep 02 2020 at 05:45

Ayrıca kullanabilirsiniz Internal`SyntacticNegativeQile GeneralUtilities`SelectDiscard, GroupBy, Cases, DeleteCases, Selectveya Pickaşağıdaki gibi:

expr = x1^d1*x2^d2*x3^d3
x1^(4 d) x2^(-5 e) x3^(-6 d)
exponents = Exponent[expr, {x1, x2, x3}]
{4 d, -5 e, -6 d}
{neg, pos} = GeneralUtilities`SelectDiscard[Internal`SyntacticNegativeQ] @ exponents

{neg, pos} = GroupBy[exponents, Internal`SyntacticNegativeQ] /@ {True, False}

{neg, pos} = Cases[#@_?Internal`SyntacticNegativeQ]@exponents & /@ 
   {Identity, Except}

{neg, pos} = DeleteCases[#@_?Internal`SyntacticNegativeQ] @ exponents & /@ 
   {Except, Identity}

{neg, pos} = Select[#@*Internal`SyntacticNegativeQ]@exponents & /@ 
   {Identity, Not}

{neg, pos} = Pick[exponents, 
    Internal`SyntacticNegativeQ /@ exponents, #] & /@ {True, False}

hepsi ver

 {{-5 e, -6 d}, {4 d}}