Hi,
Again a very basic problem, I need to create arrays with numerical
values, and do very simple math operations on each elements. I’ve
tried to install ruby-gsl as suggested but I don’t have admin rights
on the machine. Here is my try:
puts longAxis
puts shortAxis
the result is wrong, and it all seems over-sophisticated to me. I
must have missed a basic technique.
I need three arrays: ‘aspectRatio’ is just [0.5, 0.6, 0.7, 0.8, 0.9,
1.0], but I want to construct it as a range (call me lazy). The
second is constructed doing the same calculation on every element of
‘aspectRatio’. The third one needs to access elements of the same
index from the previous two arrays, and multiply them together to
form the new array.
Here is the result I’d expect:
0.035717
0.037954
0.039956
0.041774
0.043447
0.045000
and the result I get:
0.045
0.045
0.045
Any help / advice appreciated,
Best regards
baptiste
On 7/1/07, baptiste Auguié [email protected] wrote:
Sorry if I have overlooked other issues but
longAxis=aspectRatio.collect{ |x| radius.to_f*((x.to_f)**(-2/3)) }
-2/3 is not what you expect it to be, I’d say, cause you’d probably
written -1 than or just divided radius by x.
radius and x seem to be floats already, you might save some keystrokes
there
HTH
Robert
The names may have been confusing without the context. I believe the
formula is right (as Octave’s results show). long/short axis refer to
a 3D ellipsoid of constant volume, radius referring to the degenerate
case of a sphere. Thanks for the .to_f thing, I seem to be overdoing
many things
thanks,
baptiste
On 7/1/07, baptiste Auguié [email protected] wrote:
The names may have been confusing without the context. I believe the
formula is right (as Octave’s results show).
You mean **(-2/3) is what you want???
Maybe I was not clear enough - as I rarely are :(.
-2/3 ==> -1
Robert
yep, i do want (-2/3). Oh, i see, is 2/3 == 1 for Ruby?? OMG this is
mad !
thanks, it works now!
radius=0.045
aspectRatio=[]
longAxis=[]
shortAxis=[]
0.5.step(1, 0.1) { |x| aspectRatio << x.to_s }
longAxis=aspectRatio.collect{ |x| radius*((x.to_f)**(-2/3.to_f)) }
aspectRatio.each_index { |x| shortAxis << longAxis[x].to_f*aspectRatio
[x].to_f}
puts longAxis
puts shortAxis
any easier / more elegant way to do all this ?
thanks,
baptiste
On 1 Jul 2007, at 12:15, Robert D. wrote:
Baptiste Auguié
Physics Department
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK
Phone: +44 1392 264187
http://newton.ex.ac.uk/research/emag
http://projects.ex.ac.uk/atto
Have a look at matrix.rb (require matrix, ri Vector) and at the narray
gem (gem install narray, require ‘narray’, ‘nmatrix’, read the docs
that come with it for NVector).
The Vector and NVector datatypes seem to be fit for what you do, and
you can always .to_a them.
Aur
On 7/1/07, baptiste Auguié [email protected] wrote:
yep, i do want (-2/3). Oh, i see, is 2/3 == 1 for Ruby?? OMG this is
mad !
No 0 I am a declared egghead already, but it was the issue nonetheless.
It is not mad for Computer Scientists only for real Scientists
You have heard the prime number joke before, have you not?
Well here it goes spamming the group, but it really explains the
problem of expectation and behavior:
Theorem: All odd numbers are prime.
Proof
Theoretical Physician: 1 is odd but not prime, theorem fails!
I spare you 42 disciplines here
Computer Scientist (that is me folks do not holler ;): 1 prime, 2
prime, 3 prime Quod Erat Demonstrandum.
Seriously now, in many fields 2/3 ==> 0 is much more useful than ==>
0.66666…, not in yours I guess. BTW Lua and Perl do it your way;
Phyton does it our way.
Cheers
Robert
On 7/1/07, baptiste Auguié [email protected] wrote:
any easier / more elegant way to do all this ?
thanks,
baptiste
Instead of (-2/3.to_f) , you could use (-2.0/3). By using a float
literal rather than an integer literal, you will get float division
rather than integer division.
-A