forked from denizdonmez/numethods
update examples/demo.py and tutorials/tutorial4_root_finding.ipynb# On branch main
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import sys
|
||||
sys.path.append('../')
|
||||
|
||||
sys.path.append("../")
|
||||
from numethods import *
|
||||
|
||||
|
||||
@@ -13,6 +14,7 @@ def demo_linear_solvers():
|
||||
print("Jacobi:", Jacobi(A, b, tol=1e-12).solve())
|
||||
print("Gauss-Seidel:", GaussSeidel(A, b, tol=1e-12).solve())
|
||||
|
||||
|
||||
def demo_qr():
|
||||
A = Matrix([[2, -1], [1, 2], [1, 1]])
|
||||
|
||||
@@ -38,11 +40,7 @@ def demo_qr():
|
||||
print("Least squares solution:", x_ls)
|
||||
|
||||
|
||||
|
||||
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):")
|
||||
@@ -74,6 +72,7 @@ def demo_interpolation():
|
||||
print("Newton interpolation at", t, "=", newt.evaluate(t))
|
||||
print("Lagrange interpolation at", t, "=", lagr.evaluate(t))
|
||||
|
||||
|
||||
def demo_differentiation():
|
||||
f = lambda x: x**3 # f'(x) = 3x^2, f''(x) = 6x
|
||||
x0 = 2.0
|
||||
@@ -86,7 +85,6 @@ def demo_differentiation():
|
||||
print("Second derivative:", SecondDerivative(f, x0))
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
demo_linear_solvers()
|
||||
demo_roots()
|
||||
|
@@ -161,7 +161,7 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from numethods import Bisection, FixedPoint, NewtonRoot, Secant\n",
|
||||
"from numethods import Bisection, FixedPoint, NewtonRoot, Secant, print_trace\n",
|
||||
"import math\n",
|
||||
"\n",
|
||||
"# Example function: f(x) = x^2 - 2\n",
|
||||
@@ -193,6 +193,105 @@
|
||||
" print('Fixed-point failed:', e)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"id": "7f8fe13e",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Newton Method Trace (x^2 - 2):\n",
|
||||
" iter | x | f(x) | df(x) | x_new | error\n",
|
||||
"------------------------------------------------------------------------------\n",
|
||||
" 0 | 1 | -1 | 2 | 1.5 | 0.5\n",
|
||||
" 1 | 1.5 | 0.25 | 3 | 1.41667 | 0.0833333\n",
|
||||
" 2 | 1.41667 | 0.00694444 | 2.83333 | 1.41422 | 0.00245098\n",
|
||||
" 3 | 1.41422 | 6.0073e-06 | 2.82843 | 1.41421 | 2.1239e-06\n",
|
||||
" 4 | 1.41421 | 4.51061e-12 | 2.82843 | 1.41421 | 1.59472e-12\n",
|
||||
"\n",
|
||||
"Secant Method Trace (x^2 - 2):\n",
|
||||
" iter | x0 | x1 | x2 | f(x0) | f(x1) | error\n",
|
||||
"-------------------------------------------------------------------------------------------\n",
|
||||
" 0 | 0 | 2 | 1 | -2 | 2 | 1\n",
|
||||
" 1 | 2 | 1 | 1.33333 | 2 | -1 | 0.333333\n",
|
||||
" 2 | 1 | 1.33333 | 1.42857 | -1 | -0.222222 | 0.0952381\n",
|
||||
" 3 | 1.33333 | 1.42857 | 1.41379 | -0.222222 | 0.0408163 | 0.0147783\n",
|
||||
" 4 | 1.42857 | 1.41379 | 1.41421 | 0.0408163 | -0.00118906 | 0.000418335\n",
|
||||
" 5 | 1.41379 | 1.41421 | 1.41421 | -0.00118906 | -6.00729e-06 | 2.12421e-06\n",
|
||||
" 6 | 1.41421 | 1.41421 | 1.41421 | -6.00729e-06 | 8.93146e-10 | 3.15775e-10\n",
|
||||
" 7 | 1.41421 | 1.41421 | 1.41421 | 8.93146e-10 | -8.88178e-16 | 2.22045e-16\n",
|
||||
"\n",
|
||||
"Bisection Method Trace (x^2 - 2):\n",
|
||||
" iter | a | b | c | f(a) | f(b) | f(c) | interval\n",
|
||||
"--------------------------------------------------------------------------------------------------------\n",
|
||||
" 0 | 0 | 2 | 1 | -2 | 2 | -1 | 2\n",
|
||||
" 1 | 1 | 2 | 1.5 | -1 | 2 | 0.25 | 1\n",
|
||||
" 2 | 1 | 1.5 | 1.25 | -1 | 0.25 | -0.4375 | 0.5\n",
|
||||
" 3 | 1.25 | 1.5 | 1.375 | -0.4375 | 0.25 | -0.109375 | 0.25\n",
|
||||
" 4 | 1.375 | 1.5 | 1.4375 | -0.109375 | 0.25 | 0.0664062 | 0.125\n",
|
||||
" 5 | 1.375 | 1.4375 | 1.40625 | -0.109375 | 0.0664062 | -0.0224609 | 0.0625\n",
|
||||
" 6 | 1.40625 | 1.4375 | 1.42188 | -0.0224609 | 0.0664062 | 0.0217285 | 0.03125\n",
|
||||
" 7 | 1.40625 | 1.42188 | 1.41406 | -0.0224609 | 0.0217285 | -0.000427246 | 0.015625\n",
|
||||
" 8 | 1.41406 | 1.42188 | 1.41797 | -0.000427246 | 0.0217285 | 0.0106354 | 0.0078125\n",
|
||||
" 9 | 1.41406 | 1.41797 | 1.41602 | -0.000427246 | 0.0106354 | 0.00510025 | 0.00390625\n",
|
||||
" 10 | 1.41406 | 1.41602 | 1.41504 | -0.000427246 | 0.00510025 | 0.00233555 | 0.00195312\n",
|
||||
" 11 | 1.41406 | 1.41504 | 1.41455 | -0.000427246 | 0.00233555 | 0.000953913 | 0.000976562\n",
|
||||
" 12 | 1.41406 | 1.41455 | 1.41431 | -0.000427246 | 0.000953913 | 0.000263274 | 0.000488281\n",
|
||||
" 13 | 1.41406 | 1.41431 | 1.41418 | -0.000427246 | 0.000263274 | -8.20011e-05 | 0.000244141\n",
|
||||
" 14 | 1.41418 | 1.41431 | 1.41425 | -8.20011e-05 | 0.000263274 | 9.06326e-05 | 0.00012207\n",
|
||||
" 15 | 1.41418 | 1.41425 | 1.41422 | -8.20011e-05 | 9.06326e-05 | 4.31482e-06 | 6.10352e-05\n",
|
||||
" 16 | 1.41418 | 1.41422 | 1.4142 | -8.20011e-05 | 4.31482e-06 | -3.88434e-05 | 3.05176e-05\n",
|
||||
" 17 | 1.4142 | 1.41422 | 1.41421 | -3.88434e-05 | 4.31482e-06 | -1.72643e-05 | 1.52588e-05\n",
|
||||
" 18 | 1.41421 | 1.41422 | 1.41421 | -1.72643e-05 | 4.31482e-06 | -6.47477e-06 | 7.62939e-06\n",
|
||||
" 19 | 1.41421 | 1.41422 | 1.41421 | -6.47477e-06 | 4.31482e-06 | -1.07998e-06 | 3.8147e-06\n",
|
||||
" 20 | 1.41421 | 1.41422 | 1.41421 | -1.07998e-06 | 4.31482e-06 | 1.61742e-06 | 1.90735e-06\n",
|
||||
" 21 | 1.41421 | 1.41421 | 1.41421 | -1.07998e-06 | 1.61742e-06 | 2.68718e-07 | 9.53674e-07\n",
|
||||
" 22 | 1.41421 | 1.41421 | 1.41421 | -1.07998e-06 | 2.68718e-07 | -4.05632e-07 | 4.76837e-07\n",
|
||||
" 23 | 1.41421 | 1.41421 | 1.41421 | -4.05632e-07 | 2.68718e-07 | -6.84571e-08 | 2.38419e-07\n",
|
||||
" 24 | 1.41421 | 1.41421 | 1.41421 | -6.84571e-08 | 2.68718e-07 | 1.0013e-07 | 1.19209e-07\n",
|
||||
" 25 | 1.41421 | 1.41421 | 1.41421 | -6.84571e-08 | 1.0013e-07 | 1.58366e-08 | 5.96046e-08\n",
|
||||
" 26 | 1.41421 | 1.41421 | 1.41421 | -6.84571e-08 | 1.58366e-08 | -2.63102e-08 | 2.98023e-08\n",
|
||||
" 27 | 1.41421 | 1.41421 | 1.41421 | -2.63102e-08 | 1.58366e-08 | -5.23681e-09 | 1.49012e-08\n",
|
||||
" 28 | 1.41421 | 1.41421 | 1.41421 | -5.23681e-09 | 1.58366e-08 | 5.2999e-09 | 7.45058e-09\n",
|
||||
" 29 | 1.41421 | 1.41421 | 1.41421 | -5.23681e-09 | 5.2999e-09 | 3.15445e-11 | 3.72529e-09\n",
|
||||
"\n",
|
||||
"Fixed-Point Iteration Trace (x^2 - 2):\n",
|
||||
" iter | x | x_new | error\n",
|
||||
"----------------------------------------------------\n",
|
||||
" 0 | 1 | 1.5 | 0.5\n",
|
||||
" 1 | 1.5 | 1.41667 | 0.0833333\n",
|
||||
" 2 | 1.41667 | 1.41422 | 0.00245098\n",
|
||||
" 3 | 1.41422 | 1.41421 | 2.1239e-06\n",
|
||||
" 4 | 1.41421 | 1.41421 | 1.59495e-12\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# Newton\n",
|
||||
"steps = NewtonRoot(f, df, x0=1.0).trace()\n",
|
||||
"print(\"Newton Method Trace (x^2 - 2):\")\n",
|
||||
"print_trace(steps)\n",
|
||||
"\n",
|
||||
"# Secant\n",
|
||||
"steps = Secant(f, 0, 2).trace()\n",
|
||||
"print(\"\\nSecant Method Trace (x^2 - 2):\")\n",
|
||||
"print_trace(steps)\n",
|
||||
"\n",
|
||||
"# Bisection\n",
|
||||
"steps = Bisection(f, 0, 2).trace()\n",
|
||||
"print(\"\\nBisection Method Trace (x^2 - 2):\")\n",
|
||||
"print_trace(steps)\n",
|
||||
"\n",
|
||||
"# Fixed-point: solve\n",
|
||||
"g = lambda x: 0.5 * (x + 2 / x)\n",
|
||||
"steps = FixedPoint(g, 1.0).trace()\n",
|
||||
"print(\"\\nFixed-Point Iteration Trace (x^2 - 2):\")\n",
|
||||
"print_trace(steps)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "833b538c",
|
||||
|
Reference in New Issue
Block a user