I want to clarify what I mean by "evaluation". My problem is not with expressions like:
A*B
As the result is trivial, and I get no error messages at that step. The problem is with more complicated expressions like:
(A*B).C; (A1*B1).(A2*B2);
(M1*M2).Inverse[M1*M2];
(A1*A2).PseudoInverse[A1*A2].(A1*A2);
Where the "dot" is not evaluated and I get this error message:
Product of nonscalar expressions encountered in __
I would greatly appreciate any suggestion on how to do this second set of operations.
As for the usefulness of this type of expressions, it is very hard to compute those expressions explicitly when the arrays are very big.
CASE STUDY: chemical analysis and sampling stages
A typical chemical analysis (like an ICP assay, i.e 30-40 chemical elements per assay) of many samples (> 10 samples):
EXAMPLE: let m[i] be the mass of the i-th sample, and a[i,j] the concentrations of the j-th element in the i-th sample. The mean composition of the samples (i.e. an estimate of the lot composition) would be the solution to something like:
aLOT[j]*mLOT== mSAMPLES[i].aSAMPLES[i,j]
So far, no problem, as mLOT is a scalar.
But if the samples were taken from a set of groups that are mixed together during sampling (i.e. the sampling increments that made the samples) then the system become something like:
mSAMPLES[i]*aSAMPLES[i,j] == nGROUPS[j,k].(mGROUPS[k]*aGROUPS[k,j])
The masses are known, and so the sample concentrations. The group concentrations are in principle unknown, but constrained (the concentrations of some groups are known or assumed) With more complicated sampling stages, the system becomes more and more complicated.
Solving it with with explicit arrays would be tough. I am hoping to solve the symbolic expression to get a simpler result where I could just replace the explicit arrays and then the data...