Your expression contains unbalances parentheses:
Vof=@(t) Vo(1+ceil(t.*fo.*(length(t)-1));
4 opening ( but only 3 closing ).
If this is fixed, the next error concerns "Vo". What is this?
Finally remember, that ODE45 is designed to integrate smoth functions. Your function does not look like it is differentiable. Then the step size controller of ODE45 can drive mad and the results can be dominated by rounding errors.
The integral of a piecewise constant function can be calculated by a sum more accurately and efficiently.
Prefer simple code. Compare these equivalent definitions:
dio = @(t,io) (Vof(t)./L)-((R*io)/L);
dio = @(t,io) Vof(t) / L - R * io / L;



