TransWikia.com

How to get the result in terms of a previously defined expression?

Mathematica Asked by Girardi on April 23, 2021

Say I have a vector

X[n_] := Table[Subscript[x, i], {i, 1, n}]

and a matrix of connections:

W[n_, w_, [Omega]_] := IdentityMatrix[n]*w + (1 - IdentityMatrix[n])*[Omega]

And I define the following expressions

v = X[10]
connections = W[10, w, [Omega]]
s = Total[v]

And now I want to calculate the sum of the matrix product Wv:

Collect[Total[connections.v], {[Omega], w}, FullSimplify]

This will output

w (x_1+x_2+x_3+x_4+x_5+x_6+x_7+x_8+x_9+x_10)+9 [Omega] (x_1+x_2+x_3+x_4+x_5+x_6+x_7+x_8+x_9+x_10)

However, I know that s=x_1+x_2+...+x_10
So how do I make Mathematica substitute the sum by s? Yielding

w s + 9 [Omega] s

One Answer

Try this

X[n_] := Table[Subscript[x, i], {i, 1, n}]
W[n_, w_, ω_] := IdentityMatrix[n]*w + (1 - IdentityMatrix[n])*ω
v = X[10];
connections = W[10, w, ω];
(*Carefully do NOT assign any value to s*)
Collect[Total[connections.v], {ω, w}, FullSimplify]//.Total[v]->s

which returns

s w+9 s ω

If you use a previously defined name then the whole model of Mathematica is to expand all definitions until it cannot expand them any more. There are always other ways of doing things and you can try to fight Mathematica and try to make it do things your way instead of its way, but you might want to consider whether it is worth the effort to do that. Up to you to decide.

Correct answer by Bill on April 23, 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