new methods; eigenvalue. condition number implemetation

eigenvalue module, readme and demo update. condition number implemented in linalg.py
This commit is contained in:
Deniz
2025-09-17 11:44:12 +03:00
parent baf47bb3a6
commit 5d36dbabb9
5 changed files with 327 additions and 16 deletions

View File

@@ -1,6 +1,6 @@
import sys
sys.path.append("../")
# sys.path.append("../")
from numethods import *
@@ -41,6 +41,9 @@ def demo_qr():
def demo_roots():
f = lambda x: x**2 - 2
df = lambda x: 2 * x
# Newton
steps = NewtonRoot(f, df, x0=1.0).trace()
print("Newton Method Trace (x^2 - 2):")
@@ -85,9 +88,37 @@ def demo_differentiation():
print("Second derivative:", SecondDerivative(f, x0))
def demo_eigen():
# Not sure about eigenvalue methods but let's include some demos
A = Matrix([[4, 1, 1], [1, 3, 0], [1, 0, 2]])
print("\n=== Power Iteration ===")
solver_pi = PowerIteration(A, tol=1e-12, max_iter=100)
lam, x = solver_pi.solve()
solver_pi.trace()
print(f"Dominant eigenvalue ≈ {lam:.6f}, eigenvector ≈ {x}\n")
print("\n=== Inverse Power Iteration (shift=0) ===")
solver_ip = InversePowerIteration(A, shift=0.0, tol=1e-12, max_iter=100)
mu, x = solver_ip.solve()
solver_ip.trace()
print(f"Smallest eigenvalue ≈ {mu:.6f}, eigenvector ≈ {x}\n")
print("\n=== Rayleigh Quotient Iteration ===")
solver_rqi = RayleighQuotientIteration(A, tol=1e-12, max_iter=20)
mu, x = solver_rqi.solve()
solver_rqi.trace()
print(f"Eigenvalue ≈ {mu:.6f}, eigenvector ≈ {x}\n")
M = Matrix([[3, 1, 1], [-1, 3, 1], [1, 1, 3], [0, 2, 1]])
U, S, V = SVD(M).solve()
print("Singular values:", S)
if __name__ == "__main__":
demo_linear_solvers()
demo_roots()
demo_interpolation()
demo_qr()
demo_differentiation()
demo_eigen()