How to solve ODEs that are a function of the derivatives of the state variables

3 views (last 30 days)
I don't know how to properly ask this question. Let me try to explain it.
Typical coupled ODEs:
y'(1) = function(state variables)
y'(2) = function(state variables)
y'(3) = etc ...
Can I solve ODEs in MATLAB that look like this?:
y'(1) = function(state variable,y'(x))
y'(2) = function(state variables,y'(x))
y'(3) = etc ...
basically I am asking if you can have y primes' on the right side of the equal sign.
(Edit 3/1/2011) example:
  • rho' = f(rho,A,u,u')
  • u' = f(rho,u,P')
  • h' = f(u, u')
  • P' = f(alpha,T',T,rho',rho)
  • T' = f(alpha,h')
  • alpha'= f(T,rho',rho,alpha)
It is not possible to write the primes' in terms of state variables only. Can MATLAB solve these type of equations? Is there a similar function to Mathematica's NDSolve[]?
  2 Comments
Matt Tearle
Matt Tearle on 25 Feb 2011
The notation is a bit confusing. Can you give a small example. I think the answer is "yes", but an example would help show how (as well as understand the question correctly)
Jesse
Jesse on 1 Mar 2011
Sure Matt (I agree it's confusing)
I want to solve flow through a rocket nozzle using state variables: density (rho), velocity (u), pressure (P), temperature(T), enthalpy (h), and degree of dissociation (alpha). The independent variable is area (basically a 1-D analysis).
Here are the equations
drho/dA = -(rho/A)-(rho/u)du/dA
du/dA = -(1/(rho*u)) dP/dA
dh/dA = -u*du/dA
dp/dA = R( (1+alpha)*(T*drho/dA + rho*dT/dA))
dT/dA = function(dh/dA,dalpha/dA)
dalpha/dA = function(dT/dA,drho/dA)
Every function contains a d/dA of other state variables.
Typically, all the d/dA's are only on the left (I think)
Thank you for your help

Sign in to comment.

Accepted Answer

Matt Tearle
Matt Tearle on 2 Mar 2011
Ah, that actually wasn't what I was thinking (I don't know why, b/c in retrospect your question makes perfect sense). Anyway, that actually makes the answer fairly easy: yes. See ode15i. Rewrite the equations as a vector system F(A,x,x'), where x = [rho; u; h; P; T; alpha], and away you go.
  5 Comments
Jesse
Jesse on 2 Mar 2011
I've said it before, but thank you Matt!
Do you have a link to a page that describes function handles? They don't make much sense to me :-(
Matt Tearle
Matt Tearle on 2 Mar 2011
Here are the online doc pages:
Function handles in general
http://www.mathworks.com/help/matlab/ref/function_handle.html
Anonymous function handles
http://www.mathworks.com/help/matlab/matlab_prog/f4-70115.html
And, most useful in this context, using anonymous handles to provide parameters to named functions, for use in things like the ode routines
http://www.mathworks.com/help/matlab/matlab_prog/f4-70115.html#f4-70238

Sign in to comment.

More Answers (1)

Jesse
Jesse on 2 Mar 2011
By the way, final code I used: (for other ode15i users)
===================================
function Z = implicit(A, y,yP)
global RO2 thetaD rhoD
Z=zeros(5,1);
rho = y(1);
u = y(2);
h = y(3);
P = y(4);
T = y(5);
a = .92;
rhoP = yP(1); % rhoP = -((rho/A) + (rho/u)*uP)
uP = yP(2); % uP = -(1/(rho*u))*PP
hP = yP(3); % hP = -(hP + u*uP)
PP = yP(4); % PP = (RO2*(1+a)*(T*rhoP + rho*TP))
TP = yP(5); % TP = (1/RO2)*hP/(4+a)
Z=[ rhoP + ((rho/A) + (rho/u)*uP) ;
uP + (1/(rho*u))*PP ;
hP + (hP + u*uP) ;
PP - (RO2*(1+a)*(T*rhoP + rho*TP));
TP - (1/RO2)*hP/(4+a) ]
  2 Comments
Matt Tearle
Matt Tearle on 2 Mar 2011
Thanks for posting that, for the benefit of others. I'd call that an example of "doing the right thing"
(http://www.mathworks.com/company/aboutus/mission_values/)

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!