Comments (2)
Why not just make the spline the parameter and update that?
from modelingtoolkit.jl.
That works! Here is a working example:
using ModelingToolkit
using ModelingToolkit: t_nounits as t, D_nounits as D
using DifferentialEquations
using DataInterpolations
using ForwardDiff
P0 = 2.0 # test value for the parameter P
# F(t) is an external function that depends on the parameter P
function create_F(P)
ts = range(0.0, 1.0, step=0.1)
Fs = ts .^ P # toy example: F = t^P
return CubicSpline(Fs, ts)
end
F(t, spline) = spline(t) # intermediate function for F(t) (possible to avoid this?)
# an ODE that depends on the parameter P both explicitly, and implicitly through F(t)
@parameters P F_spline
@variables x(t)
@register_symbolic F(t, spline) # following https://docs.sciml.ai/ModelingToolkit/stable/tutorials/ode_modeling/#Specifying-a-time-variable-forcing-function
sys = structural_simplify(ODESystem([D(x) ~ P * F(t, F_spline)], t, [x], [P, F_spline]; name = :sys))
prob = ODEProblem(sys, [x => 0.0], (0.0, 1.0), [P => NaN, F_spline => NaN]) # uninitialized problem
# solution of the ODE for a given value of the parameter P (must be fast!)
function solve_instance_fast(P)
F_instance = create_F(P)
prob_instance = remake(prob; p = [sys.P => P, sys.F_spline => F_instance]) # update P and spline for F(t)
return solve(prob_instance)
end
x_at_1(P) = solve_instance_fast(P)(1.0; idxs=x) # analytical result: x(1) = P/(P+1)
ForwardDiff.derivative(x_at_1, P0) # analytical result: d(x(t=1))/dP = 1/(P+1)^2
Thank you! I thought I was perhaps dealing with a restriction of MTK, and this simple solution just did not cross my mind.
from modelingtoolkit.jl.
Related Issues (20)
- Solve fails after remake inside of Turing model.
- Missing metadata getters
- Cannot add both default value and description to variables created in multiline statements (but parameters work). HOT 2
- Inconsistency with scalarisation of MTK states and parameters HOT 2
- Remake fails with simple parameter dict HOT 1
- Allow altering a symbolic parameter default value after creation.
- Improve printing/display of `XSystem` parameters
- Is `remake`ing an `ODEProblem` with a symbolic map of `u0` or `p` type-stable? HOT 5
- Guesses for symbolic vector variables are incorrect
- Support arbitrarily nested structural parameter conditions
- Parameters (and probably variables) occurring in events only are not inferred into ODESystems HOT 2
- remake failing for several cases with vector variables
- Problem creating problems for vector variables/parameters HOT 2
- remake type promotion fails with empty initial conditions HOT 3
- Cannot solve for dependent parameters during initialization HOT 2
- ForwardDiff does not work directly through ODEProblem HOT 3
- Add NonlinearLeastSquaresProblem dispatch for modelingtoolkitize
- Structural simplification fails on non-1-indexed variable array
- IntervalNonlinearProblem support in MTK
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from modelingtoolkit.jl.