Seite 1 von 1

Gauß Elimination

Verfasst: Samstag 12. Dezember 2020, 01:16
von Einsteigercoder
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

Re: Gauß Elimination

Verfasst: Samstag 12. Dezember 2020, 08:15
von __blackjack__
@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)

Re: Gauß Elimination

Verfasst: Samstag 12. Dezember 2020, 16:11
von Einsteigercoder
ich krieg jtz bei if b!= n: eine Fehlermeldung

Re: Gauß Elimination

Verfasst: Samstag 12. Dezember 2020, 16:16
von __blackjack__
@Einsteigercoder: Was heisst ”jetzt”? Das ist der Fehler den Dein Code soweit wir ihn kennen halt auslöst.

Re: Gauß Elimination

Verfasst: Samstag 12. Dezember 2020, 16:16
von __deets__
Und was glaubst du sollen wir mit dieser Information anfangen?

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