Prüfungsfrage 02 – Biegebalken, lineare Interpolation

 

Sie haben die Verformung u eines Balkens unter Einwirkung einer Last P gemessen.
Dabei wurden in mehreren Messserien insgesamt n verschiedene Lasten {P_i}\:,\:i = 1,2,...,n aufgebracht, und die zugehörigen Verformungen {u_i} gemessen.
Nun wollen Sie als Näherung an die unbekannte Funktion u\left( P \right) zwischen den gemessenen Werten abschnittsweise linear interpolieren, d.h. für einen gegebenen Lastwert P sollen die beiden nächstgelegenen gemessenen Lastwerte {P_j} und {P_{j+1}} bestimmt werden, so dass {P_j} \leq P \leq {P_{j+1}} ist.
Dann soll zwischen den Punkten \left( {{P_j};{u_j}} \right) und \left( {{P_{j+1}};{u_{j+1}}} \right) linear interpoliert werden auf den gesuchten Wert \left( {P;u} \right).
Geben Sie an, wie Sie die Aufgabe lösen wollen. Dabei soll berücksichtigt werden, dass Sie die Interpolationsaufgabe m-mal mit m > > n lösen wollen!

Lösung

Dateneingabe in Form von:

  • Liste, Array, Hashtable
  • AVL-Baum

Seien dies die Ermittelten Messwerte u in Abhängigkeit von P:

inf-messwerte-lineare-interpolation

Um nun linear interpolieren zu können, benötigt man die Steigung der Geraden zwischen den Punkten {P_j} und {P_{j+1}} und kann daraus eine Funktion für u\left( P \right) aufstellen:

inf-lineare-interpolation

m = \frac{{{u_{j+1}}-{u_j}}}{{{P_{j+1}}-{P_j}}}

u\left( P \right) = {u_j}+m \cdot \left( {P-{P_j}} \right)

= {u_j}+\frac{{{u_{j+1}}-{u_j}}}{{{P_{j+1}}-{P_j}}} \cdot \left( {P-{P_j}} \right)

Bestimmen der beiden nächstgelegenen gemessenen Lastwerte:

Dies könnte man in einer Liste mit folgender Schleife realisieren: (Pseudocode)

for k = 1 to m
for j = 1 to n
		If P(j) <= P
			u(P)= u(j)+(u(j+1)-u(j))/(P(j+1)-P(j))*(P-P(j))
			break
next j
next k

Andere Variante: Baum

Knoten = Root
Suche(Knoten)
if Knoten.value > P
		Suche(Knoten.Left)
if P(j) == null OR Knoten.left.value < P And
Knoten.left.value > P(j) then P(j) = Knoten.left.value
	else
		Suche(Knoten.Right)