Ask Your Question

Solving an ODE and simplifying the result

asked 2019-05-14 09:41:24 +0200

Dox gravatar image

updated 2019-05-15 22:52:22 +0200

slelievre gravatar image

I'm interested in solving the differential equation $$3 h' + 3 h^2 = c_1,$$ where $c_1$ is a positive real number.

var('c1', latex_name=r'c_1')
h = function('h')(t)
eq = -3*h^2 + c1 - 3*diff(h, t)
eq_sol = desolve(eq, h, ivar=t, contrib_ode=True)

The above code works, but it's not solved explicitly for $h$, so

h_sol = solve(eq_sol, h)
h_sol = h_sol[0]

This gives something like $$h\left(t\right) = \frac{\sqrt{3} \sqrt{c_{1}} {\left(e^{\left(\frac{2}{3} \, \sqrt{3} C \sqrt{c_{1}} + \frac{2}{3} \, \sqrt{3} \sqrt{c_{1}} t\right)} + 1\right)}}{3 \, {\left(e^{\left(\frac{2}{3} \, \sqrt{3} C \sqrt{c_{1}} + \frac{2}{3} \, \sqrt{3} \sqrt{c_{1}} t\right)} - 1\right)}},$$

in sage notation (non-LaTeX) it starts like

h(t) == 1/3*sqrt(3)*sqrt(c1)* ...

Question 1: Is there a way to allocate to the solution (i.e. h_sol) the RHS of the above? without the h(t) == part.

I had to set by hand (it is ease, but it would be nice to automatize the allocation)

var('C')    # the integration constant introduced above
h_sol = 1/3*sqrt(3)*sqrt(c1)* ...

Then, by simply looking at the solution it is clear that it can be simplified. I tried things like

h_sol = h_sol.canonicalize_radical()
h_sol = h_sol.collect_common_factors()
h_sol = h_sol.simplify_rectform(complexity_measure = None)

but none of them returns the expected result, which could be obtained from Mathematica's kernel

mathematica("DSolve[3*h'[t] + 3*h[t]^2 == C[1], h[t], t]//FullSimplify")

$$ \sqrt{\frac{c_1}{3}} \tanh\left( \sqrt{\frac{c_1}{3}} (t - 3 c_2) \right) $$

Question 2: How could the expression h_sol be manipulated to obtain the hyperbolic tangent?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2019-05-15 13:06:47 +0200

dan_fulea gravatar image

(1) One can use either solution_dict=True... or the rhs method...

sage: h_sol = solve(eq_sol, h, solution_dict=True)[0][ h(t) ]
sage: h_sol
1/3*sqrt(3)*sqrt(c1)*(e^(2/3*sqrt(3)*_C*sqrt(c1) + 2/3*sqrt(3)*sqrt(c1)*t) + 1)/(e^(2/3*sqrt(3)*_C*sqrt(c1) + 2/3*sqrt(3)*sqrt(c1)*t) - 1)

sage: h_sol = solve(eq_sol, h)[0].rhs()
sage: h_sol
1/3*sqrt(3)*sqrt(c1)*(e^(2/3*sqrt(3)*_C*sqrt(c1) + 2/3*sqrt(3)*sqrt(c1)*t) + 1)/(e^(2/3*sqrt(3)*_C*sqrt(c1) + 2/3*sqrt(3)*sqrt(c1)*t) - 1)

(2) The human eye can do this better, just divide by the exponential of the half exponent. For me, the delivered form is acceptable, rational function composed with exponential function. (No simplify.... method gave me an other expression.)

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2019-05-14 09:41:24 +0200

Seen: 270 times

Last updated: May 15 '19