Message Boards Message Boards


Solve a system of ODE's with DSolve[ ]?

Posted 4 months ago
4 Replies
6 Total Likes

I'm new to Mathematica and would appreciate anyone with an experienced eye who would look at the following failed attempt to solve a system of ordinary differential equations and tell me what I'm doing wrong. The function is pasted below and a .nb file is attached.

I'm looking for general symbolic solution to a standard S,I,R (susceptible, infected, recovered) model. Then I'd like to learn how to play with parameters and plotting features. But first, I need a solution. This attached formulation has been running for a few hours without returning a result. What's wrong with its arguments? Is there a way to limit parameter intervals and independent variable interval?


eqns = {s'[t] == m (s0 + i0 + r0) - \[Beta] s[t] i[t] - m s[t], i'[t] == \[Beta] s[t] i[t] - m i[t] - g i[t], r'[t] == g i[t] - m r[t]}
sol = DSolve[eqns, {s, i, r}, t]
4 Replies

This system of equations contains two nonlinear equations, and therefore cannot be solved in closed form.

They can be solved numerically with ParametricNDSolve that will allow you to play with the parameters.

{ss, ii, rr} = {s, i, r} /. 
  ParametricNDSolve[{eqns, {s[0] == s0, i[0] == i0, r[0] == r0}}, {s, 
    i, r}, {t, 0, 100}, {s0, i0, r0, \[Beta], g, m}]

The following Plot can be put inside of Manipulate

Plot[{ss[1000, 1, 0, 0.002, 0.2, 0.003][t], 
  ii[1000, 1, 0, 0.002, 0.2, 0.003][t], 
  rr[1000, 1, 0, 0.002, 0.2, 0.003][t]}, {t, 0, 30}]

enter image description here

Thanks, Robert Nachbar for the explanation. And also thanks for including the plot. Is it possible to animate the plot with sliders for the parameters? Also, I'm new to applied math. Is a system of closed form solutions not possible, even in a case like this where S'+I'+R'=0 for all t?

Is there web tutorial on Mathematica syntax? I understand functions I write with my limited vocabulary. But understanding yours involves guesswork. Your functions work perfectly, but I cannot explain why.

The Manipulate function will allow you to easily attach sliders to parameters and dynamically update the plot as the sliders are moved.

All the Wolfram Language documentation is available on-line. the landing page is here. Documentation for Manipulate is here. Depending on your prior coding experience, these two "tutorials" may be good starting points: An Elementary Introduction to the Wolfram Language (aka EIWL) and Wolfram Language: Fast Introduction for Programmers.

Thanks, again Robert Nachbar.

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract