Jonathan Leto jaleto at gmail.com
Sun Feb 24 15:14:17 PST 2008

```Howdy Folks,

[snip]
>  Note that even with mathematical abstractions, there are cases
>  do something like this:
>
>     my \$x = Math::Symbolic->new();
>     print +( \$x**2 + 4 * \$x + 3 )->derivative( \$x );
>
>  I hope it?s obvious how such a thing would me implemented. Now,
>  expressions cannot yield the same result:
>
>     ( 2 / 3 ) * \$x
>     2 * \$x / 3
>
[snip]

This piqued my interest, so I attempted to exhibit the problem with

#!/usr/bin/perl -w
use strict;
use Math::MatrixReal;
# that returns the same stuff

my \$matrix = Math::MatrixReal->new_from_rows([[3,6,9]]);
my \$a = (2/3) * \$matrix;
my \$b = 2 * \$matrix / 3;
my \$c = 2 * (+\$matrix) / 3;
my \$d = (2/3) * (+\$matrix);

print "\\$a is a " . (ref \$a) . "\n";
print "\\$b is a " . (ref \$b) . "\n";
print "\\$c is a " . (ref \$c) . "\n";
print "\\$d is a " . (ref \$d) . "\n";
print "\\$a=\n";
print \$a;
print "\\$b=\n";
print \$b;
print "\\$c=\n";
print \$c;
print "\\$d=\n";
print \$d;

Which outputs:

\$a is a Math::MatrixReal
\$b is a Math::MatrixReal
\$c is a Math::MatrixReal
\$d is a Math::MatrixReal
\$a=
[  2.000000000000E+00  4.000000000000E+00  6.000000000000E+00 ]
\$b=
[  2.000000000000E+00  4.000000000000E+00  6.000000000000E+00 ]
\$c=
[  2.000000000000E+00  4.000000000000E+00  6.000000000000E+00 ]
\$d=
[  2.000000000000E+00  4.000000000000E+00  6.000000000000E+00 ]

Am I missing something?

The current source for Math::MatrixReal is at
http://leto.net/svn/Math-MatrixReal/

and the source to that example can be found at
http://leto.net/svn/util/trunk/examples/ .

--

[---------------------]
Jonathan Leto
jaleto at gmail.com
503.928.0609
```