The posted code:

```
( b, r, y0 ) = ( 30, 8/10, 3/2 )
var( 'x' );
y = function('y')(x)
de = diff( y, x ) == r*y*(1-y)/b
sol = desolve( de, y, ics=[0,y0] )
```

already leads to the solution (using implicit functions of y and x):

```
sage: sol
-75/2*log(y(x) - 1) + 75/2*log(y(x)) == x + 75/2*log(2) + 75/2*log(3/2)
```

In the ode-world this is already a solution. (Although i had a similar situation in an exam, and the examiner considered
i stopped too early, since the equation can be solved explicitly.) Here, the coefficients of the two `log`

expressions involving a non-constant function of `y(x)`

are opposite, $\pm 75/2$, so using `exp`

on both sides the expression $(y-1)/y=1-1/y$ leads to an *algebraic* equation of first order in $y$, that can be solved. If we want to do this in sage, there is one more step needed, before calling `solve`

(for a combined exponential/logarithmic and algebraic equation), we substitute with an other variable, `z`

, the expression `y(x)`

. The adjusted code for this plan and a possible answer to the question is as follows:

```
( b, r, y0 ) = ( 30, 8/10, 3/2 )
var( 'x,z' );
y = function('y')(x)
de = diff( y, x ) == r*y*(1-y)/b
sol = desolve( de, y, ics=[0,y0] )
sol = sol . subs( { y(x): z } )
Y = sol . solve( z, to_poly_solve=True )[0].rhs()
print "Solution: Y=%s" % Y
print "Check is", bool( diff(Y,x) == r*Y*(1-Y)/ b )
print "Y(0) = %s" % Y.subs( {x:0} )
```

Results:

```
Solution: Y=3*e^(2/75*x)/(3*e^(2/75*x) - 1)
Check is True
Y(0) = 3/2
```

Related question, answers and discussion: logistic differential equation