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

조회 수: 8 (최근 30일)
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
Matt Tearle
Matt Tearle 2011년 2월 25일
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 2011년 3월 1일
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

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

채택된 답변

Matt Tearle
Matt Tearle 2011년 3월 2일
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
Jesse
Jesse 2011년 3월 2일
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 2011년 3월 2일
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

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

추가 답변 (1개)

Jesse
Jesse 2011년 3월 2일
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
Jesse
Jesse 2011년 3월 2일
Please excuse the "globals"
That was naughty of me to use them!
Matt Tearle
Matt Tearle 2011년 3월 2일
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/)

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

카테고리

Help CenterFile Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by