Advertisement
Guest User

Oui

a guest
Dec 8th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.55 KB | None | 0 0
  1. open Printf
  2.  
  3. (*Création du tableau RK4 composé de
  4. tau, b et a comme vu au cours *)
  5.  
  6. let tau = [|0.;0.5;0.5;1.|]
  7.  
  8. let b = [|1./.6.;1./.3.;1./.3.;1./.6.|]
  9.  
  10. let a = [|[||];
  11.         [|0.5|];
  12.         [|0.;0.5|];
  13.         [|0.;0.;1.|]|]
  14.  
  15. (*Multiplication d'un tableau par un float k*)
  16. let mult k a = Array.map (fun i -> k*.i) a
  17.  
  18. (*Addition de 2 tableaux de même taille*)
  19. let add a1 a2 =
  20.     if a1 = [||] then
  21.         a2
  22.     else if a2 = [||] then
  23.         a1
  24.         else
  25.             let arr = Array.make (Array.length a1) 0. in
  26.             for i = 0 to (Array.length a1)-1 do
  27.                 arr.(i) <- a1.(i) +. a2.(i)
  28.             done;
  29.             arr
  30. (*évaluation de f au temps t*)
  31. let rk4 f u t n =
  32.     let k = Array.make 4 [||] and
  33.     h = t/. float_of_int n and
  34.     u_i = ref u in
  35.     let t_i = ref 0. in
  36.     for i = 0 to n do
  37.         (*calcul des k_j*)
  38.         k.(0) <- mult h (f (!t_i +. tau.(0) *. h) !u_i);
  39.         for j = 1 to 3 do
  40.             let res = ref [||] in
  41.             (*somme des vecteurs a_jl*k_l quand l < j*)
  42.             for l = 0 to j-1 do
  43.                 res := add !res (mult a.(j).(l) k.(l))
  44.             done;
  45.                 res := add !u_i !res;
  46.                 k.(j) <- mult h (f (!t_i +. tau.(j) *. h) !res);
  47.         done;
  48.         (*Somme de b_j*k_j*)
  49.         let tmp = ref [||] in
  50.         for j = 0 to 3 do
  51.             tmp := add !tmp (mult b.(j) k.(j))
  52.         done;
  53.         u_i := add !u_i !tmp;
  54.         t_i := !t_i +. h;
  55.         (* printf "ui1: %g ui2: %g\n" !u_i.(0) !u_i.(1) *)
  56.     done;
  57.     !u_i
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement