function uu(c, k, u0, v0) {
let N = 60;
let pi = Math.PI;
let exp = Math.exp;
let sin = Math.sin;
let cos = Math.cos;
let u0_coeffs = d3
.range(1, N + 1)
.map(n => int(x => u0(x) * sin(n * pi * x), 0, 1, 1e-10, 10, 5));
let u0v0_coeffs = d3
.range(1, N + 1)
.map(n =>
int(x => (k * u0(x) + 2 * v0(x)) * sin(n * pi * x), 0, 1, 1e-10, 10, 5)
);
function u(x, t) {
return (
2 *
d3.sum(
d3.range(1, N + 1).map(function(n) {
let sqrnpcmk = Math.sqrt(4 * n ** 2 * c ** 2 * pi ** 2 - k ** 2);
return (
exp((-k * t) / 2) *
(u0_coeffs[n - 1] * cos((sqrnpcmk * t) / 2) +
(u0v0_coeffs[n - 1] * sin((sqrnpcmk * t) / 2)) / sqrnpcmk) *
sin(n * pi * x)
);
})
)
);
}
return u;
}