Re: making a function linear

• To: mathgroup at smc.vnet.net
• Subject: [mg25518] Re: [mg25473] making a function linear
• From: "Carl K. Woll" <carlw at u.washington.edu>
• Date: Thu, 5 Oct 2000 23:50:38 -0400 (EDT)
• References: <200010030226.WAA06503@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Murray,

How about giving T the attribute HoldAll? This works for your example:

In[10]:=
SetAttributes[T, HoldAll]
T[a_?VectorQ + b_?VectorQ] := T[a] + T[b]
T[c_ a_?VectorQ] := c T[a]

In[13]:=
a = {1, 2}; T[a] = {3, 4};
b = {5, 6}; T[b] = {7, 8};

In[15]:=
T[a + b]

Out[15]=
{10, 12}

In[16]:=
T[2a]

Out[16]=
{6, 8}

I know you didn't want to use a Hold variant, but this method is very
simple, and it doesn't involve using Hold in the definition of T, so perhaps
this will work for you.

Carl

----- Original Message -----
From: "Murray Eisenberg" <murray at math.umass.edu>
To: mathgroup at smc.vnet.net
Subject: [mg25518] [mg25473] making a function linear

> 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
>

```

• Prev by Date: Exporting multiple page graphics
• Next by Date: Re: Run[] in background (NT)?
• Previous by thread: Re: making a function linear
• Next by thread: RE: making a function linear