|
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 |