MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Using "If" and "NDSolve" together

  • To: mathgroup at smc.vnet.net
  • Subject: [mg106860] Re: Using "If" and "NDSolve" together
  • From: RBenf <rui.benfeitas at gmail.com>
  • Date: Mon, 25 Jan 2010 05:07:27 -0500 (EST)

Hello David, thanks for all the help! Please, let me say that your maxim's are really good advices to someone that is starting to do coding in Mathematica (as it is my case).

In fact, I am trying to do Maxim 1 allready - the example that I gave was a simplified version of the problem that I want to answer. But apparently I'm still unsuccessfull in doing it effectively.

The code that you provided isn't fully working. However, it was allready really helpfull! Using your advices and the code examples that you provided taught me some stuff allready, thanks so much.

I will use all your advices and try to solve my problem. In case I have any other questions I will reply in here. Thanks again!

> Maxim 1: Develop calculations in steps, making sure
> one step works before
> proceeding to the next. And specifically don't nest a
> complex calculation as
> the first argument of a Plot statement!
> 
> Maxim 2: Start your variables with small case letters
> to avoid conflict with
> predefined Mathematica symbols.
> 
> Step 1. Define your data so that it can be easily
> used and changed if
> necessary.
> 
> (data = {k0 -> 10^-2, k1 -> 10^-5, k2 -> 10^-6, k3 ->
> 10^1}) // Column  
> 
> Step 2. Write a routine to generate your differential
> equations and check
> that it is working properly. Here I use Piecewise as
> a t function because I
> think it will merge with differential equation
> solving better than an If
> statement.
> 
> Clear[a, b, c]
> deqns[first_, 
>   last_] := {a'[t] == 
> k0 Piecewise[{{0, t <= first}, {1, first < t <
> t < last}, {0, 
> t > last}}] - k1 a[t], b'[t] == k1 a[t] - k2
> a[t] - k2 b[t], 
> c'[t] == k2 b[t] - k3 c[t], a[0] == 2 10^-6, b[0]
> [0] == 0, 
>    c[0] == 0} /. Data  
> 
> deqns[100, 200] // Column  
> 
> Step 3. Solve the equations and define the a, b and c
> functions.
> 
> abcsols = First@NDSolve[deqns[100, 200], {a, b, c},
> {t, 0, 1000}];
> {a[t_], b[t_], c[t_]} = {a[t], b[t], c[t]} /. abcsols
> 
> Step 4. Plot the solutions. Here I scaled the
> functions so they would all
> fit on one plot. 
> 
> Plot[{a[t], 1000 b[t], 1/2 10^10 c[t]}, {t, 0, 1000},
>  Frame -> True,
>  Axes -> False]  
> 
> So maybe everything is working. The plot could be
> improved with labeling 
> 
> 
> David Park
> djmpark at comcast.net
> http://home.comcast.net/~djmpark/


  • Prev by Date: More memory-efficient inner product for large last dimension?
  • Next by Date: Re: Re: Mathematica gets stuck, only thing I can do is quit kernel
  • Previous by thread: Re: Using "If" and "NDSolve" together
  • Next by thread: Series and passing a function a changing number of variables