How can I convert expression a1*u1+a2*u2+a3*u3
to the vector form of dot product A.U
, where A={a1,a2,a3}
and U={u1,u2,u3}
?
4 Answers
If you define :
expr=a1*u1 + a2*u2 + a3*u3;
aVec={a1, a2, a3};
then you can get
uVec=Coefficient[expr, aVec];
Dot[aVec, uVec]==expr
I think you may try
vec={u1,u2,u3};
covec=(Normal@CoefficientArrays[a1*u1+a2*u2+a3*u3,vec])//Last
{a1, a2, a3}
where we get
covec.vec
a1 u1 + a2 u2 + a3 u3
This also works for system of equations.
{const, coeff} = Normal@
CoefficientArrays[{
a + x - y - z == 0,
b + x + 2 y + z == 0
}, {x, y, z}];
coeff. {x, y, z} + const
{a + x - y - z, b + x + 2 y + z}
See the important matrix
MatrixForm[coeff]
$$\left( \begin{array}{ccc} 1 & -1 & -1 \\ 1 & 2 & 1 \\ \end{array} \right)$$
I'm not sure if this is the correct way to interpret your question, but here goes.
You can separate the components of (a1*u1 + a2*u2 + a3*u3)
into two vectors by the following:
vecs = Transpose[List @@@ (List @@ (a1*u1 + a2*u2 + a3*u3))]
{{a1, a2, a3}, {u1, u2, u3}}
The dot product can be formed:
Dot@@vecs
a1 u1 + a2 u2 + a3 u3
Another approach (similar to image_doctor's) uses replacement rules rather than Apply. Observe that the internal representation is
FullForm[a1*u1 + a2*u2 + a3*u3]
Plus[Times[a1,u1],Times[a2,u2],Times[a3,u3]]
If we were to change the "Times" to "List" and change "Plus" to "List" then we'd be almost there:
prod=a1*u1 + a2*u2 + a3*u3 //. {Times -> List, Plus -> List}
{{a1,u1},{a2,u2},{a3,u3}}
All we need do is pick out the a's and u's separately. So we could define:
a = prod[[All, 1]];
u = prod[[All, 2]];
Then Dot[a, u] gives the original product.