Bonjour à tous, je suis débutant en ocaml et je souhaite réaliser la multiplication de matrice en utilisant l’algorithme de Strassen en ocaml .
Bonjour à tous, je suis débutant en ocaml et je souhaite réaliser la multiplication de matrice en utilisant l’algorithme de Strassen en ocaml .
Bah ouais mais ça nous dit pas quel est ton problème. Faut que tu sois plus précis:
- Qu'as-tu essayé ?
- Quel est le problème rencontré ?
Et bien entendu il ne faut pas poster ici à la première erreur de compilation, mais lorsqu'il y a quelque chose que tu as passé du temps à essayer de comprendre sans que cela ne marche...
Voici mon programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 n matA; // est une fonction qui me retourne la taille de la matrice // ces fonctions sont bien définies dans mon fichier projet.ml produit (* Fonction Mutiplication de deux matrices *) addMat (* Fonction Addition de deux matrices*) subtractMat (* Fonction Addition de deux matrices *) let rec strassen matA matB = if vect_length matA = 1 then produit matA matB else let t = (n matA)/2 in (* preparation du decoupage des deux matrices *) let a11 = make_matrix t t 0 in let a12 = make_matrix t t 0 in let a21 = make_matrix t t 0 in let a22 = make_matrix t t 0 in let b11 = make_matrix t t 0 in let b12 = make_matrix t t 0 in let b21 = make_matrix t t 0 in let b22 = make_matrix t t 0 in (*decoupage des deux matrices *) for i = 0 to t - 1 do for j = 0 to t - 1 do begin a11.(i).(j) <- matA.(i).(j); a12.(i).(j) <- matA.(i).(j + t); a21.(i).(j) <- matA.(i + t).(j); a22.(i).(j) <- matA.(i + t).(j + t); b11.(i).(j) <- matB.(i).(j); b12.(i).(j) <- matB.(i).(j + t); b21.(i).(j) <- matB.(i + t).(j); b22.(i).(j) <- matB.(i + t).(j + t) end done done; (* creation des 7 produits *) let e1 = make_matrix t t 0 in strassen (subtractMat a11 a22) (addMat b11 b22) ; let e2 = make_matrix t t 0 in strassen (addMat a11 a22) (addMat b11 b22) ; let e3 = make_matrix t t 0 in strassen (subtractMat a11 a21) (addMat b11 b12) ; let e4 = make_matrix t t 0 in strassen (addMat a11 a12) b22 ; let e5 = make_matrix t t 0 in strassen a11 (subtractMat b12 b22) ; let e6 = make_matrix t t 0 in strassen a22 (subtractMat b21 b11) ; let e7 = make_matrix t t 0 in strassen (addMat a21 a22) b11 ; // jusqu'ici c'est bon mais qd je cherche à calculer les 4 additions et la reconstruction de c tjrs erreurs . (* creation des 4 additions *) let c11 = make_matrix t t 0 in subtractMat((addMat(e1 e2)) (addMat (e4 e6))) ; let c11 = make_matrix t t 0 in subtractMat((addMat(e1 e2)) (addMat (e4 e6))) ; let c12 = make_matrix t t 0 in addMat e4 e5 ; let c21 = make_matrix t t 0 in addMat e6 e7 ; let c22 = make_matrix t t 0 in addMat (subtractMat e2 e3) (subtractMat e5 e7) ; let c = make_matrix (n matA) (n matA) 0 ; for i = 0 to t - 1 do for j = 0 to t - 1 do begin c.(i).(j) <- c11.(i).(j); c.(i).(j + t) <- c12.(i).(j); c.(i + t).(j) <- c21.(i).(j); c.(i + t).(j + t) <- c22.(i).(j) end done done; c ;;
Je gage que tu n'obtiens pas de réponse parce que ta demande et ton problème sont mal formulés.
On ne sait pas quel est LE message d'erreur. Or il n'y a pas de doute possible car (O)Caml ne donne jamais plus d'un seul message d'erreur.
Tu dis débuter en ocaml, or vect_length et make_matrix suggèrent que tu programmerais plutôt en Caml-Light. Du coup on n'est pas certain de savoir comment tester ton CODE.
Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
Avant de poser une question je lis les règles du forum.
Tout à fait !
Aussi, mais c'est moins grave, ton code n'est pas très bien indenté, et ça ne facilite pas la lecture.
Sinon, pour ce qui est du fait que ton code ne marche pas, je penses que tu ne fais pas bien la différence entre variable globale et locale. Par exemple, je suis sûr qu'en maths, cela te semblerait bizarre d'écrire:
Or c'est pourtant ce que tu fais (à plusieurs reprises) dans ton code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Soit x = 1 dans f(y)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager