Anzeige
Archiv - Navigation
692to696
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
692to696
692to696
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

linear Interpolieren

linear Interpolieren
14.11.2005 09:04:41
Sven
Hallo zusammen!
Ich hätte gern ein Problem gelöst und zwar derart, dass ich eine Matrix habe in der X und Y-Werte stehen. Darüber hinaus habe ich einen Vektor mit Werten für die ich gern zu den hier angegebenen X Werten die Y-Werte linear interpoliert hätte. Die Ausgabe der Lösung sollte wieder als Vektor mit Y-Werten erfolgen um diese dann weiter für eine Matrixmultiplikation nutzen zu können. Wer kann mir eine benutzerdefinierte Funktion (entwickeln in VBA )nennen, um dieses Problem zu lösen!
Ich persönlich sehe bisher noch keine Ansatzmöglichkeit, bisher habe ich nur die Möglichkeit für einen einzelnen Wert den interpolierten Y-Wert zu ermitteln!
Vielen Dank im voraus!

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: linear Interpolieren
14.11.2005 10:36:01
ingoG
Hallo Sven,
stell doch einfach eine Beispieldatei ins Netz, damit das Problem etwas transparenter wird.
Möglichst mit Solllösung für die entsprechenden X-Werte
Gruß Ingo
AW: linear Interpolieren
14.11.2005 10:55:44
Sven
Hallo Ingo, das Problem kann ich verbal schildern. Ich habe in den Feldern A1 bis A3 die X-Werte 1; 3 und 5. In den Feldern B1 bis B3 die Y-Werte 7; 15 und 20. In den Feldern C1 bis C3 habe ich die X-Werte zu denen ich Y-Werte suche zB. 1,5; 2 und 4. Die dazugehörigen linear interpolierten Werte müßten 9;11 und 17,5 sein. Diese Werteausgabe hätte ich gern in einer Matrix(Vektor).Also ein Feld ist in Excel belegt. Das Problem sollte mit einer Formel gelöst werden.
Ich hoffe dies hilft Euch weiter
Anzeige
AW: linear Interpolieren
14.11.2005 12:43:57
ingoG
Hallo Sven,
wenn Du in D1 folgende Formel einträgst, sollte es funzen für alle x-werte zwischen 1 und 4,9999999.
=INDEX($B$1:$B$3;VERGLEICH(C1;$A$1:$A$3))+(INDEX($B$1:$B$3;VERGLEICH(C1;$A$1:$A$3)+1)-INDEX($B$1:$B$3;VERGLEICH(C1;$A$1:$A$3)))/(INDEX($A$1:$A$3;VERGLEICH(C1;$A$1:$A$3)+1)-INDEX($A$1:$A$3;VERGLEICH(C1;$A$1:$A$3)))*(C1-INDEX($A$1:$A$3;VERGLEICH(C1;$A$1:$A$3)))
diese Formel kannst Du so nach unten kopieren um mehrere x-Werte in Spalte C zu berechnen.
Gruß Ingo
PS eine Rückmeldung wäre nett...
AW: linear Interpolieren
14.11.2005 13:12:05
Sven
Hallo Ingo,
danke für Deine Hilfe, die Funktion arbeitet auch richtig aber mein Problem ist anscheinend noch nicht ganz klar. Die Resultate für die Felder C1 bis C3 möchte ich gern gesamtheitlich in D1 ausgegeben haben. Als Vektor.
Ich hoffe nunmehr alles im Detail erklärt zu haben und warte weiter auf unterstützung
Dabke im voraus
Anzeige
AW: linear Interpolieren
14.11.2005 13:30:39
ingoG
Hallo Sven,
die Logik Deines Probs ist mir gänzlich unklar...
Du befindest dich im 2-Dimensionalen Raum.
und willst einen 3-Dimensionalen Vektor als ergebnis erhalten?
die ergebnisse haben ja auch gar nichts miteinander zu tun.
wie gesagt, stell doch mal eine datei ins netz mit solllösung.
Gruß Ingo
AW: linear Interpolieren
14.11.2005 14:39:54
ingoG
Hallo nochmal,
binde doch mal folgenden Code in ein standardmodul ein (quick and dirty):
Option Explicit

Sub matrix_berechnen()
Dim matrix() As Double
Dim erg_matrix() As Double
Dim ii%
Dim text As String
'Einlesen der Matrizen
ii = 1
Do While Cells(ii, 1) <> ""
ReDim Preserve matrix(1 To 2, 1 To ii)
If ii = 1 Then
matrix(1, ii) = Cells(ii, 1)
matrix(2, ii) = Cells(ii, 2)
ii = ii + 1
ElseIf Cells(ii, 1) > matrix(1, ii - 1) Then
matrix(1, ii) = Cells(ii, 1)
matrix(2, ii) = Cells(ii, 2)
ii = ii + 1
Else
MsgBox "Spalte A nicht streng monoton steigend"
Exit Sub
End If
Loop
ii = 1
Do While Cells(ii, 3) <> ""
ReDim Preserve erg_matrix(1 To 2, 1 To ii)
If Cells(ii, 3) <= matrix(1, UBound(matrix, 2)) And _
Cells(ii, 3) >= matrix(1, 1) Then
erg_matrix(1, ii) = Cells(ii, 3)
erg_matrix(2, ii) = berechneY(matrix, erg_matrix(1, ii))
ii = ii + 1
Else
MsgBox "Wert in Spalte C nicht im Definitionsbereich"
Exit Sub
End If
Loop
For ii = 1 To UBound(erg_matrix, 2)
text = text & erg_matrix(1, ii) & ":" & erg_matrix(2, ii) & Chr(10)
Cells(ii, 4) = erg_matrix(2, ii)
Next ii
MsgBox "Erg:" & Chr(10) & text
End Sub


Function berechneY(matrix() As Double, wert As Double) As Double
Dim jj%
For jj = 1 To UBound(matrix, 2)
If wert = matrix(1, jj) Then
berechneY = matrix(2, jj)
Exit Function
ElseIf wert < matrix(1, jj + 1) Then
Exit For
End If
Next jj
berechneY = matrix(2, jj) + (wert - matrix(1, jj)) * (matrix(2, jj + 1) - matrix(2, jj)) / (matrix(1, jj + 1) - matrix(1, jj))
End Function

Vielleicht trifft das ja deine Vorstellungen besser?
Gruß Ingo
PS eine Rückmeldung wäre nett...
Anzeige
AW: linear Interpolieren
14.11.2005 16:44:09
Sven
Hallo Ingo,
danke das Die Dir so viel Arbeit gemacht hast. Aber meine Wünsche scheinen ja ziemlich schwer zu erläutern zu sein. Defakto möchte ich eine Matrixmultiplikation durchführen von zwei Vektoren (1xn)und(nx1) sodaß in der Lösung ein Wert herauskommt. Der Vektor (nx1)ist bekannt der Vektor (1xn) soll aber implizit erst durch die Interpolation errechnet werden. Letzendlich will ich eine Multipikation von Vektoren durchführen, bei dem der eine Vektor erst durch die vorher zu lösende Interpolation ermittelt wird. Vielleicht kannst Du mir hierfür eine benutzerdefinierte Funktion schreiben!
Vielen Dank im voraus!
Anzeige
AW: linear Interpolieren
14.11.2005 16:49:55
Sven
Hallo Ingo,
danke das Die Dir so viel Arbeit gemacht hast. Aber meine Wünsche scheinen ja ziemlich schwer zu erläutern zu sein. Defakto möchte ich eine Matrixmultiplikation durchführen von zwei Vektoren (1xn)und(nx1) sodaß in der Lösung ein Wert herauskommt. Der Vektor (nx1)ist bekannt der Vektor (1xn) soll aber implizit erst durch die Interpolation errechnet werden. Letzendlich will ich eine Multipikation von Vektoren durchführen, bei dem der eine Vektor erst durch die vorher zu lösende Interpolation ermittelt wird. Vielleicht kannst Du mir hierfür eine benutzerdefinierte Funktion schreiben!
Vielen Dank im voraus!
Anzeige
AW: linear Interpolieren
15.11.2005 10:59:37
ingoG
Hallo Sven,
in Deinem Beispiel erzeugst Du ja nur eine 3X3-Matrix, mit der du keine Probs haben solltest bezüglich der 256 Spalten ;-)
Mir ist immer noch nicht klar wie das reale ergebnis aussehen soll.
(MMult() liefert ja eine NxN-Matrix, die du bei N&gt256 nicht mehr auf einem TB darstellen kannst...)
wenn Du mehr als 256 interpolierte werte erzeugst wirst Du ja auf jeden fall probleme mit der Darstellung bekommen.
Gruß Ingo
Anzeige
AW: linear Interpolieren
15.11.2005 11:11:56
Sven
Hallo Ingo mein Beispiel in der Realität ist viel größer. Defakto möchte ich einen Vektor aus 3275 Diskontfaktoren (die durch die Interpolation noch aus einer Datenreihe ermittekt werden müssen) mit einem Vektor aus 3275 Cash-flows( 1 CF je Diskontfaktor) multiplizieren. Wenn ich diese Rechnung durchführe, habe ich einn Barwert für eine Zinsstruktur. Ich habe aber 4000 Zinsstrukturen. Somit ist es mir nicht möglich durch die Begrenzung in Excel die Daten in ein Arbeitsblatt zu bekommen. Deshalb wäre es mir wichtig die Interpolation innerhalb des einen Vektors bei der Marixmultiplikation durchzuführen.
Ingo ich hoffe jetzt habe ich Dich nicht vollends verwirrt. Schreib einfach falls DU noch weitere Fragen hast.
Gruß
Anzeige
AW: linear Interpolieren
15.11.2005 18:18:01
ingoG
Hallo Sven,
ich glaub, jetzt hab ichs verstanden...
Mir war nicht klar, was Du mit Matrixmultiplikation gemeint hast.
Du meinst das Skalarprodukt oder Summenprodukt
also die Summe der Produkte der einzelnen Vektorwerte
ich hänge dir am besten mal eine Datei an, die wie folgt aufgebaut ist:
in Spalte A: bekannte x-Werte
in Spalte B: bekannte y-Werte
in spalte c: x-Werte für die Interpolation
dann startest Du das Macro und erhälst
in spalte D: interpolierte y-Werte zu den jeweiligen x-Werten
und in F1 das Skalarprodukt der beiden Vektoren...
Du könntest dort nat. auch die formel =summenprodukt(c1:c5000*d1:d5000) hinschreiben.
https://www.herber.de/bbs/user/28417.xls
Ich hoffe, das war es was Du meintest.
Gruß Ingo
PS eine Rückmeldung wäre nett...
Anzeige
AW: linear Interpolieren
16.11.2005 21:05:04
Sven
Hallo Ingo,
vielen Dank für Deine unverminderte Bereitschaft mein Problem zu lösen. Die Lösung die Du mir zuletzt angeboten hast ist o.k. aber so weit war ich selbst auch schon. Ich erkläre mein immer noch bestehendes Problem am besten an der datei die Du mir geschickt hast.In Spalte A sind die X-Werte und in Spalte B die Y-Werte, die die Ausgangsdaten liefern,dieskann so bleiben und ist o.k.. Dann habe ich wie von Dir vorgegeben in Spalte C die Werte für die der dazugehörige Y-Wert gesucht wird. In meinem Fall habe ich hier 3000 Werte. Aber ich habe nicht nur einmal diesen Fall für den ich interpoliern möchte sondern 4000 dieser Fälle. Nun ist klar das ich die interploierten Werte wie in Spalte D einfach bestimmen kann. Aber ich habe ja 4000 dieser Fälle. Excel hat aber nur 256 Spalten und ich will mein Bsp. in einer Tabelle unterbringen. Ach die Dimension kann ich nicht ändern, denn wenn ich meine interploierten Werte in die Zeilen schreibe recht dies zwar aus aber jetzt bin ich ja wieder mit den SPalten beschränkt. Letztendlich bräuchte ich eine Tabelle die 3000 Spalten und 4000 Zeilen oder umgekehrt hat. Somit habe ich mir gedacht, wenn das interpolierte Ergebis in einem Zwischenspeicher bleibt (ein Feld in Excel)dann könnte man ja mit diesen Werten immer das Summenprodukt mit einem anderen Zahlenbereich ermittelt, denn letztendlich bräuchte ich dann nur 4000 Felder für meine Lösungen denn eine Zwischnausgabe der interpolierten Werte gibt es nicht!
Vielleicht kannst Du mir ja diesen Fall löse, da gibt es sicherlich einen ANsatz in Excel bloß ich bin nicht so geübt um diesen Fall zu lösen.
Danke für die Hilfe
Anzeige
AW: linear Interpolieren
17.11.2005 11:08:53
ingoG
Hallo Sven,
wie kommen denn Deine 4000 Varianten nach Excel?
Wenn du diese irgendwo stehen hast, kann ich dir 4000 Lösungen dafür geben...
Mir ist übrigens immer noch nicht klar, was im Endeffekt dabei rauskommen soll.
Momentan erhälst Du von mir für einen Satz von zB 3000 Werten das dazugeörige Summenprodukt.
bei 4000 verschiedenen Sätzen bekommst Du dann nat 4000 Werte
Da du immer noch keine Datei hochgeladen hast, in der deine Struktur vorkommt, fällt es mir schwer, mir für die Darstellung eine Lösung vorzustellen.
Da die Grenze von 256x65536 Zellen in Excel unumstößlich ist, muß Dir doch eine Darstellungsform vorschweben, die alle informationen enthält, die du benötigst.
in VBA kann man nat. Felder in einer Größe von 3000x4000 erstellen.
die Frage ist nur, wie willst Du diese anzeigen und wie sollen sie nach dem Schließen der Datei, bzw nach Ablauf des Macros abgespeichert werden, da spätestens dann die Werte im Nirvana verschwinden.
Du kannst Dir dazu ja nochmal Gedanken machen...
Gruß Ingo
AW: linear Interpolieren
17.11.2005 11:49:57
Sven
Hallo Ingo noch einmal eine Datei von mir. Ich hab diese ein wenig eingedampft, denn sonst ist diese zu groß. In den Grunddaten stehen für Laufzeiten und einzelne Tage jeweils die Daten. In dem Arbeitsblatt Cash-flow steht mein CF der eine bestimmte Laufzeitstruktur hat. Für jeden einzelnen Tag bei den Grunddaten muß ich den CF mit den Faktoren für die jeweilige Laufzeit abzinsen. (also Summenprodukt)Wie Du siehst habe ich in den Grunddaten aber nur bestimmte Laufzeiten je Tag. Um ein Ergebnis pro Tag zu müssen die Faktoren erst noch gemäß der Struktur negen em Cash-flow interpoliert werden um diese interpolierten Werte dann mit dem CF multipizieren zu können. Das Endergebnis ohne die interploierten Werte je Tag anzeigen zu müssen möchte ich in der Spalte Ergebnisse im Blatt Cash-flow ausgeben. Ich habe jetzt nur Datümer bis 29.03.01 als Ergebnisse ausgegeben. In meiner Orginaldatei habe ich nicht nur Daten bis 29.03.01 sondern noch für mehr als 2000 andere Tage.
neue Datei:
https://www.herber.de/bbs/user/28467.zip
Vieleicht kommst DU ja jetzt weiter. Es wäre super!
Gruß Sven

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige