Funktion: Kubische Splines
Moderator: Moderatoren
Re: Funktion: Kubische Splines
z.B. siehe:
http://www.excelformeln.de/tips.html?welcher=99
die dortige Beispieldatei funktioniert hier auch in OpenOffice (OOo 3.3.0)
Gruß
Stephan
http://www.excelformeln.de/tips.html?welcher=99
die dortige Beispieldatei funktioniert hier auch in OpenOffice (OOo 3.3.0)
Gruß
Stephan
Re: Funktion: Kubische Splines
Hallo pau,
bei den Excel Kollegen hat sich ein Klaus Kühnlein schon einmal die Mühe gemacht und auch Kubische Splines im Beispiel berechnet.
Die Beispieldatei Kubische Splines funktioniert hier auch unter AOO 4.1.1
Vieleicht hilft dir das ja schon weiter!?
PS
der Stephan war schneller
nennt man das jetzt eigentlich auch Doppelpost
?
bei den Excel Kollegen hat sich ein Klaus Kühnlein schon einmal die Mühe gemacht und auch Kubische Splines im Beispiel berechnet.
Die Beispieldatei Kubische Splines funktioniert hier auch unter AOO 4.1.1
Vieleicht hilft dir das ja schon weiter!?
PS
der Stephan war schneller
nennt man das jetzt eigentlich auch Doppelpost

LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Funktion: Kubische Splines
Hi!
Stephan
calg
Keiner mehr da?
pau
Stephan
calg
Keiner mehr da?
pau
Re: Funktion: Kubische Splines
Guten Abend Gemeinde!
Habe ein .xls Blatt gefunden mit Splineinterpolation.
Habe aber damit meine Schwierigkeiten, weil ich die Syntax der Formel cubspline nicht kenne. Kann mir da jemand weiterhelfen?
Ich füge mal meine Tabelle zwecks Erläuterung bei.
Ich habe drei Stützstellen, bei 100, 50 und 2. Die zu den dazwischenliegenden Werten 90,80,70,60,40,30,20,10 gehörenden Daten wil ich Splineinterpolieren. Muß also zeilenweise vorgehen. Müßte also die drei Stützstellen einzeln eingeben. Kann das aber nicht. Habe nur das Beispiel, dass die Stützstellen als Abfolge (zB A6:A9) eingebbar sind.
Versuche mal das Exelsheet aus dem ich das habe beizufügen und wie gesagt mein Beispiel(splineproblem).
grüsse pau
Habe ein .xls Blatt gefunden mit Splineinterpolation.
Habe aber damit meine Schwierigkeiten, weil ich die Syntax der Formel cubspline nicht kenne. Kann mir da jemand weiterhelfen?
Ich füge mal meine Tabelle zwecks Erläuterung bei.
Ich habe drei Stützstellen, bei 100, 50 und 2. Die zu den dazwischenliegenden Werten 90,80,70,60,40,30,20,10 gehörenden Daten wil ich Splineinterpolieren. Muß also zeilenweise vorgehen. Müßte also die drei Stützstellen einzeln eingeben. Kann das aber nicht. Habe nur das Beispiel, dass die Stützstellen als Abfolge (zB A6:A9) eingebbar sind.
Versuche mal das Exelsheet aus dem ich das habe beizufügen und wie gesagt mein Beispiel(splineproblem).
grüsse pau
- Dateianhänge
-
- splineproblem.xlsx
- (8.08 KiB) 129-mal heruntergeladen
-
- spline 31580.xls
- (136.5 KiB) 142-mal heruntergeladen
Re: Funktion: Kubische Splines
Nein (habe mich gerade nochmal vergewissert). Und selbst wenn dann wäre der Schutz in OO entfernbar.Es handelt sich um ein geschütztes Tabellenblatt.
hä? Die Zahlenreihen in Tabelle "Kubische Splines" betreffen nicht die gewünschten Dinge?Splineinterpolierte Werte wurden bei mir nicht ausgegeben
Meine Anleitung lautet: öffne die Datei. So getestet mit OOo 3.3.0Vlt könnt Ihr mir da mal eine Anleitung dazu schreiben?
Habe versucht die Makros laufen zu löassen weil ich dachte es könnte daran liegen.
Es gibt in der (von mir genannten) Datei überhaupt keine Makros (nur leere Module die die Makroabfrage auslösen)
Gelegentlich arbeite ich auch ... hier im Forum kriege ich nämlich nichts bezahlt und auch ich muss mein Leben finanzieren.Keiner mehr da?
Nur indem ich Dir sage schau in die benutzerdefinierte Funktion in der Excel-Datei:Kann mir da jemand weiterhelfen?
Code: Alles auswählen
Public Function cubspline(Method As Integer, xi As Double, _
xx As Object, yy As Object) As Double
' valid input for parameter "Method":
' 1 = cubic spline / 3 = own spline
Dim i As Integer
Dim yi As Double
Dim x() As Double
Dim y() As Double
Dim y2() As Double
Dim j As Integer
If Method = 1 Then
'Numerical Recipes are 1 based
j = 0
Else
'Others are 0 based
j = -1
End If
For i = 1 To UBound(xx())
If yy(i) <> "" Then
j = j + 1
ReDim Preserve x(j)
ReDim Preserve y(j)
x(j) = CDbl(xx(i))
y(j) = CDbl(yy(i))
End If
Next i
If Method = 1 Then
'NR cubic spline
'Get y2
ReDim y2(1 To UBound(x()))
Call spline(x(), y(), UBound(x()), 10 ^ 30, 10 ^ 30, y2())
'Get y
Call splint(x(), y(), y2(), UBound(x()), xi, yi)
ElseIf Method = 3 Then
'Own cubic spline
yi = SplineX3(xi, x(), y())
End If
'Return
cubspline = yi
End Function
Sagt mir nichts, weil ich davon nichts verstehe. Da es was mit Mathematik zu tun hat hatte ich das sicher mal beim Studium, das ist aber 30 Jahre her.Ich habe drei Stützstellen, bei 100, 50 und 2. Die zu den dazwischenliegenden Werten 90,80,70,60,40,30,20,10 gehörenden Daten wil ich Splineinterpolieren.
Gruß
Stephan
Re: Funktion: Kubische Splines
Hi Stephan!
Danke für Deine Antwort. Wollte nicht drängeln!
Wie kommt man dann in Excel zur benutzerdefinierten Funktion? Suchte gerade ohne Ergebnis. Und warum finde ich die nicht in der Formelliste?
Da gibt es wohl noch zwei Unterprogramme names spline und splineX3.Vielleicht muß ich da die Formel umschreiben. Das wird nicht so einfach sein. Die Einträge in den Spalten sind bereits von mir Splineinterpoliert. Nur mit den Zeilen kann ich das nicht genauso machen. Da müßte ich sonst pro Zeile mehrere Polynome ausrechnen und das bei mehreren Hundert Zeilen ma mehreren Tabellen. Nur so zur Hintergrundinformation.
grüsse
pau
Danke für Deine Antwort. Wollte nicht drängeln!
Wie kommt man dann in Excel zur benutzerdefinierten Funktion? Suchte gerade ohne Ergebnis. Und warum finde ich die nicht in der Formelliste?
Da gibt es wohl noch zwei Unterprogramme names spline und splineX3.Vielleicht muß ich da die Formel umschreiben. Das wird nicht so einfach sein. Die Einträge in den Spalten sind bereits von mir Splineinterpoliert. Nur mit den Zeilen kann ich das nicht genauso machen. Da müßte ich sonst pro Zeile mehrere Polynome ausrechnen und das bei mehreren Hundert Zeilen ma mehreren Tabellen. Nur so zur Hintergrundinformation.
grüsse
pau
Zuletzt geändert von paupau am Di, 15.09.2015 23:15, insgesamt 1-mal geändert.
Re: Funktion: Kubische Splines
Extras-Makro-VisualBasic EditorWie kommt man dann in Excel zur benutzerdefinierten Funktion?
links:
VBA-Projekt (spline ...) -->Modul -->Spline_
ich schon, f(x)-Schaltfläche in Rechenleiste anklicken und der Dialog mit allen Funktionen ploppt auf:Und warum finde ich die nicht in der Formelliste.
Gruß
Stephan
Re: Funktion: Kubische Splines
Danke!
Extras - Makros- VBEdit finde ich nicht in Excel.
Über extras in OO komme ich auch nicht dahin.
In OO komme ich nicht klar mit dem sheet. Da kommt zuerst ein Hinweis, dass das Blatt Makros enthalte. In Spalte "E" erscheint immer nur #Name, nicht aber die Ergebnisse wie in Excel. Nur in Spalte Zeile 9 #MAKRO? .
Gute Nacht mal.
grüsse
pau
Extras - Makros- VBEdit finde ich nicht in Excel.
Über extras in OO komme ich auch nicht dahin.
In OO komme ich nicht klar mit dem sheet. Da kommt zuerst ein Hinweis, dass das Blatt Makros enthalte. In Spalte "E" erscheint immer nur #Name, nicht aber die Ergebnisse wie in Excel. Nur in Spalte Zeile 9 #MAKRO? .
Gute Nacht mal.
grüsse
pau
Re: Funktion: Kubische Splines
Guten Abend Stephan!
Ich komme mit den Splines nicht so recht weiter.
Habe eine Funktion für Excel gefunden und die geladen.
Leider kann ich die nicht in der Art und Weise verenden wie ich das bräuchte. S. Screenshot. Leider beomme ich keine Fehlermeldung und kann keine Funktionsbeschreibung erhalten, die mir weiterhilft.
Möglicherweise müsste man die dahintersteckende VBA anpassen.
Zusatzfrage: Wie üertrgae ich denn eine Funktion von einer Anwendung zur anderen?
Ich komme mit den Splines nicht so recht weiter.
Habe eine Funktion für Excel gefunden und die geladen.
Leider kann ich die nicht in der Art und Weise verenden wie ich das bräuchte. S. Screenshot. Leider beomme ich keine Fehlermeldung und kann keine Funktionsbeschreibung erhalten, die mir weiterhilft.
Möglicherweise müsste man die dahintersteckende VBA anpassen.
Zusatzfrage: Wie üertrgae ich denn eine Funktion von einer Anwendung zur anderen?
Re: Funktion: Kubische Splines
Was soll ich sagen?
1.
es ist ziemlich sinnfrei einen Screenshot zu posten, da daraus ohnehin nichts zu ersehen sein kann, denn die maximale Information die ersichtlich sein könnte ist ein Funktionsname
2.
aus dem konkreten Screenshot ist jedoch nicht einmal der Funktionsname ersichtlich, sondern die sichtbare 'Formel' in der aktiven Zele ist allein:
=$E$6;H10;G10,L10,Q10,G12,L12,Q12) [sic]
und ich schreibe 'Formel' in '', weil ich schlichtweg nicht einmal weiß was dieser Ausdruck sein soll, eine gültige Formel jedenfalls nicht
ja, möglicherweise bzw. _wenn_ VBA dahintersteht ist das wahrscheinlich
(andererseits war es in der hier schon genannten Beispieldatei http://www.excelformeln.de/tips.html?welcher=99 nicht nötig - diese KLarstellung nur nochmals zur Vorsicht)
Wenn "Funktion" hierbei eine Funktion in einer Calc-Zelle meint, dann kopiere diese und füge sie in eine Zelle der anderen Datei ein.
Wenn Funktion hierbei eine benutzerdefinierte Funktion, also ein Stück Basic-Code, meint, dann kopiere diesen Code aus der einen Datei in die andere Datei.
Im Übrigen nochmals zur Klarstellung:
ich habe von kubischen Splines keine Ahnung und weiß deshalb nicht was Du von mir hier erwartest. Die Tatsache das ich VBA-Code lesen und nötigenfalls anpasssen könnte ist doch weitgehend wertlos wenn ich inhaltlich nicht weiß was kubische Splines sind.
Gruß
Stephan
1.
es ist ziemlich sinnfrei einen Screenshot zu posten, da daraus ohnehin nichts zu ersehen sein kann, denn die maximale Information die ersichtlich sein könnte ist ein Funktionsname
2.
aus dem konkreten Screenshot ist jedoch nicht einmal der Funktionsname ersichtlich, sondern die sichtbare 'Formel' in der aktiven Zele ist allein:
=$E$6;H10;G10,L10,Q10,G12,L12,Q12) [sic]
und ich schreibe 'Formel' in '', weil ich schlichtweg nicht einmal weiß was dieser Ausdruck sein soll, eine gültige Formel jedenfalls nicht
Möglicherweise müsste man die dahintersteckende VBA anpassen.
ja, möglicherweise bzw. _wenn_ VBA dahintersteht ist das wahrscheinlich
(andererseits war es in der hier schon genannten Beispieldatei http://www.excelformeln.de/tips.html?welcher=99 nicht nötig - diese KLarstellung nur nochmals zur Vorsicht)
Indem Du sie kopierst.?Wie übertrage ich denn eine Funktion von einer Anwendung zur anderen?
Wenn "Funktion" hierbei eine Funktion in einer Calc-Zelle meint, dann kopiere diese und füge sie in eine Zelle der anderen Datei ein.
Wenn Funktion hierbei eine benutzerdefinierte Funktion, also ein Stück Basic-Code, meint, dann kopiere diesen Code aus der einen Datei in die andere Datei.
Im Übrigen nochmals zur Klarstellung:
ich habe von kubischen Splines keine Ahnung und weiß deshalb nicht was Du von mir hier erwartest. Die Tatsache das ich VBA-Code lesen und nötigenfalls anpasssen könnte ist doch weitgehend wertlos wenn ich inhaltlich nicht weiß was kubische Splines sind.
Gruß
Stephan
Re: Funktion: Kubische Splines
Warum verwendest Du nicht adäquate Ausdrücke gibst also Zellbereiche an? z.B.: G10:Q10Habe also meine Knoten [im Bsp. nur 3] dadurch einzugeben versucht, indem ich sie mit Komma trennte.
Nein, denn dort ist keine gültige Formel, auch nicht wen das Komma-Problem nicht wäre, denn es fehlt schlichtweg die Funktionsangabe. z.B. wäre das Folgende immer noch nicht richtig, wegen der Kommas, aber prinzipiell zumindest zunächt eine Formel:Aber das schluckt er nicht. Nimmt nicht die ausgefüllte Formel; gibt noch nicht einmal eine Fehlermeldung. Dies ist der Zustand meines Screenshots.
=cubspline($E$6;H10;G10,L10,Q10,G12,L12,Q12)
s.o.Wie sonst kann ich die Spaltenangaben der Knoten und Werte durch Angaben einzelner Zellen ersetzen?
Oder geht das gar nicht, weil in der Funktion nicht vorgesehen?
doch, das geht. Ob die prinzipiell richtige Angabe z.B. "G10:Q10" funktioniert weeiss ioch natürlich nicht, denn dazu müsste ich etwas von Splines verstehen, was ich jedoch nicht tue.
da passiert nichts Wesentliches, was das Ganze für einen Zweck hat weiß ich auch nicht da ich keinerlei ahnung von Splines habe, der Code tut jedoch Folgendes;Das passiert wohl eher in der i-Schleife:
Code: Alles auswählen
For i = 1 To UBound(xx())
Code: Alles auswählen
If yy(i) <> "" Then
Code: Alles auswählen
j = j + 1
Code: Alles auswählen
ReDim Preserve x(j)
ReDim Preserve y(j)
Code: Alles auswählen
x(j) = CDbl(xx(i))
Code: Alles auswählen
y(j) = CDbl(yy(i))
Code: Alles auswählen
End If
Next i
KLar ist das Vorstehende nicht sehr hilfreich, ich wollte nur illustrieren das es mir nichts nutzt das ich programmieren kann wenn ich nichts von Splines verstehe und es bei der Programmierung, um Splines geht.
Gruß
Stephan
Re: Funktion: Kubische Splines
Moin Stephan!
Schönen Dank für Dein Kümmern!
Zu den kubischen Splines:
Zwischen zwei Punkte wird eine Parabel 3. Ordnung gelegt(Name), beginnend bei Punkt 1. Deshalb müssen die Knoten[ihre x-Werte] aufsteigend geordnet sein.
Ausser dem 1. und dem letzten Knoten sind alle Knoten Punkte zweier Parabeln [1:2;2:3;3:4; ...]. Weitere Bedingung ist, dass die Steigung beider Parabeln im gemeinsamen Knotenpunkt gleich ist. Denn dann gibt es keine Ecken. Außerdem müssen die zweiten Ableitungen gleich sein damit die Krümmung der beiden anstoßenden Parabeln gleich sind. Für den ersten und den letzten Knoten gibt es noch eine Anfangs- und einen Endbedingung. Z.B. Vorgabe der Steigungen.
N-Knoten führen also zu N-1 kubischen Parabelgleichungen mit jeweils vier Parametern. Dieses lineare Gleichungssystem ist dank der oben bezeichneten Bedingungen lösbar(Gauss Eliminationsverfahren). Es fallen die Parameter an. Dann werden damit die N Parabeln erstellt. Dann kann für den zu berechnenden Interpolationswert die zutreffende Parabel ausgesucht werden. Diesen Wert in die gefundene Parabelformel eingesetzt ergibt den gesuchten kubischen Spline-Interpolationswert.
grüsse pau
ps.: Mit kopieren meinte ich: Kann ich die Funktion irgendwie nach OO übernehmen(falls die da funkt).
Schönen Dank für Dein Kümmern!
Frappante Idee! Werd' das mal versuchen. Ich war bisher in der Idee verhaftet die Zwischenräume zwischen meinen zehn vorgegebenen Werten auszufüllen. Dann geht das nicht. Meine Tabelle sieht aus wie die gezeigte, nur mit sehr vielen Zeilen. Die von Dir vorgeschlagenen Eingabe G10:Q10 hab' ich schon früh vergeblich ausprobiert.Warum verwendest Du nicht adäquate Ausdrücke gibst also Zellbereiche an? z.B.: G10:Q10
Du übersiehst wohl nichts! So hatte ich das auch gemacht. Habe den SS nachträglich erstellt und dabei den Funktionsnamen irgendwie verschusselt., aber prinzipiell zumindest zunächt eine Formel:
Ich meine schon. Denn hier wird festgelegt, wie die eingegebenen Werte übernommen werden. Offensichtlich so, dass man keine einzelnen Zellen bezeichnen kann, wie ich das in den Argumenten zu cubspline getan hatte und sie mit ";" trennte. Sondern so, dass man nur einen geschlossenen Bereich angeben kann. Wenn man das in der Funktion ändern könnte, wäre man wohl schon am Ziel.Ich: Das passiert wohl eher in der i-Schleife:
Du: da passiert nichts Wesentliches
Das scheint mir eben hier nicht zwingend. Es geht m.A.n. nur um die (diskrete) Übernahme der Knoten und Werte. Da gibts ja noch weitere Funktionen die aufgerufen werden. Die greifen wahrscheinlich nur noch auf die übernommenen Werte zu und führen den eigentlichen Algorithmus aus.KLar ist das Vorstehende nicht sehr hilfreich, ich wollte nur illustrieren das es mir nichts nutzt das ich programmieren kann wenn ich nichts von Splines verstehe und es bei der Programmierung, um Splines geht.
Zu den kubischen Splines:
Zwischen zwei Punkte wird eine Parabel 3. Ordnung gelegt(Name), beginnend bei Punkt 1. Deshalb müssen die Knoten[ihre x-Werte] aufsteigend geordnet sein.
Ausser dem 1. und dem letzten Knoten sind alle Knoten Punkte zweier Parabeln [1:2;2:3;3:4; ...]. Weitere Bedingung ist, dass die Steigung beider Parabeln im gemeinsamen Knotenpunkt gleich ist. Denn dann gibt es keine Ecken. Außerdem müssen die zweiten Ableitungen gleich sein damit die Krümmung der beiden anstoßenden Parabeln gleich sind. Für den ersten und den letzten Knoten gibt es noch eine Anfangs- und einen Endbedingung. Z.B. Vorgabe der Steigungen.
N-Knoten führen also zu N-1 kubischen Parabelgleichungen mit jeweils vier Parametern. Dieses lineare Gleichungssystem ist dank der oben bezeichneten Bedingungen lösbar(Gauss Eliminationsverfahren). Es fallen die Parameter an. Dann werden damit die N Parabeln erstellt. Dann kann für den zu berechnenden Interpolationswert die zutreffende Parabel ausgesucht werden. Diesen Wert in die gefundene Parabelformel eingesetzt ergibt den gesuchten kubischen Spline-Interpolationswert.
grüsse pau
ps.: Mit kopieren meinte ich: Kann ich die Funktion irgendwie nach OO übernehmen(falls die da funkt).