MathGroup Archive 1994

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

Search the Archive

Re: Using substitution rules to define a function

  • To: mathgroup at yoda.physics.unc.edu
  • Subject: Re: Using substitution rules to define a function
  • From: Richard Mercer <richard at rmercer.wright.edu>
  • Date: Thu, 31 Mar 1994 08:31:11 -0500

Jean Peccoud writes:

>  could anybody explain me what happens here ? Sol is a
>  solution of an equation
>  

>  In[32]:=
>  

>  sol
>  

>  Out[32]=
>  		2                           2
>         2 a + b w  + Sqrt[b] w Sqrt[4 a + b w ] {{x ->
>  ---------------------------------------},
>  			  2
>  

>  		 2                           2
>  	2 a + b w  - Sqrt[b] w Sqrt[4 a + b w ] {x ->
>    ---------------------------------------}}
>  			   2
>  

>  Here I want to define a function of w which returns the
>  first solution.
>  

>  In[34]:=
>  

>  invf1[w_]:=sol[[1,1,2]] invf1[x]
>  

>  Out[34]=
>  

>  	 2                           2
>  2 a + b w  + Sqrt[b] w Sqrt[4 a + b w ]
>  ---------------------------------------
>  		   2
>  

>  but when I want to compute the value of this function
>  for x, w remains.  There must be a basic trick that I
>  did not undestand well in using rules or patterns.  Thank
>  you.

There are three solutions to your problem:

(1)
invf1[w_] = sol[[1,1,2]];
without the colon. 

(2)
invf1[w_]:= Evaluate[sol[[1,1,2]]];
(3)
In notebooks front ends, use the "Copy Output From Above" menu item to place  
the previous output in your function definition, then edit.

Each of these will establish the functional relationship you desire.

The problem is in understanding the "delayed assignment" operator :=,
which is not a sacred part of function definition (as is the underscored  
variable), but rather just a suggestion that works best in most cases.

But not here! The effect of delayed assignment in your example is that the  
value of invf1[w_] is set to literally 's[[1,1,2]]', which has no w's in it,  
and therefore no functional relationship is established.

With the direct assignment(1) or the delayed assignment with forced  
evaluation(2), the expression s[[1,1,2]] is evaluated before the function is  
defined, and so invf1[w_] is set to 2*a + b*w^2 + b^(1/2)*w*(4*a + b*w^2)^(1/2)
as intended.

*********************************************************************
Richard Mercer                             513-873-2191 office
Department of Mathematics and Statistics   513-873-2785 message
Wright State University                    513-873-3301 fax
Dayton, OH 45435                           NeXTmail welcome!
richard at rmercer.wright.edu        or       rmercer at desire.wright.edu
*********************************************************************








  • Prev by Date: Re: (1) ContourPlot (absolute maximum) and (2) BarChart3D
  • Next by Date: Mma trouble on ULTRIX 4.2A
  • Previous by thread: Re: Using substitution rules to define a function
  • Next by thread: Declare (comment), operators (Q)