Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Plotting in a loop in mathematica

  1. Feb 2, 2009 #1
    I am trying to solve a system of differential equations and plot solution curves. The differential equations have parameters. I would like to write a loop for these parameters and have the solution curves plot.

    Here is my code for the solving / plotting. The parameters I want to change are are currently 7 and 4.

    sol = NDSolve[{x'[t] == -7*x[t] y[t] + 4 y[t],
    y'[t] == 7*x[t] y[t] - 4 y[t], x[0] == 50, y[0] == 10}, {x,
    y}, {t, 0, 10}]
    Plot[Evaluate[x[t] /. sol], {t, 0, 1}, PlotRange -> All]
    Plot[Evaluate[y[t] /. sol], {t, 0, 1}, PlotRange -> All]
    ParametricPlot[Evaluate[{x[t], y[t]} /. sol], {t, 0, 10},
    PlotRange -> All]
    {x[10], y[10]} /. sol

    I don't know how to create a loop (or even which type of loop to use) that will output a plot for each new parameter value.

    Any advice that you have to offer would be much appreciated.
    Last edited: Feb 2, 2009
  2. jcsd
  3. Feb 2, 2009 #2
    Use the Table[..] function to do the loop.

    First use Table[NDSolve[...],{i,Length[arr]}] to get an array of solutions for the parameters you want, where 'arr' is an array storing your parameters.

    Then just do a similar loop for your plot. ie. Table[Plot[.....],{i,Length[solArr]}], where solArr is the array of solutions that would have been returned from the previous line.
  4. Feb 4, 2009 #3
    Thanks so much! I never would have thought to use a Table.

    I now have solutions and graphs running with 4 parameters!
  5. Sep 2, 2010 #4
    Hi, I have a problem with mathematica...I have two lists ...one is for temperature and the other is for time...and they are related..that is...each element in time list corresponds to temperature on the other list...I have a huge formula where i need to use corresponding elements from both lists... any suggestions ?
  6. Sep 2, 2010 #5
    If your two list are in list format such as:

    Time = {1, 2, 3, 4} and Temp = {4, 5, 6, 7}

    with the correspondence between
    (Time, Temp)

    That is Time[] corresponds to Temp[]

    Then you can use a Do loop in the following way:

    Do[ put commands here separated by semicolons referencing i , {i,1,4} ]

    For example

    Print[Time[]+Temp[], {i,1,4}]
  7. Sep 2, 2010 #6
    You can join the sets dynamically. You can create a union. And most functions will iterate the lists, either as a union or indivdually.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook