Datalens.ai
← All algorithms

NUMERICAL

solve_bvp

Solve a boundary value problem for a system of ODEs.

Example of usage

Boundary-value problem for a linear concentration profile.

Usage / limitations

+Use when: Compute approximations and solve equations.

−Limitations: Check input requirements, mathematical assumptions and version-specific behaviour before using.

Mathematical formula

See method documentation: implementation and assumptions vary.
Sample dataShow
{
  "variable": "observations",
  "domain": "Laboratory sensor signal integration",
  "feature_names": [
    "minute",
    "fluorescence_au"
  ],
  "records": [
    {
      "minute": 0,
      "fluorescence_au": 1.0
    },
    {
      "minute": 1,
      "fluorescence_au": 2.0
    },
    {
      "minute": 2,
      "fluorescence_au": 5.0
    },
    {
      "minute": 3,
      "fluorescence_au": 10.0
    },
    {
      "minute": 4,
      "fluorescence_au": 17.0
    },
    {
      "minute": 5,
      "fluorescence_au": 26.0
    },
    {
      "minute": 6,
      "fluorescence_au": 37.0
    },
    {
      "minute": 7,
      "fluorescence_au": 50.0
    },
    {
      "minute": 8,
      "fluorescence_au": 65.0
    }
  ]
}

Code example (Python)

# DataLens.ai example — solve_bvp
# Domain: laboratory sensor measurements and numerical analysis.
# Sample input is supplied by the Copy input + code + test action.
import numpy as np
from scipy import integrate, special
# Read a labelled time-series from the sample input.
t = np.array([row["minute"] for row in observations["records"]], dtype=float)
y = np.array([row["fluorescence_au"] for row in observations["records"]], dtype=float)

# Compute the method-specific result and check a numerical property.
from scipy.integrate import solve_bvp
# Solve y" = 0, y(0) = 10, y(1) = 15: a linear concentration profile.
mesh = np.linspace(0, 1, 6)
initial = np.vstack((10 + 5*mesh, np.full_like(mesh, 5)))
solution = solve_bvp(lambda coordinate, state: np.vstack((state[1], np.zeros_like(coordinate))), lambda left, right: np.array([left[0]-10, right[0]-15]), mesh, initial)
assert solution.success and np.allclose(solution.sol([0,.5,1])[0], [10,12.5,15], atol=1e-6)
print("Expected output verified")