forked from denizdonmez/numethods
new methods; eigenvalue. condition number implemetation
eigenvalue module, readme and demo update. condition number implemented in linalg.py
This commit is contained in:
@@ -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()
|
||||
|
Reference in New Issue
Block a user