MATLAB Answers

How can I get MATLAB to solve a system of equations containing differential and algebraic equations?

36 views (last 30 days)
Adam
Adam on 28 Jun 2013
I have a system of about 40 equations, about half are ordinary differential equations (that must be solved numerically), the other half are simple algebraic equations, but all rely on variables solved for in the other type. I have been trying to use ode45 to solve the system, but the variables solved for in alegraic equations do not update with time steps, even though the variables used to calculate them are changing. For example, if i have dx1/dt = t, x2 = x1+5, and I use t=0:10, x1 changes with t, but x2 remains constant, even though it should change with x1. Has anybody else had this problem or know a way around it?

  1 Comment

Muthu Annamalai
Muthu Annamalai on 28 Jun 2013
Clearly once your write your system of ODEs in a explicit form
d X/dt = F(X,t,t0)
you can use ODE45, my preferred solver. For DAE you can use, ode23t http://www.mathworks.com/help/matlab/ref/ode23t.html

Sign in to comment.

Accepted Answer

Adam
Adam on 2 Jul 2013
Marc,
Thanks for your help. I've never used a mass matrix before and I have a couple of questions. First, how do I determine the index of my DAE (I thought it was only 1, but MATLAB is telling me it appears to be greater than 1)? Each equation contains only first derivatives, but they also contain other variables and first derivatives (e.g. dx3 = x3 + 4*x1 + 2*dx2). Since after looking at some information on indices of DAEs I'm pretty sure mine is greater than 1 and thus not solvable using MATLAB (or at least ODE15s), do you have any suggestions of programs that actually do this?

  1 Comment

Marc
Marc on 12 Jul 2013
Without seeing your system, I cannot comment. If you do not supply ode15s with the correct mass matrix, you will most likely get some error about your DAE being of index greater than one.
The most basic check is that the number of equations are equal to the number of unknowns you are solving for but this doesn't always guarantee you index 1.
Unfortunately, it is not straight forward. There are multiple definitions for index.
I typically use ode15s and Sundials cvode and ida. The sundials ode solvers for Matlab are very nice but I don't recall if IDA can handle higher indexes.
Another long shot is LIMEX, but again, not sure on on higher indexes.
Overall, on my simpler stuff, ode15s, cvode and ida seem to give good agreement. Limex on one system of pdes turned DAE gives good agreement with ode15s. This is by no means a comprehensive review....
Sorry, your just going to have to roll up your sleeves, grab the closest bottle of scotch and dig in...

Sign in to comment.

More Answers (1)

Marc
Marc on 29 Jun 2013
See ODE15s documentation on this and you will want to define your mass matrix as being either constant or as a function call within the ODE options. Torsten gave a good example of this in the newsgroup. Search there. If I find it, I will post the link.
If your mass matrix is not constant and it sounds like it is not, you will need to define a function massMat...... And use the @massMat in the options to let ode15s know to use this.

  0 Comments

Sign in to comment.

Sign in to answer this question.

Tags


Translated by