Frühere |
||||
Vorherige |
|
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 FehlermeldungInterpolation::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 |
Frühere |
||||
Vorherige |