The Problem =========== The `Manipulate` and the first `Plot` of your code don't work because you use a combination of `SetDelayed` (`:=`) and `ReplaceAll` (`/.`) that doesn't behave like you expected. When you define g[t_, f0_, f1_, ff1_] := f[t] /. sol[[1]] and now evaluate g[2, 1, 1, 1] you get > f0 + 4 (-3 f0 + 3 f1 - ff1) + 8 (2 f0 - 2 f1 + ff1) instead of the expacted > 5 This happens because (due to the use of `:=`) `f[t]` on the rhs is first evaluated as `f[2]` (giving `a + 4 c + 8 d`) and then the replacement (`/. sol[[1]]`) is done. Using `Set` instead of `SetDelayed` =========== If you replace `:=` with `=` g2[t_, f0_, f1_, ff1_] = f[t] /. sol[[1]] then `/.` will be performed only once, when you define `g2` and whenever you use `g2` it is replaced by its rhs with the `ReplacedAll` already performed. g2[2, 1, 1, 1] > 5 Using `Evaluate` ================ You can also force the evaluation of the right-hand side by using `Evaluate`: g3[t_, f0_, f1_, ff1_] := Evaluate[f[t] /. sol[[1]]] This way the rhs is evaluated before it is `SetDelayed` as the definition of `g3`. Definition@g3 > g3[t_, f0_, f1_, ff1_] := f0 + (-3 f0 + 3 f1 - ff1) t^2 + (2 f0 - 2 f1 + ff1) t^3 Using an additional `ReplaceAll` =============================================== You can also use an additional `/.` to replace the parameters `f0`, `f1`, and `ff1` with some values g4[t_, pf0_, pf1_, pff1_] := f[t] /. sol[[1]] /. {f0 -> pf0, f1 -> pf1, ff1 -> pff1} now g4[2, 1, 1, 1] > 5 This is similar to the last `Plot` in your code.