Bagaimana cara memilah / mengekstrak kekuatan positif dan negatif sebagai daftar?
Aug 18 2020
Saya memiliki ekspresi berikut
expr = x1^d1 * x2^d2 * x3^d3;
dimana d1,d2,d3
dapat berisi nilai / ekspresi negatif yaitu secara umum ini d1,d2,d3
mungkin bukan nilai numerik. Mengatakan
d1 = 4 d;
d2 = -5 e;
d3 = -6 d;
with assumption d, e are positive.
Pertanyaan: Apakah ada cara untuk membuat dua daftar, satu berisi eksponen positif dan lainnya dengan eksponen negatif?
Percobaan saya saat ini adalah menggunakan Exponent
untuk masing-masing istilah ini dan mengujinya untuk positif dan negatif.
Jawaban
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
Anda juga dapat menggunakan Internal`SyntacticNegativeQ
dengan GeneralUtilities`SelectDiscard
, GroupBy
, Cases
, DeleteCases
, Select
atau Pick
sebagai berikut:
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}
semua memberi
{{-5 e, -6 d}, {4 d}}
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'