Ask Your Question
0

can anyone help me solve this problem? (substitution)

asked 2019-03-08 17:01:04 +0200

jwj3400 gravatar image

updated 2019-03-08 21:17:02 +0200

I'm newbie with sage program and to solve diff(y,x) == (4 * x + y)^2 with it i typed like below

var('x')
y = function('y')(x)
de = diff(y, x) == (4*x + y)^2
desolve(de, [y, x])

But it is not working I know i should use substitution that u = 4 * x + y but i don't know how to do it with sage Can anyone help me?

edit retag flag offensive close merge delete

Comments

Is that homework ?

Hint : desolve ? (pay attention to the goddamn' syntax).

Another hint : Sage can give you solutions. But not necessarily in a directly usable form, and not necessarily easy to check.

Emmanuel Charpentier gravatar imageEmmanuel Charpentier ( 2019-03-09 01:56:01 +0200 )edit

1 Answer

Sort by » oldest newest most voted
1

answered 2019-03-09 16:35:36 +0200

Emmanuel Charpentier gravatar image

Okay, I'll suppose this is not homework (i it is, please take the time to understand the solutions : it might be worth it...). It turns out exhibiting some interesting features (and non-features) of Sage and some packages interfaced to it, so let's dig it.

Sage (i. e. Maxima)

The first attempt:

var('x')
y = function('y')(x)
de = diff(y, x) == (4*x + y)^2
desolve(de, y, x)

fails with a suggestion:

    NotImplementedError: Maxima was unable to solve this
    ODE. Consider to set option contrib_ode to True.

which, when applied, gives a curious result:

Sol=desolve(de, y, ivar=x, contrib_ode=True)
Sol

[[x == _C - 1/2*arctan(1/2*sqrt(t)), y(x) == -4*x - sqrt(t)
 [x == _C + 1/2*arctan(1/2*sqrt(t)), y(x) == -4*x + sqrt(t)]]

This parametric form introduces non only an integration constant _C but also a parameter t ; both x and y are functions of t, which is only used through its square root. We can use this to solve sqrt(t) in x (hint : the justification of this solution is not trivial…) and get two solutions…

(_C, t)=var("_C, t")
SolSage=map(lambda u:u[1].subs(u[0].solve(sqrt(t))), Sol)
SolSage

… which turn out to be the same, and can be checked:

bool(SolSage[0].rhs().diff(x)==de.subs(SolSage[0]).rhs())

True

One notes that the constant _C is determined by the initial conditions but modulo $\pi$.

Sympy

By default, Sympy returns a Taylor series of the solution, which is not very interesting here. We'll ask for /all/ solutions of our equations:

D=sympy.dsolve(*map(sympy.sympify, [de, y(x)]), hint="all")
D

{'1st_power_series': Eq(y(x), x**3*(C1**2*(3*C1**2 + 4) + 12*C1**2 + 16)/3 + x**5*(8*C1**2*(3*C1**2 + 8) + 4*C1**2*(9*C1**2 + 8) + C1**2*(2*C1**2*(3*C1**2 + 8) + C1**2*(9*C1**2 + 8) + 36*C1**2 + 32) + 144*C1**2 + 128)/15 + C1 + C1*x**2*(C1**2 + 4) + C1*x**4*(C1**2*(3*C1**2 + 8) + 12*C1**2 + 32)/3 + C1**2*x + O(x**6)),
 'best': Eq(y(x), x**3*(C1**2*(3*C1**2 + 4) + 12*C1**2 + 16)/3 + x**5*(8*C1**2*(3*C1**2 + 8) + 4*C1**2*(9*C1**2 + 8) + C1**2*(2*C1**2*(3*C1**2 + 8) + C1**2*(9*C1**2 + 8) + 36*C1**2 + 32) + 144*C1**2 + 128)/15 + C1 + C1*x**2*(C1**2 + 4) + C1*x**4*(C1**2*(3*C1**2 + 8) + 12*C1**2 + 32)/3 + C1**2*x + O(x**6)),
 'best_hint': '1st_power_series',
  'default': '1st_power_series',
  'lie_group': Eq(y(x), -4*x + 2*tan(C1 + 2*x)),
  'order': 1}

The `lie_group solution can be expressed in Sage as:

D['lie_group']._sage_()

y(x) == -4*x + 2*tan(C1 + 2*x)

which is identical to the solution given by Sage up to the expression of the constant.

Giac

Unfortunately, Sage is not (yet) able to translate the differential equation in giac. But a "manual" translation allows us to call giac's solver, which gives:

from giacpy_sage import * SolGiac=libgiac.desolve(libgiac.diff(y(x),x)-de.rhs(),y(x))[0] SolGiac

2*tan(2*x-2*c_0)-4*x

i. e. again the same result up to the expression of the constant…

Fricas

I have been unable to use Fricas solver to solve this equation. But that's probably because I do not (yet) know the `fricas' interface in detail.

Mathematica

Again, Sage is currently unable to translate the differential equation. A manual call:

mathematica("DSolve[Derivative[1][y][x] == (4*x + y[x])^2, y[x], x]")

{{y[x] -> -2*I - 4*x + (-I/4 + E^((4*I)*x)*C[1])^(-1)}}

gives a result, manually translatable to Sage as -4*x + 4/(4*C1*e^(4*I*x) - I) - 2*I, totally different from those obtained so far.

A heavy pounding on this expression by deMoivre and algebraic transformations may reveal that this expresses the same relation between x and y as before. I haven't done this.

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

Stats

Asked: 2019-03-08 17:01:04 +0200

Seen: 202 times

Last updated: Mar 09 '19