differential equation with mixed linear and log derivatives - proper setting

4 visualizaciones (últimos 30 días)
Hello everybody,
I'd like to solve for y = y(x) the following equation
that contains derivatives on both x and log(x).
When I input the equation as
syms y(x) f
eq = diff( log(y), log(x) ) + diff( log(diff(y,x)), log(x) ) + diff( y, log(x) )*log(x) + y ...
== 1 + f;
I always get an error about the log in the differentiation
Second argument must be a variable or a nonnegative integer specifying the number of
differentiations.
I have tried to input it as a system of equations
syms y(x,z) f
eq1 = diff( log(y), x ) + diff( log(diff(y,z)), x ) + diff( y, x )*x + y ...
== 1 + f;
eq2 = x == log(z);
But when I try to solve it
odes = [eq1;eq2];
sol = dsolve(odes);
I get an error that
Symbolic ODEs must have exactly one independent variable.
I'm likely doing something wrong in managing the equations.
Can someone help me, please?
Thanks,
Patrizio

Respuesta aceptada

Ameer Hamza
Ameer Hamza el 17 de Jun. de 2020
Editada: Ameer Hamza el 17 de Jun. de 2020
Using chain-rule, we can write
Therefore, the equation can be written as
syms y(x) f
eq = diff(log(y),x)*1/diff(log(x),x) + diff(log(diff(y,x)),x)*1/diff(log(x),x) + ...
diff(y,x)*1/diff(log(x),x)*log(x) + y ...
== 1 + f;
sol = dsolve(eq);
The symbolic solution is
>> sol
sol =
((2*C2*x^y + C2*f*x^y - C2*x^y*y + 2*C1*x^f*x^2)/(x^y*(f - y + 2)))^(1/2)
-((2*C2*x^y + C2*f*x^y - C2*x^y*y + 2*C1*x^f*x^2)/(x^y*(f - y + 2)))^(1/2)
For numerical solution, try this
syms y(x) f
eq = diff(log(y),x)*1/diff(log(x),x) + diff(log(diff(y,x)),x)*1/diff(log(x),x) + ...
diff(y,x)*1/diff(log(x),x)*log(x) + y ...
== 1 + f;
eq2 = odeToVectorField(eq);
odeFun = matlabFunction(eq2, 'Vars', {'x', 'Y', 'f'});
xspan = [0.1 10];
xs = 0.1:0.001:10;
fv = rand(size(xs));
ffun = @(x) interp1(xs, fv, x);
ic = [1; 2];
[t, y] = ode45(@(x, y) odeFun(x, y, ffun(x)), xspan, ic);
plot(t, y);
  4 comentarios
PatrizioGraziosi
PatrizioGraziosi el 17 de Jun. de 2020
Brilliant! This is what I couldn't understand, that ic(2) is y', sorry, and many thanks for your support!

Iniciar sesión para comentar.

Más respuestas (1)

David Goodmanson
David Goodmanson el 17 de Jun. de 2020
Editada: David Goodmanson el 17 de Jun. de 2020
Hi Patrezio,
d(log(x)) = dx/x, and you can insert that result in three locations to obtain
eq1 = x*diff( log(y), x) + x*diff( log(diff(y,x)), x) + x*diff( y, x)*log(x) + y == 1+f;
z = dsolve(eq1)
Warning: Unable to find explicit solution. Returning implicit solution instead.
> In dsolve (line 197)
solve([((C2 + f*y^2 + 2*y^2 - y^3)/(2*C1))^(1/(f - y + 2)) - x == 0, 1 < y - f], y) union ...
solve([((C2 + f*y^2 + 2*y^2 - y^3)/(2*C1))^(1/(f - y + 2)) - x == 0, ~1 < y - f], y)
There is no explicit solution for y(x), but there is a solution for x as a function of y. The solution is a union of two complementary regions of y, but if you are finding x as a function of y, that fact appears not to matter.
  1 comentario
PatrizioGraziosi
PatrizioGraziosi el 17 de Jun. de 2020
Editada: PatrizioGraziosi el 17 de Jun. de 2020
Hi David,
thank you!
Sure if I find a x as a function of y is fine, however, I find
syms y(x) f
eq = diff(log(y),x)*x + diff(log(diff(y,x)),x)*x + ...
diff(y,x)*x*log(x) + y ...
== 1 + f;
sol = dsolve(eq)
sol =
((2*C2*x^y + C2*f*x^y - C2*x^y*y + 2*C1*x^f*x^2)/(x^y*(f - y + 2)))^(1/2)
-((2*C2*x^y + C2*f*x^y - C2*x^y*y + 2*C1*x^f*x^2)/(x^y*(f - y + 2)))^(1/2)
which is specified in a different way from yours...

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by