uf :S la verdad es que no acabo de entender bien tu método...
yo lo haría de otra forma:
-primero calculo la distancia total que puede recorrer con ese combustible:
dist = c*g;
-luego calculo la distancia que recorre con deposito > 1/4 (velocidad v)
dist_rapida = (3/4)*c*g;
y la que recorre con deposito <1/4 (velocidad v/2)
dist_lenta = (1/4)*c*g;
- ahora, si dist_rapida+dist_lenta > d, (quiere decir, si no se agota combustible)
pueden pasar dos cosas.
· que dist_rapida >= d, entonces tiempo = d/v , porque todo el rato va a tope de velocidad
· que dist_rapida+dist_lenta >= d, entonces tiempo = dist_rapida/v + (d-dist_rapida)/(v/2) , esto es, el tiempo que va a velocidad maxima mas el trozo de tiempo que va a velocidad lenta.
en ambos casos, el combustible sobrante sería combustible_restante = (d-(dist_rapida-dist_lenta))/g
- por último, si dist_rapida+dist_lenta < d (se queda sin gasofa) entonces tiempo = dist_rapida/v + dist_lenta/(v/2)
la distancia restante aquí sería dist_restante = d-(dist_rapida+dist_lenta)
creo que en este caso es mejor hacerlo así, repasa si hay alguna cosa chunga y me comentas. de la forma que tu la haces me da la impresion que pretendes ir gastando litros, comprobando como va el nivel y viendo si aún queda combustible, pero no me parece lo más lógico, ya que en caso de que haya decimales se puede quedar colgado (a lo mejor ese es el problema) y ya redondeas a la baja en la primera cuenta, que si el resultado es 1.9 por ejemplo ya tienes casi un 50% de error así de buenas a primeras.
tampoco veo muy coherente lo de que el barco recorra una distancia fija por combustible pero con velocidad variable y esas dos entradas no estén ligadas, pero bueno, supongo que será un ejercicio de programación.
por cierto, me encanta matlab

un saludo.