Section courante

A propos

Section administrative du site

Dans le domaine scientifique, on assiste souvent à des cachoteries de la connaissance sur des choses aussi banale que la fréquence des vagues sur l'océan en fonction du nombre de vague. Heureusement des livres comme «Encyclopededia Universalis, Dictionnaire des Sciences de la Terre, pages 588-591, Houles et vagues, 1998, ISBN: 2-226-10094-6» éclaircissent ce genre de question et nous empêche de tomber directement au Moyen-Age. Vous trouverez la réponse que vous souhaitez, à l'aide du code source Ada suivant :

  1. WITH TEXT_IO;
  2.  
  3. PROCEDURE Wave IS
  4.  
  5.    USE TEXT_IO;
  6.  
  7.    W,WaveNumber:Float;
  8.    
  9.    FUNCTION Sqr(X:IN Float) RETURN Float IS BEGIN
  10.       RETURN X*X;
  11.    END Sqr;
  12.    
  13.    FUNCTION  Exp(X:IN Float) RETURN Float IS         
  14.       A0 : CONSTANT := 0.05;   
  15.       A1 : CONSTANT := 6.9;      
  16.       A2 : CONSTANT := 205.8;  
  17.       A3 : CONSTANT := 42.0;    
  18.       Y, Z: Float;
  19.    BEGIN      
  20.       Y := Sqr(X);  
  21.       z := a2/(y + a3);
  22.       Z := A0*Y + X + A1 - Z;      
  23.       RETURN 1.0 - 2.0*X/Z;      
  24.    END Exp;
  25.    
  26.    FUNCTION Sqrt(X:IN Float) RETURN Float IS 
  27.       A,B,M,XN:FLOAT; 
  28.    BEGIN 
  29.       IF X=0.0 THEN 
  30.          RETURN 0.0; 
  31.       ELSE 
  32.          M:=1.0; 
  33.          XN:=X; 
  34.          IF XN<0.0 THEN
  35.             XN:=-XN;
  36.          END IF;
  37.          WHILE XN>=2.0 LOOP 
  38.             XN:=0.25*XN; 
  39.             M:=2.0*M; 
  40.          END LOOP; 
  41.          WHILE XN<0.5 LOOP 
  42.             XN:=4.0*XN; 
  43.             M:=0.5*M; 
  44.          END LOOP; 
  45.          A:=XN; 
  46.          B:=1.0-XN; 
  47.          LOOP A:=A*(1.0+0.5*B); 
  48.             B:=0.25*(3.0+B)*B*B; 
  49.             EXIT WHEN B<1.0E-15; 
  50.          END LOOP; 
  51.          RETURN A*M; 
  52.       END IF; 
  53.    END; 
  54.  
  55.    FUNCTION Tanh(A:IN Float) RETURN Float IS BEGIN
  56.       RETURN -Exp(-A)/(Exp(A)+Exp(-A))*2.0+1.0;
  57.    END Tanh;
  58.  
  59.    FUNCTION DispersionWave(WaveNumber,Depth,Gravity:IN Float) RETURN Float IS BEGIN
  60.       RETURN Sqrt(WaveNumber*Gravity*Tanh(WaveNumber*Depth));
  61.    END DispersionWave;
  62.  
  63. BEGIN
  64.    PUT_LINE("Nombre de vague Frequence de vague");
  65.    WaveNumber:=0.01;
  66.    WHILE WaveNumber<2.0 LOOP
  67.       PUT(FLOAT'IMAGE(WaveNumber) & " ");
  68.       W:=DispersionWave(WaveNumber,2.0,9.8066);
  69.       PUT_LINE(FLOAT'IMAGE(W));
  70.       WaveNumber:=WaveNumber+0.1;
  71.    END LOOP;
  72. END Wave;

on obtiendra le résultat suivant :

Nombre de vague Frequence de vague
0.01                0.0442838405346847
0.11                0.483284245969315
0.21                0.904120000135606
0.31                1.29439350996723
0.41                1.64750037820416
0.51                1.96223961769009
0.61                2.24116780044981
0.71                2.48877439250178
0.81                2.71009411116294
0.91                2.90988655848262
1.01                3.09226456180236
1.11                3.26060035427737
1.21                3.4175734276094
1.31                3.56527459565709
1.41                3.70532058634234
1.51                3.83895838612317
1.61                3.96715215371979
1.71                4.09065210263135
1.81                4.21004747750794
1.91                4.32580654215394


Dernière mise à jour : Samedi, le 25 août 2012