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)
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}]}
# 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")
# 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")