Hallo Peter,
die Fehlermeldung mag zunächst sinnlos erscheinen, denn es gibt wirklich
keine duplizierten Tupel unter den gelieferten Koordinaten, sofern
Union[] und Interpolation[] denselben SameTest verwenden:
In[50]:= Clear[coords];
coords = Transpose[Drop[Transpose[VerschiebungZ], -1]];
In[52]:= Dimensions[coords] == Dimensions[Union[coords]]
Out[52]= True
In[53]:= Dimensions[coords]
Out[53]= {10592,4}
Möglicherweise besteht das Problem nicht in duplizierten Koordinaten,
sondern in zuwenig Daten: Wenn ich es richtig verstanden habe, dann
erwartet die mehrdimensionale Interpolation[] ein _Array_ Stützstellen
mit Daten, und nicht einfach eine Menge {{x11, x21, x31, x41, f1}, {x12,
x22, x32, x42, f2}, ...} von Stützstellen mit Daten. Die Anzahl
verschiedener Koordinatenwerte pro Dimension ist:
In[49]:= Table[Length[Union[Transpose[VerschiebungZ][[o]]]], {o, 1, 4}]
Out[49]= {657,2,4,4}
Ein Array von Daten muss also 657 * 2 * 4 * 4 = 21024 Datenpunkte
abliefern; es wurden
In[46]:= Dimensions[VerschiebungZ]
Out[46]= {10592,5}
nur 10592 Koordinatentupel geliefert. Man kann natürlich auch die
Koordinatenreihenfolge vertauschen und die Werte festhalten, sich also
etwa für o = 1, 2, 3 den Ausdruck
With[{o = 1},
Interpolation[Transpose[Join[RotateLeft[Drop[Transpose[VerschiebungZ],
-1], o], {Last[Transpose[VerschiebungZ]]}]]]
]
ansehen: Für o=1 kommt die Fehlermeldung
Interpolation::inpts: "The total number 10592 of data points is not a
multiple of the number 487 of points in dimension 4.
Wie Mma. 5.1 nun auf 487 Punkte in Dimension 4 (das ist die ursprünglich
erste Dimension) kommt, ist auch ein Rätsel,
aber vielleicht hilft es Ihnen weiter, wenn Sie ein komplettes Array bei
Interpolation[] abliefern. Mit anderen Worten,
der folgende Ausdruck sollte auf einem Array
In[64]:= Union[Length[#]& /@ Split[Sort[First[Transpose[VerschiebungZ]]]]]
Out[64]= {16, 32}
{32} (= 2 * 4 * 4; oder allgemeiner genau einen Wert) liefern und nicht
das, was er liefert. Da 10592 sehr viel kleiner als 21024 ist, müssen
die allermeisten Listen unter Split[] die Länge 16 haben, und -48.148
ist einer der Werte in Dimension 1, die 32 mal vorkommen ...
In[72]:= Length[Select[VerschiebungZ, First[#1] == -48.148 & ]]
Out[72]= 32
Guten Rutsch && Gruss
Udo.
klamser wrote:
Hallo,
ich will Daten interpolieren.
Diese transponiere ich zuerst,
dataT = Transpose[data]
spiegele ich an der x Achse (erste Spalte) und füge sie mit Tranpose
Union zusammen:
VerschiebungZ1 = Transpose[{dataT[[1]], dataT[[2]], dataT[[5]],
dataT[[6]], dataT[[4]]}];
VerschiebungZ2 = Transpose[{-dataT[[1]], dataT[[2]], dataT[[5]],
dataT[[6]], dataT[[4]]}];
VerschiebungZ = Union[VerschiebungZ1, VerschiebungZ2];
Durch das Union werden AUCH alle doppelten Datensätze eliminiert (x = 0).
VerschiebungZInterpoliert = Interpolation[VerschiebungZ];
produziert aber leider nur eine Fehlermeldung, dass irgendwas doppelt
vorhanden sein soll.
Interpolation::"inddp":"The point \!\(-48.148`\) in dimension \!\(1\)
is duplicated. \!\(\*ButtonBox[\"Mehr\[Ellipsis]\",
ButtonStyle->\"RefGuideLinkText\", ButtonFrame->None,
ButtonData:>\"Interpolation::inddp\"]\)"
Welcher doppelt sein soll, kann ich ber nicht erkennen. Was mach ich
falsch?
Vielen Dank und freundlicher Gruß von Peter Klamser