Forum / Numerische Methoden der Ingenieurwissenschaften / 1.Test

1.Test

Hi,

wie bereitet man sich am besten auf den ersten Test vor?

Gibt es irgendwo gute Unterlagen?

Soll ich aus dem VO-Skript lernen?

Danke

Franz +1

Anschlussfrage: Könnte jemand der Kollegen, die gestern den Test geschrieben haben posten, was gekommen ist?

Vor allem, was man bezüglich Python wissen musste und wie die Formelsammlung aussieht wäre hilfreich zu wissen!

Wenn jemand Fotos hat möge er die bitte posten!

Danke

Falk +1

Die Formelsammlung ist in einem thread vom letzten Jahr im PDV 1 kolloquium. Es kam gauss/-seidel, splineinterpolation ausgleichsrechnung, händlisch und pseudocode soweit ich weiß.

FRAGE: zu Gauß Seidel, warum schreibe ich in Python: for j in range(0, i) : sum += A[i,j]*x[j] for j in range(i+1, n) : sum += A[i,j]*x[j]
Obwohl wenn man nch den indizes in der Formel geht j von 1 bis i-1 gehen sollte. dachte erst das ist wieder wegen der anderen zählweise bei python, aber die zweite summe geht hat tatsächlich, so wie in der formel von i+1 bis n Danke

Anicia ±0

[MENTION=3017]Falk[/MENTION] wie ist denn die Splineinterpolation gekommen? Ich find da keine Rechenbeispiele dazu, hast du da was? Danke

Falk ±0

keine ahnung, auf facebook hat jemand geschrieben: Bei mir war gauss seidel zu programmieren dann einen iterationsschritt händisch durchführen interpolationspolynom anschreiben ... Interpolation mit linearen splines und dann noch ne ausgleichsrechnung die man mit gaussverfahren auflösen musste

Anicia ±0

ok danke! Ich hab die Theorie für lineare Splines eh vor mir, aber ich hätte gerne ein Rechenbsp wo das angewendet wird..

Falk +1

die ue 4 in python ist ganz gut. Hab mir selbst ein kleines linears bsp ausgedacht: xData: 1,2,3 yData: 2, 2.5, 3 dann musst eben (in 3 schritten, wenn du effizient bist) ein lgs für die eingesetzten werte in p=a+bx+cx² lösen, und rauskommen sollte 1.5 + 0.5x So stell ich mir das vor. Der code dazu ist ja nicht sooo schwer.

Frage: haben wir den code für die berechnung von splines irgendwo? in UE4 wird der nur aufgerufen, aber nicht selbst geschrieben, oder müssen wir das eh nciht selbst programmieren können, sondern nur anwenden? DANKE

Anicia ±0

hm das mit den codes hab ich mich auch schon gefragt, denke die müssen dann nicht selbst geschrieben werden

Clemens ±0

Frage: haben wir den code für die berechnung von splines irgendwo? in UE4 wird der nur aufgerufen, aber nicht selbst geschrieben, oder müssen wir das eh nciht selbst programmieren können, sondern nur anwenden? DANKE

# @param xData x-Koordinaten der Stuetzpunkte, Spaltenvektor! xData[i,0]=xi
# @param yData y-Koordinaten der Stuetzpunkte, Splatenvektor! yData[i,0]=yi
# @param typ Art der Randbedingungen (natural oder slope),String!
# @param BC1 Randbedingung am linken Rand, Skalar!
# @param BC2 Randbedingung am rechten Rand, Skalar!
def splineCoeffs(xData,yData,typ='natural',BC1 = 0.0, BC2 = 0.0):
  
  if len(xData)!= len(yData):
    return 'ERROR INPUT_DIMENSIONS'

  m = len(xData) # Anzahl der Datenpunkte
  n = m - 1     # Anzahl der kubischen Polynome

  coeffMatrix = numpy.zeros((n,4)) ## Koeffizienten aller kubischen Polynome
  ## coeffMatrix[i,0] = ai
  ## coeffMatrix[i,1] = bi
  ## coeffMatrix[i,2] = ci
  ## coeffMatrix[i,3] = di
  
  # Get ai -> ai = yData(xi) siehe Eq. (3.27)
  for i in range(0,n,1):
    coeffMatrix[i,0] = yData[i,0]

  # Berechne ci (i=2,...,n) laut Eq. (3.31)
  matrix = numpy.zeros((n-1,n-1)) # Matrix laut Eq. (3.31) 
  vector = numpy.zeros((n-1,1))   # Vektor laut Eq. (3.31)
  for i in range(0,n-1,1): # Achtung auf Indizes - > vgl. mit Skriptum ntw.
    hi   = (xData[i+2,0]-xData[i+1,0])
    him1 =  (xData[i+1,0]-xData[i,0])
    matrix[i,i] = 2*(hi + him1)
    vector[i,0] = 3*((yData[i+2,0]-yData[i+1,0])/hi\
              -(yData[i+1,0]-yData[i,0])/him1)

    if i == 0:
      matrix[i,i+1] = (xData[i+2,0]-xData[i+1,0])
    elif i == n-2:
      matrix[i,i-1] = (xData[i+1,0]-xData[i,0])
    else:
      matrix[i,i+1] = (xData[i+2,0]-xData[i+1,0])
      matrix[i,i-1] = (xData[i+1,0]-xData[i,0])

  ci = numpy.linalg.solve(matrix,vector)
  # Kopiere ci in die Koeffizientenmatrix
  for i in range(0,n-1,1):
    coeffMatrix[i+1,2] = ci[i,0]

   # SPLINE NATURAL
  if typ =='natural':
    # Berechne c0 aus RB ddP0(x0) = dd0 -> dd0  vorgegeben
    coeffMatrix[0,2] = BC1/2.0
  
    # Berechne di und bi (i=1,...,n-2)
    for i in range(0,n-1,1):
      him1 =  (xData[i+1,0]-xData[i,0])
      coeffMatrix[i,1] = (yData[i+1,0]-yData[i,0])/him1 -\
                 him1/3*(coeffMatrix[i+1,2]+2*coeffMatrix[i,2]) 
      coeffMatrix[i,3] = (coeffMatrix[i+1,2]-coeffMatrix[i,2])/(3*(him1))
  
    # Berechne dn-1 aus ddPn-1 = ddn -> ddn vorgegeben
    hnm1=(xData[n,0]-xData[n-1,0])
    coeffMatrix[n-1,3] = (BC2-2*coeffMatrix[n-1,2])/(6*hnm1)

    # Berechne bn-1 aus Pn-1(xn)=yn 
    coeffMatrix[n-1,1] = (yData[n,0]-yData[n-1,0])/hnm1 -\
               coeffMatrix[n-1,2]*hnm1 - coeffMatrix[n-1,3]*hnm1**2
  
   # SPLINE SLOPE
  elif typ == 'slope':
    # Berechne b0 aus dP0(0)= BC1
    coeffMatrix[0,1]= BC1

    # Berechne c0 aus Eq. (3.30)
    h1m1 = xData[1,0]-xData[0,0]
    #print yData[1,0]-yData[0,0]
    coeffMatrix[0,2] =-1.0/2.0*(3*coeffMatrix[0,1]/h1m1-\
                3*(yData[1,0]-yData[0,0])/h1m1**2+coeffMatrix[1,2])

    # Berechne di und bi (i=1,...,n-2)
    for i in range(0,n-1,1):
      him1 =  (xData[i+1,0]-xData[i,0])
      coeffMatrix[i,1] = (yData[i+1,0]-yData[i,0])/him1 -\
                 him1/3*(coeffMatrix[i+1,2]+2*coeffMatrix[i,2]) 
      coeffMatrix[i,3] = (coeffMatrix[i+1,2]-coeffMatrix[i,2])/(3*(him1))

    # Berechne dn-1 und bn-1 aus dPn-1(xn)=BC2 und Pn-1(xn)=yn
    hnm1=(xData[n,0]-xData[n-1,0])
    
    #dn-1
    coeffMatrix[n-1,3]=(-coeffMatrix[n-1,2]/hnm1+BC2/hnm1**2-\
            (yData[n,0]-yData[n-1])/hnm1**3)*0.5
  
    #bn-1
    coeffMatrix[n-1,1]=BC2-2*coeffMatrix[n-1,2]*hnm1-\
          3*coeffMatrix[n-1,3]*hnm1**2  

  return coeffMatrix\n~~~

Bitteschön.
Falk ±0

Danke! Haben wir den code dieses Jahr schon in der Übung durchgesprochen -> also müssen wir den inhalt wiedergeben können, oder nur anwenden? (anwenden im sinne von die schnittstellen wissen)

Sorry, die Kommentarfunktion ist geschlossen.