I am writing a function f to be used in a Runge Kutta integrator.
output RungeKutta(function f, initial conditions IC, etc.)
Since the function will be called many times, I am looking for a way to generate the function f at compile time.
In this case, function f depends on a fixed list of parameters vector p, where p is sparse and is fixed before the code is compiled. To be concrete,
double function f(vector<double> x) {
return x dot p;
}
Since p
is sparse, taking the dot product in f
is not the most efficient. Hard-coding x dot p
seems to be the way to go, but p can be very long (1000).
What are my options?
Is writing another program (taking p
as input) to generate a .cpp file my only option?
Thanks for the comments. Here is a more concrete example for the differential equation.
dy/dx = f_p(x)
One example for f_p(x):
p = [0, 1, 0]; x = [x1, x2, x3]
double f_p(vector<double> x) {
return x2; // This is what I meant by hard-coding
}
instead of:
double f(vector<double> p, vector<double> x) {
double r = 0;
for (i=0; i < p.length(); i++) {
r += p[i]*x[i];
}
return r;
}