MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: combinations of pure functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg16593] Re: [mg16532] combinations of pure functions
  • From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
  • Date: Wed, 17 Mar 1999 23:55:03 -0500
  • Sender: owner-wri-mathgroup at wolfram.com

There are undoubtedly lots of solutions. The way I see it, the most
obvious reason why the above attempt does not work is that Mathematica
does understand various algebraic operations on functions, e.g. it does
not convert (f+g)[x] to f[x]+g[x] etc. I often need that so I add my own
rules (see below). In your particular case only one rule is needed, we
want Mathematica to understend that (-f)[x] is -f[x]. This rule shoudl be
attached to Times. Here is how it works:


In[1]:=
Unprotect[Times];
Times/:(-f_)[x_]:=-f[x];
Protect[Times];

Now your example will work as you wanted:

In[2]:=
op2 = Identity - (D[#,x]&)
Out[2]=
Identity - (D[#1, x] & )

In[3]:=
Through[op[x^2], Plus]
Out[3]=
        2
-2 x + x


Of course, if you add all the function alebra rules, you won't need
Through at all:

In[1]:=
Unprotect[{Plus, Times}]; 
 
  Plus/: ((f_) + (g_))[x_] := f[x] + g[x]; 
 
  Times/: ((k_)?NumberQ (f_))[x_] := k f[x]; 
 
  Times/: ((f_) (g_))[x_] := f[x] g[x]; 
 
 
Now

In[6]:=
op1 = Identity + (D[#,x]&)
Out[6]=
Identity + (D[#1, x] & )


In[7]:=
op2 = Identity - (D[#,x]&)
Out[7]=
Identity - (D[#1, x] & )


In[8]:=
op1[x^2]
Out[8]=
       2
2 x + x

In[9]:=
op2[x^2]
Out[9]=
        2
-2 x + x


I must confess to a personal bias here. I like this sort of programming
style more than any other because it is more like doing mathematics than
like programming and I like mathematics  more than I like programming.

On Tue, Mar 16, 1999, Gianluca Gorni <gorni at dimi.uniud.it> wrote:


>Hello!
>
>Talking of operators, consider the example of the Book
>at Section 2.2.9:
>
>   op = Identity + (D[#,x]&)
>
>To find the value of op on the expression x^2 it is
>suggested to use Through:
>
>  Through[op[x^2], Plus]
>
>Unfortunately the suggestion fails if we just change +
>into - in op:
>
>   op2 = Identity - (D[#,x]&)
>
>What can one do? I have thought of a replacement rule:
>
>   op2 /. {Identity -> x^2, f_Function -> f[x^2] }
>
>Anyone has a better idea?
>
>Thank you in advance,
>
>                       Gianluca Gorni
>
>
> +---------------------------------+
> | Gianluca Gorni                  |
> | Universita` di Udine            |
> | Dipartimento di Matematica      |
> |   e Informatica                 |
> | via delle Scienze 208           |
> | I-33100 Udine UD                |
> | Italy                           |
> +---------------------------------+
> | Ph.: (39) 0432-558422           |
> | Fax: (39) 0432-558499           |
> | mailto:gorni at dimi.uniud.it      |
> | http://www.dimi.uniud.it/~gorni |
> +---------------------------------+
>
>
>


Andrzej Kozlowski
Toyama International University
JAPAN
http://sigma.tuins.ac.jp/
http://eri2.tuins.ac.jp/



  • Prev by Date: Re: combinations of pure functions
  • Next by Date: Re: help
  • Previous by thread: Re: combinations of pure functions
  • Next by thread: Re: combinations of pure functions