Tools#
- felupe.newtonrhapson(x0=None, fun=<function fun>, jac=<function jac>, solve=<function solve>, maxiter=16, update=<function update>, check=<function check>, args=(), kwargs={}, kwargs_solve=None, kwargs_check=None, tol=1.4901161193847656e-08, umat=None, items=None, dof1=None, dof0=None, ext0=None, solver=<function spsolve>, export_jac=False, verbose=True, timing=True)[source]#
(Nonlinear) equilibrium equations f, as a function f(x) of the unknowns x, are solved by linearization of f at given unknowns x0.
f(x0) = 0 (1)
f(x0 + dx) = f(x0) + (df/dx)(x0) dx (= 0) (2) (df/dx)(x0) dx = -f(x0)
dx = solve(df/dx(x0), -f(x0)) (3)
x = x0 + dx (4)
Repeated evaluations of Eq.(3) and Eq.(4) lead to an incrementally updated solution of x which is shown in equation (4). Herein xn refer to the inital unknowns whereas x to the updated unknowns (the subscript n+1 is dropped for readability).
dx = solve(df/dx(xn), -f(xn)) (5)
x = xn + dx (6)
Eq.(5) and Eq.(6) are repeated until check(dx, x, f) returns True.