Hallo Robert,
In[1]:= rho[r_]:=rho0/(rm - r0)*(rm - r)
Hier wird einfach nur eine Funktion rho definiert, die
einen Parameter hat.
Sie hat 3 Parameter und eine unabhängige Veränderliche.
Ich möchte nun den Ausdruck [2] als Funktion in r0 und rm
auffassen:
In[3]:= m1[r0_,rm_]:=Integrate[rho[r]*r^2,{r,r0,rm}]
Das ist
In[7]:= Remove[m2]
m2[r0_, rm_] := Evaluate[Integrate[rho[r]*r^2, {r, r0, rm}]]
In[9]:= m2[2.1, 2.2]
Out[9]= 0.227583 rho0
(oder statt Evaluate und SetDelayed einfach Set, wie von Thomas bemerkt).
Das unerwartete Ergebnis kommt jetzt:
In[4]:= m1[2.1,2.2]
-0.994375 rho0 0.462333 rho0 rm
Out[4]= -------------- + ----------------
-r0 + rm -r0 + rm
Das ist nicht unerwartet:
In[21]:= Trace[m1[2.1, 2.2]]
Bei der Auswertung werden die Integralgrenzen numerisch ersetzt, erst dann
sucht mma nach einer Definition für rho und weiss nicht, dass die
Argumente von m1[] gleich den Parametern von rho[] sein sollen. Man sieht
alles!
Man kann sich auch überzeugen durch Definition[m1], das enthält rho[]
unaufgelöst, dagegen Definition[m2] weiss nichts mehr von rho.
Eine andere Art:
In[24]:= m3[x_, y_] := Block[{r0 = x, rm = y}, Integrate[rho[r] r^2, {r,
x, y}]]
In[25]:= m3[2.1, 2.2]
Out[25]= 0.227583 rho0
Mit den besten Grüssen
Udo.