MATLAB Answers

differential equation with mixed linear and log derivatives - proper setting

조회 수: 11(최근 30일)
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
Ameer Hamza 17 Jun 2020
편집: Ameer Hamza 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);
  댓글 수: 4

댓글을 달려면 로그인하십시오.

추가 답변(1개)

David Goodmanson
David Goodmanson 17 Jun 2020
편집: David Goodmanson 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.
  댓글 수: 1
PatrizioGraziosi
PatrizioGraziosi 17 Jun 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...

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by