Gauss-Eliminierung

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
meta
User
Beiträge: 3
Registriert: Sonntag 3. Dezember 2017, 16:20

Gauss-Eliminierung

Beitragvon meta » Sonntag 3. Dezember 2017, 16:27

Hallo zusammen,

ich habe da ein Problem mit meinem Code
Es geht um die Eliminierung mithilfe von Gauss
  1.     for k in range(n):
  2.  
  3.         maxelem = abs(A[k:,k]).argmax() + k
  4.  
  5.         if maxelem > k:
  6.             lowRowA         = A[k]
  7.             A[k]            = A[maxelem]
  8.             A[maxelem]      = lowRowA
  9.  
  10.             lowRowB         = b[k]
  11.             b[k]            = b[maxelem]
  12.             b[maxelem]      = lowRowB
  13.            
  14.             for row in A[k+1,n]:
  15.                 ratio  = A[k]/row[k]
  16.  
  17.                 A[row] = A[k] - ratio*A[row]
  18.                 b[row] = b[k] - ratio*b[row]
  19.  
  20.     return A, b


der Fehler ist in diesem Block:
IndexError: index -9223372036854775808 is out of bounds for axis 0 with size 4

Ich bin noch ein Neuling was programmieren angeht.


kann mir wer da weiterhelfen
Danke
mfg meta
Sirius3
User
Beiträge: 7051
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Gauss-Eliminierung

Beitragvon Sirius3 » Sonntag 3. Dezember 2017, 18:25

@meta: um das Problem nachvollziehen zu können, braucht es die vollständige Fehlermeldung und ein lauffähiges Programm. Numpy macht keine Kopien des Inhalts bei einfachem Indexzugriff, so dass Deine Swap-Operationen nicht funktionieren. Schau Dir mal an welchen Werte »row« hat, und wie Du ihn benutzt.
meta
User
Beiträge: 3
Registriert: Sonntag 3. Dezember 2017, 16:20

Re: Gauss-Eliminierung

Beitragvon meta » Sonntag 3. Dezember 2017, 18:56

Hallo
Danke für deine Antwort.

  1. def gaussian_elimination(A: np.ndarray, b: np.ndarray, use_pivoting: bool = True) -> (np.ndarray, np.ndarray):
  2.  
  3.    
  4.      # TODO: Perform gaussian elimination
  5.     for k in range(n):
  6.  
  7.         maxelem = abs(A[k:,k]).argmax() + k
  8.  
  9.         if maxelem > k:
  10.             lowRowA         = A[k]
  11.             A[k]            = A[maxelem]
  12.             A[maxelem]      = lowRowA
  13.  
  14.             lowRowB         = b[k]
  15.             b[k]            = b[maxelem]
  16.             b[maxelem]      = lowRowB
  17.            
  18.             for row in A[k+1,n]:
  19.                 ratio  = A[k]/row[k]
  20.  
  21.                 A[row] = A[k] - ratio*A[row]
  22.                 b[row] = b[k] - ratio*b[row]
  23.  
  24.     return A, b


der Fehler der ausgegeben wurde bei python
<ipython-input-33-269e413bb7a7> in gaussian_elimination(A, b, use_pivoting)
50 b[maxelem] = lowRowB
51
---> 52 for row in A[k+1,n]:
53 ratio = A[k]/row[k]
54

IndexError: index 4 is out of bounds for axis 1 with size 4

ich habe es da mit der Matrix A:
array([[ 1, 1, 3, 1],
[ 3, 1, 1, 2],
[ 4, 2, 4, 3],
[ 2, 0, -2, 1]])

und b:
mit dem 0 Vektor.
meta
User
Beiträge: 3
Registriert: Sonntag 3. Dezember 2017, 16:20

Re: Gauss-Eliminierung

Beitragvon meta » Sonntag 3. Dezember 2017, 19:28

Ich habe den swap nochmal überarbeitet würde das ausreichen :

  1.         if maxelem > k:
  2.             A[[k,maxelem]] = A[[maxelem, k]]
  3.             b[[k,maxelem]] = b[[maxelem, k]]
Sirius3
User
Beiträge: 7051
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Gauss-Eliminierung

Beitragvon Sirius3 » Sonntag 3. Dezember 2017, 22:22

@meta: wäre das der Code, müßte ein NameError kommen, weil `n` nicht definiert ist. Ja, so kann man zwei Zeilen tauschen. Und nochmal der Tipp: schau Dir an, was `row` ist, bzw. sein sollte.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder