Gauß Elimination

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Einsteigercoder
User
Beiträge: 3
Registriert: Donnerstag 3. Dezember 2020, 01:56

Ich hab ehier ein problem mir wird gesagt das n undefiniert ist woran liegt es?

def gaussian_elimination(A: np.ndarray, b: np.ndarray, use_pivoting: bool = True) -> (np.ndarray, np.ndarray):
"""
Gaussian Elimination of Ax=b with or without pivoting.

Arguments:
A : matrix, representing left side of equation system of size: (m,m)
b : vector, representing right hand side of size: (m, )
use_pivoting : flag if pivoting should be used

Return:
A : reduced result matrix in row echelon form (type: np.ndarray, size: (m,m))
b : result vector in row echelon form (type: np.ndarray, size: (m, ))

Raised Exceptions:
ValueError: if matrix and vector sizes are incompatible, matrix is not square or pivoting is disabled but necessary

Side Effects:
-

Forbidden:
- numpy.linalg.*
"""
# Create copies of input matrix and vector to leave them unmodified
A = A.copy()
b = b.copy()

# TODO: Test if shape of matrix and vector is compatible and raise ValueError if not
n = A.shape
if b != n:
raise ValueError("Invalid argument: incompatible sizes between A & b.", b.size, n)
# TODO: Perform gaussian elimination
for i in range (n):
for j in range(i+1,n):
faktor = A[j,i]/A[i,i]
b[j] -= b*faktor
for k in range(i,n):
A[j,k] -= A[i,k] *faktor
return A, b
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Einsteigercoder: Bei dem Code bekommst Du das bestimmt nicht gesagt, denn bevor da irgendetwas undefiniert sein kann, müsste das erst einmal am Compiler vorbei kommen. Der steigt aber schon mit einem Syntaxfehler wegen unerwarteter Einrückung aus.

Was man auch einfach am Beitrag schon direkt hätte sehen können wenn der Code in den dafür vorgesehenen Tags gesetzt wäre (</>-Schaltfläche im vollständigen Beitragseditor):

Code: Alles auswählen

def gaussian_elimination(A: np.ndarray, b: np.ndarray, use_pivoting: bool = True) -> (np.ndarray, np.ndarray):
    """
    Gaussian Elimination of Ax=b with or without pivoting.

    Arguments:
    A : matrix, representing left side of equation system of size: (m,m)
    b : vector, representing right hand side of size: (m, )
    use_pivoting : flag if pivoting should be used

    Return:
    A : reduced result matrix in row echelon form (type: np.ndarray, size: (m,m))
    b : result vector in row echelon form (type: np.ndarray, size: (m, ))

    Raised Exceptions:
    ValueError: if matrix and vector sizes are incompatible, matrix is not square or pivoting is disabled but necessary

    Side Effects:
    -

    Forbidden:
    - numpy.linalg.*
    """
    # Create copies of input matrix and vector to leave them unmodified
    A = A.copy()
    b = b.copy()

    # TODO: Test if shape of matrix and vector is compatible and raise ValueError if not
    n = A.shape
     if b != n:
     raise ValueError("Invalid argument: incompatible sizes between A & b.", b.size, n)
    # TODO: Perform gaussian elimination
    for i in range (n):
        for j in range(i+1,n):
            faktor = A[j,i]/A[i,i]
            b[j] -= b[i]*faktor
            for k in range(i,n):
                A[j,k] -= A[i,k] *faktor
    return A, b
Die Typannotation für den Rückgabetyp ist syntaktisch falsch. Oder womit prüfst Du das? mypy lässt das Tupel da jedenfalls nicht durchgehen:

Code: Alles auswählen

forum21.py:6: error: Syntax error in type annotation
forum21.py:6: note: Suggestion: Use Tuple[T1, ..., Tn] instead of (T1, ..., Tn)
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Einsteigercoder
User
Beiträge: 3
Registriert: Donnerstag 3. Dezember 2020, 01:56

ich krieg jtz bei if b!= n: eine Fehlermeldung
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Einsteigercoder: Was heisst ”jetzt”? Das ist der Fehler den Dein Code soweit wir ihn kennen halt auslöst.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und was glaubst du sollen wir mit dieser Information anfangen?

Schreib ganze Saetze, liefere Code in Code-Tags, und zeig vollstaendige Fehlermeldungen.
Antworten