Hallo,
bei LogPlot mit einem Modul unter Mathematica 4 habe ich das Problem,
dass immer bei dem "ersten" Wert, welcher von LogPlot berechnet wird,
der Parameter nicht ordnungsgemäß übergeben wird.
Beispiel einer einfachen Funktion (für die man eigentlich natürlich kein
Modul braucht, aber es geht nur um das Prinzip):
scl[sf_, pf0_, teufe_, geburtsjahr$pfeiler_, endzeitpunkt_,
h0_, \[Epsilon]_, \[Alpha]_, x_, a2_, n_, \[Mu]_, Q_, T_,
hoehe$zum$zeitpunkt$t$plus$dt$gespeichert_, auf$hmin$begrenzen_] :=
Block[{senkung$berechnet, hoehe$zum$zeitpunkt$t$plus$dt, tage, dt =
1., m,
hmint, hoehe$zum$zeitpunkt$t$plus$dt$neu},
If[Not[NumberQ[\[Epsilon] + \[Alpha] + a2 + n + \[Mu] + Q]],
Print["\[Epsilon]+\[Alpha]+a2+n+\[Mu]+Q=" <>
ToString[FullForm[\[Epsilon] + \[Alpha] + a2 + n + \[Mu] + Q]]
<>
" NumberQ[\[Epsilon]+\[Alpha]+a2+n+\[Mu]+Q]=" <>
ToString[
FullForm[NumberQ[\[Epsilon] + \[Alpha] + a2 + n + \[Mu] +
Q]]]]];
\[Epsilon] + \[Alpha] + a2 + n + \[Mu] + Q]
Man sieht, ich habe mit If NumberQ[....] einen Test eingebaut um zu
sehen, was intern passiert.
Wenn ich das Modul mal ausprobiere erhalte ich eine vernünftige Antwort:
scl[122, 60, 600, 1970, 1978, 8, 0, 50, 9, 10^-6, 2, 0, 1, 293, 13,
True]//N
53.
Bei Plot geht noch alles bestens:
Cell[BoxData[
RowBox[{"Plot", "[",
RowBox[{
RowBox[{"scl", "[",
RowBox[{
"122", ",", "60", ",", "600", ",", "1970", ",", "1978", ",",
"8",
",", "0", ",", "50", ",", "9", ",",
SuperscriptBox["10",
RowBox[{"-", "6"}]], ",", "2", ",", "0", ",",
SuperscriptBox["10", "expQ"], ",", "293", ",", "13", ",",
"True"}], "]"}], ",",
RowBox[{"{",
RowBox[{"expQ", ",",
RowBox[{"-", "15"}], ",", "15"}], "}"}], ",",
RowBox[{"PlotRange", "->", "All"}], ",",
RowBox[{"Compiled", "->", "True"}]}], "]"}]], "Input"]
Bei LogPlot gibte es aber Schwierigkeiten:
Cell[BoxData[{
RowBox[{
RowBox[{"Needs", "[", "\"\<Graphics`Graphics`\>\"", "]"}], ";"}],
"\n",
RowBox[{"LinearLogPlot", "[",
RowBox[{
RowBox[{"scl", "[",
RowBox[{
"122", ",", "60", ",", "600", ",", "1970", ",", "1978", ",",
"8",
",", "0", ",", "50", ",", "9", ",",
SuperscriptBox["10",
RowBox[{"-", "6"}]], ",", "2", ",", "0", ",",
SuperscriptBox["10", "expQ"], ",", "293", ",", "13", ",",
"True"}], "]"}], ",",
RowBox[{"{",
RowBox[{"expQ", ",",
RowBox[{"-", "15"}], ",", "15"}], "}"}], ",",
RowBox[{"PlotRange", "->", "All"}], ",",
RowBox[{"Compiled", "->", "False"}]}], "]"}]}], "Input"]
Es erscheint zwar eine Grafik, aber die If NumberQ Bedingung zeigt, dass
die Variable expQ beim ersten Mal nicht ordnunggemäß als Zahl sondern
als
Cell[BoxData["\<\"\[Epsilon]+\[Alpha]+a2+n+\[Mu]+Q=Plus[Rational[52000001,
\
1000000], Power[10, expQ]] \
NumberQ[\[Epsilon]+\[Alpha]+a2+n+\[Mu]+Q]=False\"\>"], "Print"]
(Power[10, expQ]) übergeben wird.
Bei dieser trivialen Funktion ist das sicher kein Problem, aber leider
habe ich eine Berechnung durchzuführen, bei der jedesmal ein Term aus
meheren tausend Summanden ausgegeben wird, und das stört sehr...
Kann jemnad helfen??
Gruß Peter Klamser
|