how can i solve a non-linear ode by ode45 or similar orders in matlab?

3 visualizaciones (últimos 30 días)
xosro
xosro el 19 de Ag. de 2017
Editada: xosro el 21 de Ag. de 2017
I have the following equation, but i cannot employ ode45 order to solve the equation.
y-(x/2)*y' - a*y''/2*(1-b*y'')^2=0
where a, b are constant and positive.
  4 comentarios
John D'Errico
John D'Errico el 19 de Ag. de 2017
It makes no sense unless y is a function of x here, as x was never mentioned otherwise.
xosro
xosro el 19 de Ag. de 2017
I'm sorry. yes, y is function of x.

Iniciar sesión para comentar.

Respuestas (1)

John D'Errico
John D'Errico el 19 de Ag. de 2017
Editada: John D'Errico el 19 de Ag. de 2017
You won't be able to pose this as a problem for an ODE solver, since any standard ODE solver will require a finite domain over which to integrate. It is a boundary value problem anyway, so you will want to use a bvp solver. Tools like bvp4c use collocation, but you don't really care how they work, at least in terms of gaining a solution. I do think it highly unlikely that you will get an analytical solution, so you will need to provide explicit values for a and b.
So I'd first transform the problem into one with a finite domain. Thus, perhaps define a transformation that will map the infinite domain of x into a finite one. My first choice would be to use a tangent transformation.
x = tan(u)
So x lives on [-inf,inf]. But u lives on [-pi/2,pi/2].
Now, rewrite the ODE in terms of
z(u) = y(x(u))
We have y'=dy/dx. But what is dz/du? Chain rule gives us that.
dz/du = dy/dx*dx/du
And since x=tan(u), we know that dx/du=sec^2(u). Therefore we have
dy/dx = dz/du * (1/sec^2(u)) = dz/du * cos^2(u)
With a little effort, y'' should be doable too. So re-write the ODE in terms of z and u, substituting for x, y, y', y'' wherever they appear.
The boundary values will be unchanged.
z(-pi/2) = c
z(pi/2) = c
So, if you can solve the transformed boundary value problem over the new domain, that will be sufficient. If you don't like that choice of transformation, I'm sure there are others that would be viable. For example, an inverse logistic form would probably work, or you could use an erfinv transformation. The tangent transformation seems a very natural one here though.
Use one of the bvp solver tools. Although I have no experience with these solvers, it looks like bvp4c is designed to solve a general two point boundary value problem using collocation, so I'd start there. At least, that is how I'd attack the problem.
  1 comentario
xosro
xosro el 21 de Ag. de 2017
Editada: xosro el 21 de Ag. de 2017
bvp4c or similar orders solve explicit bvp. how can i use them for implicit bvp? As the problem is an implicit bvp.

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