1

Each element of my matrix is zero or has the form $k_1 a_{i,n} + k_2 b_{i,n}$. How can I replace all the $a_{i,n}$s by zero?

{{{0. - 0.000565035 Subscript[a, i, 1] + 0.00187682 Subscript[b, i, 1], 
   0. - 0.00176323 Subscript[a, i, 1] - 0.000565035 Subscript[b, i, 1]}, 
  {0., 0.}, 
  {0. - 0.00428076 Subscript[a, i, 3] - 0.00380882 Subscript[b, i, 3], 
   0. - 0.00421293 Subscript[a, i, 3] - 0.00428076 Subscript[b, i, 3]}}, 
 {{0., 0.}, 
  {0. + 0.00995524 Subscript[a, i, 2] + 0.00978341 Subscript[b, i, 2], 
   0. + 0.00932789 Subscript[a, i, 2] + 0.00995524 Subscript[b, i, 2]}, 
  {0., 0.}}, 
 {{-0.00428076 Subscript[a, i, 1] - 0.00380882 Subscript[b, i, 1], 
   -0.00421293 Subscript[a, i, 1] - 0.00428076 Subscript[b, i, 1]}, 
  {0., 0.}, 
  {0. - 0.00924663 Subscript[a, i, 3] - 0.0114643 Subscript[b, i, 3], 
   0. - 0.00745795 Subscript[a, i, 3] - 0.00924663 Subscript[b, i, 3]}}}
m_goldberg
  • 107,779
  • 16
  • 103
  • 257

2 Answers2

2

Try this:

m = {{{0. - 0.000565035 Subscript[a, i, 1] + 
     0.00187682 Subscript[b, i, 1], 
    0. - 0.00176323 Subscript[a, i, 1] - 
     0.000565035 Subscript[b, i, 1]}, {0., 
    0.}, {0. - 0.00428076 Subscript[a, i, 3] - 
     0.00380882 Subscript[b, i, 3], 
    0. - 0.00421293 Subscript[a, i, 3] - 
     0.00428076 Subscript[b, i, 3]}}, {{0., 
    0.}, {0. + 0.00995524 Subscript[a, i, 2] + 
     0.00978341 Subscript[b, i, 2], 
    0. + 0.00932789 Subscript[a, i, 2] + 
     0.00995524 Subscript[b, i, 2]}, {0., 
    0.}}, {{-0.00428076 Subscript[a, i, 1] - 
     0.00380882 Subscript[b, i, 1], -0.00421293 Subscript[a, i, 1] - 
     0.00428076 Subscript[b, i, 1]}, {0., 
    0.}, {0. - 0.00924663 Subscript[a, i, 3] - 
     0.0114643 Subscript[b, i, 3], 0. - 0.00745795 Subscript[a, i, 3],
     0.00924663 Subscript[b, i, 3]}}};

Then

m1=m /. Subscript[a, i, n_] -> 0;

MatrixForm[m1]

enter image description here

Have fun!

Alexei Boulbitch
  • 39,397
  • 2
  • 47
  • 96
0

It can sometimes be more efficient to make a definition upon Subscript itself, within Block if needed, if your data is large.

(* m from Alexei's answer *)
big = RandomChoice[m, 50000];

r1 = big /. Subscript[a, i, n_] -> 0;                 // RepeatedTiming

r2 = Block[{Subscript}, Subscript[a, i, _] = 0; big]; // RepeatedTiming

r1 === r2
{0.470, Null}

{0.27, Null}

True

Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371