[Tutor] Lotka-Volterra Model Simulation Questions
Alan Gauld
alan.gauld at btinternet.com
Mon Oct 1 01:24:24 CEST 2012
On 30/09/12 11:50, Oscar Benjamin wrote:
>>> ...I'm sure that the equations you're refering to would have
>>> already been using lots of symbols
>> Yes which made them even more difficult to understand.
>
> Quantum mechanics is hard for anyone. I don't think that an alternative
> notation will make it any easier for people in the business of
> learning/teaching/using quantum mechanics
Possibly (although see below), but I'm not arguing for changing the
notation where a standard exists but where the standard is not known.
In the original post I suggested renaming the variables precisely
because I did not know the standard equation and would understand the
algorithm better if the variables had meaningful names. Someone who knew
the equation had no need of such because they did the translation
mentally using prior knowledge.
> think that it is possible to find a notation that will make quantum
> mechanics intelligible to a layperson:
It doesn't need to be intelligible to a lay person but QM is made up of
different communities: researchers, academics, practitioners, consumers
etc. I am a consumer of QM and used it in my work even though I could
not have derived the equations from scratch. But I understood them once
they were explained to me. But to really use them I had to go and
rewrite them as pseudo code functions (momentum_of_electon_shell(),
energy_of_photon() etc) Now, a pure physicist or mathematician would,
I'm sure, have found many faults in my translation but I had to do that
to understand the concepts for my own benefit.
But the mathematician/physicist in writing those same functions would
probably have used the technical terms and the code would have looked a
lot like the equations... but for me I had to translate the math 'code'
into quantities I understood - and yes that included 'h' for Plank's
constant because that one I already knew, so I freely admit it is all
relative!
> > Now imagine replacing each of those single letter symbols
> > with English underscore-separated words so instead of letter
> > capital psi you would have 'time_dependent_wave_function'
> > and instead of hbar you would have 'planks_constant_over_twopi'
> > and so on. Your equation would go from three lines to thirty
But this is where it gets interesting. One of the first programming jobs
I had after university was working in a team who industrialised the code
coming out of our research labs. Most of that work was taking domain
specific code written in Fortran, Basic or Forth and translating it into
C or Pascal (this was in the 80's...). We never used the pure math forms
given us by the researchers but translated it into much more verbose
"laymans" code (with the help of the researcher) because we knew that we
would have to maintain it not the eggheads. We couldn't become domain
experts in all of the fields we serviced so we had to make the research
code readable and maintainable by general purpose programmers.
> While I can write a script like the OP's in less than 5 minutes, in
> practise it takes longer to convince myself that the code is correct (if
> it is important for it to be so). I spend most of the time when
> developing such a script simply looking at the code and comparing it
> with the mathematical problem I was trying to solve.
Which is great if you understand the problem domain and the math
involved. If you don't you have to rely on getting the algorithm from
the experts and then translating it into something you can work with
after the expert has moved on.
> code diverges from the original problem statement the harder it becomes
> to really convince yourself that the code is correct. Renaming all of
> your variables (any more than you need to) so that cross-referencing
> always requires a mental table would be a waste of time and would
> increase the likelihood of bugs.
But for the non domain expert the mental table occurs when the technical
term is used. technical jargon in math as elsewhere is still jargon and
as such only understandable to the select few with the inside knowledge.
So while code is restricted to that closed community technical jargon is
fine. If it must be shared with a non technical audience then decisions
need to be taken, either to provide the mapping in
documentation/comments or to provide non technical names.
> In any case I guess you won't be pleased by my discovery that, thanks to
> PEP 3131, the following is valid code in Python 3 (I've attached the
> code in case it doesn't display properly):
Not at all, I'd rather see real Greek characters being used than
Anglicised spellings (especially many variants of same!). As I
say, where a generally understood symbology exists it makes sense to use
it. (A good example is in the use of complex numbers. These are not
generally understood outside the math/science fraternity but they are
nigh essential within that community. To try to reinvent the symbology
there would be foolish) It is only where the code must spill out to non
cognisant users that care needs to be taken.
> # Lotka-Volterra derivative
> def f(Z, t):
Although I would argue that 'f' is still a rotten name
for any function!
def lotka_volterra(Z,t):
might be better. :-)
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
More information about the Tutor
mailing list