DMUG-Archiv 2003

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

Re: Grafik - Achsen

Hallo Martin,

wenn die Permafrostbodenoberflaeche durch die singularitaetenfreie Funktion fH
beschrieben wird, dann teilt fH den Streifen {{x, y} | v11 < x < v12, x \in R, y \in
R}in zwei Gebiete, wenn man als "unten" das Gebiet bezeichnet, das fast alle Punkte
der negativen y Achse (rechthaendiges System - muss man ja jetzt sagen) enthaelt,
dann kann man auch folgende Funktion verwenden:

(* Zeichne eine Funktion, bei der die "Tiefe" mit positiven Tickmarks bezeichnet
wird *)
heimannPlot[fH_, {v1_, v11_, v12_}, opts___] :=
  Module[{o, xticks, yticks, x0, y0, ymin, ymax, xd, yd, tanz, accx, accy},
      If[FreeQ[fH[v1], v1], Print["Function ", fH, " does not depend on ", v1, "."];
Return[$Failed]];
      x0 = o /. FindRoot[fH[o], {o, v11, v12}];
      If[! NumberQ[x0], Print["No zero found for ", fH, ". Just trying to plot by
default."];
        Plot[fH[v1], {v1, v11, v12}, opts];
        Return[],
        Null,
        Print[" Does not know whether the zero ", x0, " for ", fH, " is a number."];

        Return[$Failed]
        ];
      y0 = fH[0.];
      {ymin, ymax} = Through[{Min, Max}[Table[fH[v1], {v1, v11, v12, (v12 -
v11)/100.}]]];
      If[! ((v11 <= x0) && (x0 <= v12)) || ! ((ymin <= y0) && (y0 <= ymax)),
        Print[" The function ", fH, " crosses the axes outside the plot area. Plot
by default."];
        Plot[fH[v1], {v1, v11, v12}, opts];
        Return[]
        ];
      tanz = Null;
      While[! NumberQ[tanz], tanz = Input["heimannPlot: How many tick marks?"]];
      yd = (ymax - ymin)/tanz;
      accy = 3;
      While[(SetAccuracy[N[yd], accy] - SetAccuracy[N[0.], accy]) < $MachineEpsilon
&& accy < 16, accy++];
      yticks = Table[{y0 + n yd, -n yd}, {n, IntegerPart[(ymax - y0)/yd],
-IntegerPart[(y0  - ymin)/yd], -1}];
      xd = (v12 - v11)/tanz;
      accx = 3;
      While[(SetAccuracy[N[xd], accx] - SetAccuracy[N[0.], accx]) < $MachineEpsilon
&& accx < 16, accx++];
      If[y0 >= 0,
        If[x0 >= 0,
          xticks = Table[{x0 + n xd, -n xd}, {n , IntegerPart[(v12 - x0)/xd],
-IntegerPart[(x0 - v11)/xd], -1}],
          xticks = Table[{x0 - n xd, -n xd}, {n , -IntegerPart[(v12 - x0)/xd],
IntegerPart[(x0 - v11)/xd], 1}]
          ],
        If[x0 >= 0,
          xticks = Table[{x0 + n xd, n xd}, {n , -IntegerPart[(x0 - v11)/xd],
IntegerPart[(v12 - x0)/xd], 1}],
          xticks = Table[{x0 + n xd, -n xd}, {n , IntegerPart[(v12 - x0)/xd],
-IntegerPart[(x0 - v11)/xd], -1}]
          ]
        ];
      (* plot *)
      Plot[fH[v1], {v1, v11, v12}, PlotRange -> All, Ticks -> \
{SetAccuracy[N[xticks], accx], SetAccuracy[N[yticks], accy]}, opts]
      ] /; NumberQ[v11] && NumberQ[v12] && AtomQ[v1] && v11 < v12

die Funktion bleibt erhalten, man hat eine x-Tiefe und eine y-Tiefe und kann das
rufen mittels:

Remove[hh];
hh[y_] := -Cos[y];
heimannPlot[hh, {x, -1, 3}]

Noch nie den Cosinus mit solchen Koordinaten gesehen ...

Mit den besten Gruessen
Udo.



Martin Heimann schrieb:

> Natürlich muss die Funktion dann auch entsprechend abgebildet werden. In
> meinem Falle habe ich ein vertikales Temperaturprofil in einem
> Permafrostboden berechnet: T(z,t), wobei z die Tiefe im Boden bezeichnet.
> Ich möchte nun die Form der Profile für mehrere Zeitpunkte zeichnen. In
> diesem Falle nimmt man intuitiv für z die Vertikalachse und lässt die Werte
> nach unten zunehmen.

GIF image

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

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