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