Skip to main content

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},
}

Release files for SplitNewton 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for SplitNewton 0.3.1
File Size Uploaded
SplitNewton-0.3.1.tar.gz 6.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for SplitNewton 0.3.1
File Interpreter ABI Platform
SplitNewton-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 13.8 kB

Release files / SplitNewton-0.3.1.tar.gz

Download URL SplitNewton-0.3.1.tar.gz
Size 6.4 kB
Tags Source
SHA-256 checksum
How to use checksums
9a397bc659ac681fb7b04002620579df46ad108f04a0ff1e5bbecf57851c0295
BLAKE2b-256 checksum
How to use checksums
4db0e2679e62e01e8480c4a954c60737edfe232cec5d960c121844d5763726e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.1

Release files / SplitNewton-0.3.1-py3-none-any.whl

Download URL SplitNewton-0.3.1-py3-none-any.whl
Size 7.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
27597f37492b5acaf3b515ed7604c67e47c3c5f887154da3215ca047279a8802
BLAKE2b-256 checksum
How to use checksums
a19d5c092e5e77743ad9a412c4b8a5e808563ea034ae812abcc099fe59dde76c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.1

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.1

1 release file

0.2

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page