Skip to main content

Split Newton Solver

Project description

SplitNewton

Downloads Coverage DOI

Bounded, SPLIT Newton with pseudo-transient continuation and backtracking

Good for ill-conditioned problems where there are two different sets of systems

Particular applications include

What does 'split' mean?

The system is divided into multiple segments, and for ease of communication, let’s refer to the first segment of variables as "outer" and the remaining as "inner".

  • Holding the outer variables fixed, Newton iteration is performed recursively for the inner variables, using the sub-Jacobian associated with them, until convergence is reached.

  • One Newton step is then performed for the outer variables, while the inner variables are kept fixed, using the sub-Jacobian for the outer subsystem.

  • This process is repeated, alternating between solving the inner and outer subsystems, until the convergence criterion for the entire system (similar to standard Newton) is met.

Example:

Consider a system of 5 variables, with the split locations at indices [1, 4]. This results in the following segments:

  • a1 (variables from 0 to 1)
  • a2 a3 a4 (variables from 1 to 4)
  • a5 (variable at index 4)
  1. First, the innermost segment a5 is solved recursively using Newton's method while holding the variables a1 and a2 a3 a4) fixed. This step is repeated until the convergence criterion for a5 is met.

  2. Next, one Newton step is taken for the segment a2 a3 a4, with a5 held fixed. This step is followed by solving a5 again till convergence.

  3. This alternating process repeats: solving for a5 until convergence, then one step for a2 a3 a4, and so on, until all subsystems converge.

Finally, one Newton step is performed for a1, with the other segments fixed. This completes one cycle of the split Newton process.

How to install and execute?

Just run

pip install splitnewton

There is an examples folder that contains a test function and driver program

How good is this?

Consider the test problem

$\lambda_{a} = 10^{6}$, $\lambda_{b} = 10^{2}$ with the second system, $\lambda_{c} = 10^{-1}$ $\lambda_{d} = 10^{-4}$ and third system, $\lambda_{c} = 10^{-6}$ $\lambda_{d} = 10^{-8}$

and using logspace for variation in $\lambda_{i}$

$$ F(u) = \lambda_{a} u^{4}{1} + ... + \lambda{b} u^{4}{\lfloor N/3 \rfloor} + \lambda{c} u^{4}{\lceil N/3 \rceil} + ... + \lambda{d} u^{4}{\lfloor 2N/3 \rfloor} + \lambda{e} u^{4}{\lceil 2N/3 \rceil} + ... + \lambda{f} u^{4}_{N}$$

$$ J(u) = 3 \times \begin{bmatrix} \lambda_a & \dots & 0 & 0 & \dots & 0 & 0 & \dots & 0 \ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots \ 0 & \dots & \lambda_b & 0 & \dots & 0 & 0 & \dots & 0 \ 0 & \dots & 0 & \lambda_c & \dots & 0 & 0 & \dots & 0 \ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots \ 0 & \dots & 0 & 0 & \dots & \lambda_d & 0 & \dots & 0 \ 0 & \dots & 0 & 0 & \dots & 0 & \lambda_e & \dots & 0 \ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots \ 0 & \dots & 0 & 0 & \dots & 0 & 0 & \dots & \lambda_f \end{bmatrix} \cdot u^2 $$

For N=5000 (with no backtracking and pseudo-transient continuation),

Method Time Iterations
Split Newton 34 seconds 33
Newton not converged > 1 min NA

How to test?

You can run tests with the pytest framework using python -m pytest

The coverage reports can be generated with pytest-cov plugin using python -m pytest --cov=splitnewton

Whom to contact?

Please direct your queries to gpavanb1 for any questions.

Citing

If you are using SplitNewton in any scientific work, please make sure to cite as follows

@software{pavan_b_govindaraju_2025_14782293,
  author       = {Pavan B Govindaraju},
  title        = {gpavanb1/SplitNewton: v0.3.1},
  month        = jan,
  year         = 2025,
  publisher    = {Zenodo},
  version      = {v0.3.1},
  doi          = {10.5281/zenodo.14782293},
  url          = {https://doi.org/10.5281/zenodo.14782293},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

SplitNewton-0.3.1.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

SplitNewton-0.3.1-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file SplitNewton-0.3.1.tar.gz.

File metadata

  • Download URL: SplitNewton-0.3.1.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.1

File hashes

Hashes for SplitNewton-0.3.1.tar.gz
Algorithm Hash digest
SHA256 9a397bc659ac681fb7b04002620579df46ad108f04a0ff1e5bbecf57851c0295
MD5 5a506cf96b5b1f7e24f3818c815fe080
BLAKE2b-256 4db0e2679e62e01e8480c4a954c60737edfe232cec5d960c121844d5763726e5

See more details on using hashes here.

File details

Details for the file SplitNewton-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: SplitNewton-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.1

File hashes

Hashes for SplitNewton-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 27597f37492b5acaf3b515ed7604c67e47c3c5f887154da3215ca047279a8802
MD5 97c6015cfd5778c8d7bf3f85c0872683
BLAKE2b-256 a19d5c092e5e77743ad9a412c4b8a5e808563ea034ae812abcc099fe59dde76c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page