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.