Date: prev next · Thread: first prev next last
2021 Archives by date, by thread · List index


Am 13.02.2021 um 16:41 schrieb Boris Kirkorowicz:
Hallo,
aus einer Tabelle mit nicht ganz regelmäßigen Werten möchte ich
Ergebniswerte aus Zwischenwerte der Eingangszahlen bilden. So eine
Tabelle sieht bspw. so aus:

    A       B       C       D       E
            30      40      50      60
1   1000    801     701     613     528
2   2000    708     608     611     525
2   3000    707     606     519     524
4   4000    706     606     518     523

Ähm; eine Zeile 0 gibt es nicht; das muss so ausschauen:

        A       B       C       D       E
 1              30      40      50      60
 2      1000    801     701     613     528
 3      2000    708     608     611     525
 4      3000    707     606     519     524
 5      4000    706     606     518     523


Wenn jetzt das Wertepaar 43/2700 die in den Spalten-/Zeilenköpfen
gelisteten Eingangswerte bildet, müsste ein Wert zwischen den Zellen C2
und D3 herauskommen,

Und dementprechend C3 und D4 heißen.

und zwar mit der Gewichtung 30% über Spalte C in
Richtung D und 70% über Zeile 2 in Richtung 3.

Genau so würde ich auch vorgehen; d. h. zuerst würde ich vertikal
zwischen C3 und C4 sowie zwischen D3 und D4 linear interpolieren, und
dann horizontal zwischen diesen beiden Zwischenwerten (man könnte
natürlic hauch umgekehrt vorgehen, das Ergebnis ist das gleiche)). Das
geht entweder über Hilfszellen oder in einem Makro.

Ich stell mal die erstere Variante vor, ausführlich, zum verstehen.
Angenommen, als Hilfszellen wird die Spalte H verwendet, und die
Eingangswerte stehen in H1 bzw. H2:

H1 = 43
H2 = 2700

Dann kann in H3 erst mal die vertikale Position des unteren Grenzwertes,
und folgend die beiden Grenzwerte sowie den Abstand (dahinter als String
immer der Zellwert):

H3 = VERGLEICH(H$2;A2:A5;1)     "2"
H4 = VERSCHIEBUNG($A$1;H3;0)    "2000"
H5 = VERSCHIEBUNG($A$1;H3+1;0)  "3000"
H6 = H5-H4      "1000"

Und der relative Abstand:

H7 = (H2-H4)/H6 "0,7"

Und das gleiche mit den horizontalen Werten:

H8 = VERGLEICH(H$1;B1:E1;1)     "2"
H9 = VERSCHIEBUNG($A$1;0;H7)    "40"
H10 = VERSCHIEBUNG($A$1;0;H7+1) "50"
H11 = H9-H8     "10"
H12 = (H1-H9)/H11       "0,3"

Jetzt kannst du die Ausgangswerte Zwischenspeichern:

H13 = VERSCHIEBUNG($A$1;H$3;H$7)        "608"
H14 = VERSCHIEBUNG($A$1;H$3+1;H$7)      "606"
H15 = VERSCHIEBUNG($A$1;H$3;H$7+1)      "611"
H16 = VERSCHIEBUNG($A$1;H$3+1;H$7+1)    "519"


Jetzt kannst du vertikal interpolieren:

H17 = H13+((H14-H13)*H7)  "606,6" (entspricht sozusagen Zelle C4,3)
H18 = H15+((H16-H15)*H7)  "546,6" (entspricht sozusagen Zelle D4,3)

Und horizontal:

=H17+((H18-H17)*H12)    "588,6" (entspricht sozusagen Zeile 3,7)

Dazu stelle ich mir eine Formel vor,

/Eine/ Formel reicht da nicht, das ist schon eine komplexerer
Algorithmus. Und schreit eigentlich auch nach einem Makro, aber dafür
muss man etwas Erfahrung haben (die ich vorsichtshalber erst mal nicht
voraussetze).

die die beiden Eingangswerte aus
jeweils einer eigenen Zelle entnimmt und dann in der Tabelle schaut, wo
der Eingangswert darunter und der darüber zu finden ist, die relativen
Abstände ermittelt und daraus dann den gewichteten Zwischenwert
errechnet, und das zugleich in X- wie in Y-Richtung. Das scheint mir
einigermaßen komplex, aber der Bedarf daran ist sicher kein Einzelfall.

Doch; eindimensionales Interpolieren ist mir gelegentlic hschon mal
unter gekommen, aber du bist der erste, der das zweidimensional möchte.

Gibt es vielleicht irgendwo eine Vorlage, von der ich abkupfern und
lernen kann?

Ich fürchte, nein.

Wolfgang
-- 



-- 
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.