TransWikia.com

How to filter out "relevant" information from expression

Mathematica Asked on April 5, 2021

I have an expression of the form

op = a3 b2 c1 d0 - a2 b3 c1 d0 - a3 b1 c2 d0 + a1 b3 c2 d0 + a2 b1 c3 d0 +...

that is, each term is of the form $a_i b_jc_kd_l$, where $i,j,k,lin{0,1,2,3}$. I would like to define a linear function that takes op and does the following:
$$
begin{align*}
P:
&quad a_0to a_0
&quad a_kto-a_k
&quad b_0to -b_0
&quad b_kto b_k
&quad c_0to c_0
&quad c_kto-c_k
&quad d_0to -d_0
&quad d_kto d_k.
end{align*}
$$

As an example:
$$begin{align*}
P(a_2 b_3 c_1 d_0+ a_0 b_3 c_2 d_1)&= (-a_2)b_3(-c_1)(-d_0)+a_0b_3(-c_2)d_1
&=-a_2 b_3 c_1 d_0-a_0b_3c_2d_1.
end{align*}$$

My problem is that I don’t know how to filter out the relevant information from a term, i.e. given a3 b2 c1 d0 I would first need {{a,3},{b,2},...}. One could then define $P$ for a tupel { , } via a switch statement or something like that…

One Answer

ClearAll["Global`*"]

What you want is greatly simplified if you use indexed variables. You can use Format to display the output of indexed variables in any desired manner.

(Format[#[n_]] := Subscript[#, n]) & /@ {a, b, c, d};

P[op_] := op /. {a[n_?Positive] :> -a[n], b[0] :> -b[0], 
   c[n_?Positive] :> -c[n], d[0] :> -d[0]}

op = a[3] b[2] c[1] d[0] - a[2] b[3] c[1] d[0] - a[3] b[1] c[2] d[0] + 
   a[1] b[3] c[2] d[0] + a[2] b[1] c[3] d[0];

P[op]

enter image description here

op2 = a[2] b[3] c[1] d[0] + a[0] b[3] c[2] d[1];

P[op2]

enter image description here

Correct answer by Bob Hanlon on April 5, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP