bar at ANTYSPAM.ap.krakow.pl wrote:
> Hi
>
> When I try :
> ------------------
> p = 1;
> f1[x_] := p Sin[Pi x];
> p = 2;
> f2[x_] := p Sin[Pi x];
>
> f1[0.5]
> f2[0.5]
>
> Out[26]=2.
>
> Out[27]=2.
> -----------------
> When I use = instead of := it works OK.
> Why ?
SetDelayed, :=, evaluates the body of the definition only when the the
function is called. Therefore, f1 looks at the value of p only when it
is called by f1[0.5]. At that time, the current value of p is 2, not 1.
In[1]:=
p = 1;
f1[x_] := p*Sin[Pi*x];
f1[0.5]
Out[3]=
1.
In[4]:=
p = 2;
f2[x_] := p*Sin[Pi*x];
f1[0.5]
f2[0.5]
Out[6]=
2.
Out[7]=
2.
> It is safely to use "=" in function definition ?
The usual way for defining a function is to use SetDelayed, not Set.
> I have to integrate and differentiate such function in the future.
> In my case function depends on about 20 parameters, which are calculated
> three times, (I want to obtain three functions)
You could define your functions in the following way:
In[8]:=
f3[p_][x_] := p*Sin[Pi*x];
f3[4][0.5]
Out[9]=
4.
> I'm not sure is this good idea to use '=' ?
Short answer: no, not for defining a function.
> Regards , Olaf
Regards,
Jean-Marc