RE: making a function linear
- To: mathgroup at smc.vnet.net
- Subject: [mg25488] RE: [mg25473] making a function linear
- From: "David Park" <djmp at earthlink.net>
- Date: Thu, 5 Oct 2000 23:50:10 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi Murray,
I don't know if this qualifies as a simple way because it does use a
HoldFirst as an Attribute of T. But the students don't have to use any Holds
in their use of it.
Attributes[T] = {HoldFirst};
T[a_?VectorQ + b_?VectorQ] := T[a] + T[b]
T[c_ x_?VectorQ] := c T[x]
a = {1, 2}; T[a] = {3, 4};
b = {5, 6}; T[b] = {7, 8};
T[2a]
T[a + b]
{6, 8}
{10, 12}
It will probably be difficult to think of a simpler approach.
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
> -----Original Message-----
> From: Murray Eisenberg [mailto:murray at math.umass.edu]
To: mathgroup at smc.vnet.net
>
> For a function T not yet having any "definition by formula" (T[x_] :=
> ..... ), I want to specify the linearity rules:
>
> T[x_?VectorQ + y_?VectorQ] := T[x] + T[y]
>
> T[c_ x_?VectorQ] := c T[x]
>
> Then, merely by specifying, say,
>
> a = {1, 2}; T[a] = {3, 4};
> b = {5, 6}; T[b] = {7, 8};
>
> evaluating
>
> T[2 a]
> T[a + b]
>
> would return results:
>
> {6, 8}
> {10, 12}
>
> The trouble is, of course, that Mathematica first evaluates 2 a and a +
> b when a and b have actual numeric values, so the two linearity rules
> never get used.
>
> What is a SIMPLE way (if there is one) to accomplish this -- preferably
> some way to do it that does not explicitly require using some Hold
> variant? (I need to be able to explain how to do it early in a linear
> algebra course where Mathematica is being introduced, and Hold, etc., I
> consider a definitely advanced topic.)
>
>
> --
> Murray Eisenberg murray at math.umass.edu
> Mathematics & Statistics Dept. phone 413 549-1020 (H)
> Univ. of Massachusetts 413 545-2859 (W)
> Amherst, MA 01003-4515
>
>