DMUG-Archiv 2001

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

Re: Symbolise

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


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

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