Hallo,
daf"ur gibt es keine L"osung.
Wer das Notation package verwendet ist erstmal selber schuld !
Es ist normalerweise so, das die unerkl"arlichsten "Fehler"
durch Unterschiede in der internen Darstellung und der
Eingabe/Ausgabe entstehen. Wenn man so etwas provozieren will --
dann soll man das Notation package benutzen und sich "uber
die Seltsamkeiten die am sich selber eingehandelt hat wundern.
Eine indizierte Variable kann zwei Bedeutungen haben
a) auch der Index ist variabel und x_{i} meint ein
Vektorelement/Funktionsargument
b) der Index ist konstant, weil man gern x_{1}, x_{2} schreiben will
obwohl es nie mehr als die beiden geben wird
Das Notation-Package nimmt immer an, das die zweite Bedeutung
gemeint ist. Da Subscript[] eine eigene Funktion ist, muss
der Subscript beseitigt werden damit
Subscript[q,1] entweder als
a) q[1] oder
b) q1 interpretiert wird
Notation macht wie gesagt nur das letztere, d. h.
der Index ist kein Funktionsargument sondern konstant.
Will man wirklich Subscript[q,i] f"ur q[i] schreiben so
verschleiert das den Charakter des Indexes als
Funktionsargument. Wer das unbedingt will kann (ohne das
Notation-Package zuverwenden)
MakeExpression[SubscriptBox["q", s_], fmt_:TraditionalForm] :=
Module[{indx}, indx = MakeExpression[s, fmt];
HoldComplete @@ {q[indx[[1]]]}]
definieren. Damit werden alle SubscriptBox["q",irgendwas] Eingaben
in einen Funktionsaufruf an die Funktion q[] umgeschrieben.
Insbesondere bleibt der Index variabel. Das dies leicht zu
Verwirrungen f"uhren kann ist klar, da diese Definition
daf"ur sorgt, das eine Boxeingabe
BoxData[
RowBox[{
RowBox[{"MyFunction", "[",
SubscriptBox["q", "i_"], "]"}], ":=", "i"}]]
die aussieht wie
MyFunction[Subscript[q,i_]]:= i
in
MyFunction[q[i_]]:=i
umgebaut wird. Man muss also beim programmieren st"andig
die zu q[i] umgebaute, interne Form benutzen, die aber in einem
Notebook nie als solche erkennbar ist. Obwohl
MyFunction1[q[i]] := i
auf den ersten Blick ein v"ollig anderes Pattern hat als
MyFunction[] werden sie dank der MakeExpression[] Anweisung
auf das selbe Pattern abgebildet.
W"ahrend eine echte Eingabe von
MyFunction[Subscript[q, i]]
nat"urlich nicht umgebaut wird und folglich das Pattern
f"ur MyFunction auch nicht dazu passt. Damit letzteres
klappt muss man auch noch
q/: Subscript[q,i_]:= q[i]
definieren.
Wer so etwas macht hat also eine wunderbare Quelle f"ur
Missverst"andnisse erzeugt.
Sinvoller ist es *nicht* die Eingabe umbauen zulassen sonderen
nur die Ausgabe was mit
MakeBoxes[q[i_], fmt_:TraditionalForm] := SubscriptBox["q",
MakeBoxes[i,fmt]]
geschehen w"urde. Dann muss man zwar immer q[i] eintippen, das
ist aber auch klarer weil man ja an dieser Stelle ja eine Funktion
*meint*.
Wozu das Notation package "uber haupt gebraucht wird ist allerdings
unklar, denn
MakeBoxes[KroneckerDelta[a_, b_], fmt_:TraditionalForm] :=
SubscriptBox["\[Delta]", RowBox[{MakeBoxes[a, fmt], MakeBoxes[b,
fmt]}]]
MakeBoxes[q[i_], fmt_:TraditionalForm] := SubscriptBox["q",
MakeBoxes[i]]
MakeExpression[SubscriptBox["q", s_], fmt_:TraditionalForm] :=
Module[{indx}, indx = MakeExpression[s, fmt];
HoldComplete @@ {q[indx[[1]]]}]
Erzielen den gew"unschten Effekt f"ur q[i] und drucken auch
noch das KroneckerDelta[] h"ubsch aus. Man muss nat"urlich
weiter KroneckerDelta[] schreiben, aber wie man MakeExpression[]
daf"ur umbaut sollte ja wohl klar sein.
Viel Spass beim Fehlersuchen mit dieser Notation ;-))))
Besonders h"ubsch wird das f"ur
a) andere
b) einen selbst wenn man 2 Wochen sp"ater, etwas "andern
muss.
Gruss
Jens
> "Georg Ch. Mellau" wrote:
>
> Liebe Mathematica freunde,
>
> ich hab ein "Grundlegenes" problem mit Mathematica 4.1 Symbolise[]
> funktion.
>
> Ich habe ein *.nb angehaengt mit dem Problembeschreibung.
>
> Hat jemand eine Loesung fuer dieses Problem ?
>
> MfG
>
> Georg Mellau
>
>
>
>
> Name: Symbolise.nb
> Symbolise.nb Type: application/mathematica
> Encoding: quoted-printable