6 views (last 30 days)

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

Ameer Hamza
on 17 Jun 2020

Edited: Ameer Hamza
on 17 Jun 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);

Ameer Hamza
on 17 Jun 2020

ic = [1; 2]

are initial condition and I choose them randomly. Note that I didn't start the solution at x=0, because, at x=0, there are singularities in your system. I started it at x=0.1. So the initial condition means

y(0.1) = 1;

y'(0.1) = 2;

You can choose these values according to the initial conditions of your system.

For the plotted lines, blue one corresponds to y(x), and the orange one is y'(x). the x-axis is x values of your equation. You can just plot y(x) using following line

plot(t, y(:,1));

David Goodmanson
on 17 Jun 2020

Edited: David Goodmanson
on 17 Jun 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.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.