DMUG-Archiv 2004

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Anzahl Funktionsauswertungen

Hallo,

nun es kann "uberhaupt keinen Sinn *machen*. Es k"onnte besten falls
Sinn haben. Denn hat es auch, denn

f[ x_, y_, z_ ] := ( i++; Sin[ x*y ] + z )

wird ausgwertet, denn ContourPlot3D[] hat *nicht* das Attribut
HoldAll, nach dieser einmaligen Auswertung steht dann

ContourPlot3D[Sin[ x*y ] + z, {x, -2, 2}, {y, 0, 2}, {z, -2, 2}, 
  Compiled -> False]

da und
weitere Versuch die Argumente von ContourPlot3D[] auszuwerten
scheitern, ContourPlot3D[] versucht
Sin[x*y]+z zu zeichnen. Dabei wird aber kein i mehr inkrementiert
das hat sich ja schon beim ersten mal erledigt.

Setzt man HoldAll richtig mit

SetAttributes[ContourPlot3D, HoldAll]
SetAttributes[Graphics`ContourPlot3D`Private`conbld, HoldAll]

wird f[x,y,z] nicht vorher ausgewertet und man bekommt
3648 Auswertungen.

Und nat"urlich verhindert 

i = 0;
f[x_?NumericQ, y_?NumericQ, z_?NumericQ] := (i++; Sin[x*y] + z)

auch die Auswertung ohne den HoldAll Zirkus  und z"ahlt die
Aufrufe korrekt.

Gruss
  Jens


Oliver Ruebenkoenig wrote:
> 
> Hallo demug,
> 
> Ich moechte die Anzahl von Funktionsauswertungen zaehlen, die noetig sind
> um eine Funktion zu Plotten.
> 
> Dazu setze ich
> i = 0;
> f[ x_, y_ ] := (i++; Sin[ x*y ])
> 
> und nach
> 
> i
> Plot3D[ f[ x, y ], { x, 0, 1 }, { y, 0, 1 } ]
> i
> 
> bekomme ich fuer i 625 Auswertungen. Soweit so gut. Nun
> 
> << Graphics`ContourPlot3D`
> 
> i = 0;
> f[ x_, y_, z_ ] := ( i++; Sin[ x*y ] + z )
> 
> und mit
> 
> i
> ContourPlot3D[f[x, y, z], {x, -2, 2}, {y, 0, 2}, {z, -2, 2},
>   Compiled -> False]
> i
> 
> bekomme ich für i 1 Funktiosauswertung . Warum macht das Sinn? Wie
> koennte ich die Anzahl dennoch Zaehlen?
> 
> Vielen Dank fuer die Hilfe,
> 
> Oliver
> 
> Oliver Ruebenkoenig, <ruebenko@XXXXXXX.de>
>    Phone: ++49 +761 203 7385


Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html