APS Excellence in Physics Education Award
November 2019 Science SPORE Prize
November 2011 The Open Source Physics Project is supported by NSF DUE-0442581.

Lookup Table post and replies

Lookup Table
Rosen Mitrev
3 Posts

Hello!
I want to know:
1. Is it possible to define in EJS relation between two variables as Lookup Table (as in Matlab)?
2. How to change a value of the constant when certain condition is met? For example:

IF time>5 THEN spring_constant=10 ELSE spring_constant=5

Where to find illustrating examples?

Rosen

Post edited October 4, 2013 at 4:00 AM EST.

Replies to Lookup Table

Re: Lookup Table -
Francisco Esquembre
228 Posts

- 1. Is it possible to define in EJS relation between two variables as Lookup Table (as in Matlab)?

Any relation among variables, such as the one for kinetic energy:
K = 0.5*mass*v*v;
must be written in a page of Fixed Relations in EJS. These pages are evaluated after each evolution step and after each interaction of the user.

- 2. How to change a value of the constant when certain condition is met? For example:

If the model is based on an ODE, add an Event with Zero value function:
return 5 - time;

and action:
spring_constant = 10;

If it is not based on an ODE (which I doubt), your if is fine. But make sure the step for t makes it reach t=5 more or less exactly.

Paco

Re: Re: Lookup Table -
Rosen Mitrev
3 Posts

D-r  Esquembre, thank you for your attention!

I'd like to be more specific in my first question. For example, i have a relation between height h and air density rho  in the following table form:

h         rho
0         2.377
1000   2.208
2000   2.241
4000   2.117
....       ....

and so on.
I 'd like to use this relation with differential equation of rocket motion with drag force.

Is there any way to put this table in EJS and make interpolation between these discrete values and use them in the differential equation?

Thanks

Rosen

Post edited October 4, 2013 at 11:36 AM EST.

Re: Re: Re: Lookup Table -
Francisco Esquembre
228 Posts

Ok. Sorry for the delay. The answer is basically YES. But with caution.

EJS comes with the latest Apache Commons Math library in it. To use it, you just create an duse the objects you need.

I have attached an example where I use your data to create by interpolation a function using Neville's algorithm. This is what Apache says about it:

"Implements the Neville's Algorithm for interpolation of real univariate functions. For reference, see Introduction to Numerical Analysis, ISBN 038795452X, chapter 2."

Once created, you can, in principle, use this function to anything (I use it to plot the function in a smooth way), including the rate part of an ODE.

The caveat is that, depending on your solver, the algorithm to solve the ODE requires the rate function to be "of class C^k". That is the rate function must be differentiable a number of times (k times). For instance, you need C^4 (or was it C^5?) for a Runge-Kutta algorithm to work fine.

I honestly don't know what differentiability you get from Neville's algorithm. But it could every well be a polynomial interpolation, in which case it is just fine.

Hope this helps.

Again, sorry for the delay.

Paco

PS: This was a nice question...

Attached File: ejs_InterpolationExample.zip

Re: Re: Re: Re: Lookup Table -
Rosen Mitrev
3 Posts

Paco, thank you very much for the answer. That was what i need!

OSP Projects: Open Source Physics - EJS Modeling Tracker Physlet Physics Physlet Quantum Physics STP Book