From: "Nasser M. Abbasi" <nma@12000.org>
Subject: Re: Does Ada need elemental functions to make it suitable for scientific work?
Date: Tue, 10 Jul 2012 03:39:58 -0500
Date: 2012-07-10T03:39:58-05:00 [thread overview]
Message-ID: <jtgpos$20g$2@speranza.aioe.org> (raw)
In-Reply-To: 637de084-0e71-4077-a1c5-fc4200cad3cf@googlegroups.com
On 7/10/2012 3:02 AM, gautier.de.montmollin@gmail.com wrote:
> Le mardi 10 juillet 2012 07:22:58 UTC+2, Ada novice a �crit :
>
>> Believe me, for someone who do numerical computations on a daily basis, an operation
>like V**2 is a NECESSITY. It's a pity that Ada does not offer such a facility.
>I do not blame those who stick to Matlab (or Fortran?) for doing numerical computations.
>
> Wait... There are *such* facilities and several built-in operations *like* that:
> http://www.ada-auth.org/standards/12rm/html/RM-G-3-1.html
>
> Apparently it is not enough. But it is possible to make a proposal for
> the next standard (and short term for the next GNAT version).
>
That is a start. But not enough by any means. All functions should be
vectorized. Even user defined ones.
In Ada, I can't even take the sin of a vector
----------------------
with Ada.Numerics.Elementary_Functions;
use Ada.Numerics.Elementary_Functions;
procedure foo3 is
type array_t is array(1..5) OF float;
D : constant array_t :=(0.1,0.2,0.3,0.4,0.5);
V : array_t;
begin
-- V := sin(D); -- ERROR
for I in D'Range loop -- must use a LOOP
V(I) := sin(D(I));
end loop;
end foo3;
--------------------
I can ofcourse overload sin, hide the loop inside my own sine
and then do
V:= myPackage.sin(D);
All of this is possible in Ada. It is just a little (alot?)
more effort compared to what is out there.
octave/Matlab:
--------------------------
D=[0.1,0.2,0.3,0.4,0.5];
sin(D)
ans =
0.0998 0.1987 0.2955 0.3894 0.4794
---------------------------
> The snag with that *specific* operation, v**2 meaning "v(i)**2 for each i",
>is that it is counter-intuitive from a linear algebra point of view. You
>would rather expect v**2 = v*v. Now another snag is should "*" be the
>dot or the cross product ?...
>
> These kind of things are thought-out carefully before landing into an Ada standard...
>
But these issue have been solved long time time. (like maybe
30 years ago? and are well defined for all cases:
http://www.mathworks.com/help/techdoc/ref/arithmeticoperators.html
There are element-wise operators, and operators that work
on the whole vector or matrix.
In octave/Matlab world, V.^2 means element-wise. (notice
the ".")
-------------------------
octave:3> V=[1 2 3 4];
octave:4> v.^2
ans =
1 4 9 16
--------------------------
Otherwise, it becomes standard matrix operation.
A^2 means A*A
------------------------
octave:17> A=[1 2;3 4]
A =
1 2
3 4
octave:18> A^2
ans =
7 10
15 22
octave:19> A*A
ans =
7 10
15 22
---------------------
To do dot product, it has its own operator, called dot() !
----------------------
octave:5> dot(V,V)
ans = 30
-------------------------
To do cross product, it has its own operator, called cross() !
-----------------------
octave:9> D=[1 2 3]; V=[3 4 5]; cross(D,V)
ans =
-2 4 -2
-------------------
btw, in Mathematica, it is the other way around. V*V does
element by element multiplication, and V.V does matrix product.
It has also Dot[] and Cross[] and all functions are vectorized,
and all user defined functions can be vectorized by simply
giving them the attribute Listable.
--Nasser
next prev parent reply other threads:[~2012-07-10 8:40 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-09 23:27 Does Ada need elemental functions to make it suitable for scientific work? Nasser M. Abbasi
[not found] ` <d78nv7dhf88bqv7hrd9eft231a4h2scs10@invalid.netcom.com>
2012-07-10 4:22 ` Nasser M. Abbasi
2012-07-10 14:26 ` Marco
2012-07-10 4:24 ` gautier_niouzes
2012-07-10 5:22 ` Ada novice
2012-07-10 7:27 ` Dmitry A. Kazakov
2012-07-10 8:06 ` gautier_niouzes
[not found] ` <637de084-0e71-4077-a1c5-fc4200cad3cf@googlegroups.com>
2012-07-10 8:39 ` Nasser M. Abbasi [this message]
2012-07-10 8:58 ` Ada novice
2012-07-10 9:07 ` Dmitry A. Kazakov
2012-07-10 9:21 ` Nasser M. Abbasi
2012-07-10 9:26 ` Nasser M. Abbasi
2012-07-10 9:50 ` Dmitry A. Kazakov
2012-07-20 1:56 ` Randy Brukardt
2012-07-20 21:49 ` Adam Beneschan
2012-07-12 0:31 ` robin.vowels
2012-07-12 7:12 ` Dmitry A. Kazakov
2012-07-29 13:39 ` Robin Vowels
2012-07-29 14:22 ` Dmitry A. Kazakov
2012-07-29 20:54 ` glen herrmannsfeldt
[not found] ` <apib1897s56dkultqmfl3emvk1os3tfdak@invalid.netcom.com>
2012-07-30 4:15 ` glen herrmannsfeldt
[not found] ` <nfhd181tv9u87mcqfb7rgd8lm48ihr9f4r@invalid.netcom.com>
2012-07-31 8:53 ` MATRIX MULTIPLICATION Robin Vowels
2012-07-31 9:05 ` Robin Vowels
2012-07-30 0:49 ` Does Ada need elemental functions to make it suitable for scientific work? Robin Vowels
2012-07-12 0:22 ` robin.vowels
2012-07-20 1:51 ` Randy Brukardt
2012-07-29 13:53 ` Robin Vowels
2012-07-29 15:51 ` J-P. Rosen
2012-07-29 16:07 ` Dmitry A. Kazakov
2012-07-29 20:30 ` Simon Wright
2012-07-29 20:59 ` glen herrmannsfeldt
2012-07-29 21:44 ` J-P. Rosen
2012-07-29 22:54 ` Simon Wright
2012-07-30 0:53 ` Robin Vowels
2012-07-30 2:20 ` Shmuel Metz
2012-07-10 12:46 ` Brian Drummond
2012-07-10 11:06 ` Simon Wright
2012-07-10 11:59 ` Georg Bauhaus
2012-07-10 12:20 ` Brian Drummond
2012-07-10 19:52 ` Ada novice
2012-07-11 8:41 ` gautier_niouzes
2012-07-11 9:42 ` Ken Thomas
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox