Matrix Calculator with Step-by-Step Linear Algebra

import numpy as np

import sympy as sp


# --------------------------------------

# Input Matrix

# --------------------------------------


def input_matrix():

    rows = int(input("Enter number of rows: "))

    cols = int(input("Enter number of columns: "))


    matrix = []


    print("Enter matrix values row by row:")


    for i in range(rows):

        row = list(map(float, input().split()))

        matrix.append(row)


    return np.array(matrix)



# --------------------------------------

# Determinant

# --------------------------------------


def calculate_determinant(matrix):

    sym_matrix = sp.Matrix(matrix)


    print("\nMatrix:")

    sp.pprint(sym_matrix)


    det = sym_matrix.det()


    print("\nDeterminant calculation:")

    print(det)


    return det



# --------------------------------------

# Matrix Inverse

# --------------------------------------


def calculate_inverse(matrix):

    sym_matrix = sp.Matrix(matrix)


    print("\nMatrix:")

    sp.pprint(sym_matrix)


    try:

        inverse = sym_matrix.inv()


        print("\nInverse Matrix:")

        sp.pprint(inverse)


        return inverse


    except:

        print("Matrix is not invertible.")

        return None



# --------------------------------------

# Eigenvalues

# --------------------------------------


def calculate_eigenvalues(matrix):

    sym_matrix = sp.Matrix(matrix)


    print("\nMatrix:")

    sp.pprint(sym_matrix)


    eigenvals = sym_matrix.eigenvals()


    print("\nEigenvalues:")


    for val, mult in eigenvals.items():

        print(f"{val} (multiplicity {mult})")


    return eigenvals



# --------------------------------------

# MAIN

# --------------------------------------


if __name__ == "__main__":


    matrix = input_matrix()


    print("\nChoose operation:")

    print("1. Determinant")

    print("2. Inverse")

    print("3. Eigenvalues")


    choice = input("Enter choice: ")


    if choice == "1":

        calculate_determinant(matrix)


    elif choice == "2":

        calculate_inverse(matrix)


    elif choice == "3":

        calculate_eigenvalues(matrix)


    else:

        print("Invalid option")

No comments: