Système de Calculs Matriciels général (V1.0.1)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Système de Calculs Matriciels général (V0.9.7)

Message par G-Rom »

le problème viens de là :

Procedure.q CalulateOffset1D(RowMax.u, LineID.u, RowID.u)

If LineID = 0 And RowID = 0
Offset1D.q = 0
ElseIf RowID > 0
Offset1D = RowID + LineID * RowMax
ElseIf LineID > 0
Offset1D = LineID * RowMax
EndIf

ProcedureReturn Offset1D
EndProcedure
je passe le retour en double et sa passe.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Système de Calculs Matriciels général (V0.9.7)

Message par Guimauve »

Ouais ben là y a un très sérieux problème puisque cette fonction doit impérativement retourner un entier et non une valeur réelle.

Code : Tout sélectionner

Procedure.l CalulateOffset1D(RowMax.u, LineID.u, RowID.u)

  If LineID = 0 And RowID = 0
    Offset1D.l = 0
  ElseIf RowID > 0
    Offset1D = RowID + LineID * RowMax
  ElseIf LineID > 0
    Offset1D = LineID * RowMax
  EndIf

  ProcedureReturn Offset1D
EndProcedure
Si tu fais un test avec la procédure ci-dessus, ça donne quoi ?

A+
Guimauve
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Système de Calculs Matriciels général (V0.9.7)

Message par G-Rom »

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Random Matrix
[-0.425, -3.373, -5.582, -7.909, -6.178]
[0.718, 7.159, 3.089, -0.439, 2.268]
[-7.067, 2.831, 7.407, -5.260, -0.067]
[-4.581, -3.366, -4.376, 3.406, -1.625]
[3.182, -1.894, -2.277, -4.376, 5.771]

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Random Matrix Diagonal
-0.4248000000000000109245946
7.158599999999999852207111
7.4070000000000000284217094
3.4056000000000001826094831
5.770800000000000373745479
[-0.425]
[7.159]
[7.407]
[3.406]
[5.771]

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF DEMONSTRATION <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Système de Calculs Matriciels général (V0.9.7)

Message par Guimauve »

Bon, c'est le résultat que l'on attend.

Cela implique donc que les limites de la matrice ne sont pas de 65535 X 65535 mais bien inférieur. Quelque chose comme 16383×16383×8 = 2147221512 si la quantité de mémoire le permet.
Merci à toi pour avoir trouvé le problème, je vais revenir à la limite de 16383×16383 comme grandeur maximale pour les matrices. Limite que je trouve un peu basse en passant.

A+
Guimauve
Dernière modification par Guimauve le jeu. 18/août/2011 21:15, modifié 1 fois.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Système de Calculs Matriciels général (V0.9.7)

Message par G-Rom »

Guimauve a écrit :Bon, c'est le résultat que l'on attend.

Cela implique donc que les limites de la matrice n'est pas de 65535 X 65535 mais bien inférieur. Quelque chose comme 16383×16383×8 = 2147221512 si la quantité de mémoire le permet.

Merci à toi pour avoir trouvé le problème, je vais revenir à la limite de 16383×16383 comme grandeur maximale pour les matrices. Limite que je trouve un peu basse en passant.

A+
Guimauve

Ça fait de sacré matrice tout de même, même pour le traitement d'image je doute d'utilisé des matrices de cette taille ;)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Système de Calculs Matriciels général (V0.9.7)

Message par Guimauve »

Et bien l'idée est de fixer les limites tellement loin que personnes ne puisse les atteindre. Bien évidemment cela dépend sur quoi l'on travaille et du nombre d'équations à résoudre simultanément.

En passant, j'ai mis à jour l'archive.

A+
Guimauve
Avatar de l’utilisateur
Ganagyre
Messages : 67
Inscription : jeu. 09/nov./2006 13:41
Localisation : PACA

Re: Système de Calculs Matriciels général (V0.9.9)

Message par Ganagyre »

Bonjour.

Tout Fonctionne bien maintenant, pour la taille limite des matrices c'est amplement suffisant.

Merci G-Rom & Guimauve.
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Re: Système de Calculs Matriciels général (V0.9.9)

Message par Good07 »

Bonjour,

Sur Mac, le programme ne marche pas. J'obtiens ce message d'erreur à la compilation:

http://imageshack.us/photo/my-images/23 ... .png[/img]

Uploaded with ImageShack.us

J'ai essayé pas mal de choses, avec les options du compilateur, mais j'obtiens toujours le même message. :(

PureBasic version 4.60 Beta 3 // Mac Os X version 10.6.8
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Système de Calculs Matriciels général (V0.9.9)

Message par Guimauve »

Bon apparemment il semble y avoir un problème avec les instructions en assembleur sous la plate-forme MAC.

Étant donnée que je n'ai pas de machine Mac OS, je ne peux pas faire des tests. En revanche, en remplaçant le codes de calculs des matrices de rotation par celui-ci :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< RotateX 3D Operator <<<<<

Procedure RotateXMatrix3D(*RotateX.Matrix, Theta.d)
  
  Protected Cos.d, Sin.d 
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Linux
   
      !FLD qword [p.v_Theta]
      !FSINCOS
      !FSTP qword [p.v_Cos]
      !FSTP qword [p.v_Sin] 
      
    CompilerCase #PB_OS_Windows
      
      !FLD qword [p.v_Theta]
      !FSINCOS
      !FSTP qword [p.v_Cos]
      !FSTP qword [p.v_Sin] 
      
    CompilerCase #PB_OS_MacOS
      
      Cos.d = Cos(Theta)
      Sin.d = Sin(Theta)
      
  CompilerEndSelect
  
  IdentityMatrix(*RotateX, 4)
  
  ; <<<<<<<<<<<<<<<<<<<<
  ; <<<<< Ligne 2 <<<<<<
  
  PokeMatrixElement(*RotateX, 1, 1, Cos)
  PokeMatrixElement(*RotateX, 1, 2, -Sin)
  
  ; <<<<<<<<<<<<<<<<<<<<
  ; <<<<< Ligne 3 <<<<<<
  
  PokeMatrixElement(*RotateX, 2, 1, Sin)
  PokeMatrixElement(*RotateX, 2, 2, Cos)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le mutateur pour le RotateY 3D <<<<<

Procedure RotateYMatrix3D(*RotateY.Matrix, Theta.d)
  
  Protected Cos.d, Sin.d
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Linux
   
      !FLD qword [p.v_Theta]
      !FSINCOS
      !FSTP qword [p.v_Cos]
      !FSTP qword [p.v_Sin] 
      
    CompilerCase #PB_OS_Windows
      
      !FLD qword [p.v_Theta]
      !FSINCOS
      !FSTP qword [p.v_Cos]
      !FSTP qword [p.v_Sin] 
      
    CompilerCase #PB_OS_MacOS
      
      Cos.d = Cos(Theta)
      Sin.d = Sin(Theta)
      
  CompilerEndSelect
  
  IdentityMatrix(*RotateY, 4)
  
  ; <<<<<<<<<<<<<<<<<<<<
  ; <<<<< Ligne 1 <<<<<<
  
  PokeMatrixElement(*RotateY, 0, 0, Cos)
  PokeMatrixElement(*RotateY, 0, 2, Sin)
  
  ; <<<<<<<<<<<<<<<<<<<<
  ; <<<<< Ligne 3 <<<<<<
  
  PokeMatrixElement(*RotateY, 2, 0, -Sin)
  PokeMatrixElement(*RotateY, 2, 2, Cos)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le mutateur pour le RotateZ 3D <<<<<

Procedure RotateZMatrix3D(*RotateZ.Matrix, Theta.d)
  
  Protected Cos.d, Sin.d 
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Linux
   
      !FLD qword [p.v_Theta]
      !FSINCOS
      !FSTP qword [p.v_Cos]
      !FSTP qword [p.v_Sin] 
      
    CompilerCase #PB_OS_Windows
      
      !FLD qword [p.v_Theta]
      !FSINCOS
      !FSTP qword [p.v_Cos]
      !FSTP qword [p.v_Sin] 
      
    CompilerCase #PB_OS_MacOS
      
      Cos.d = Cos(Theta)
      Sin.d = Sin(Theta)
      
  CompilerEndSelect
  
  IdentityMatrix(*RotateZ, 4)
  
  ; <<<<<<<<<<<<<<<<<<<<
  ; <<<<< Ligne 1 <<<<<<
  
  PokeMatrixElement(*RotateZ, 0, 0, Cos)
  PokeMatrixElement(*RotateZ, 0, 1, -Sin)
  
  ; <<<<<<<<<<<<<<<<<<<<
  ; <<<<< Ligne 2 <<<<<<
  
  PokeMatrixElement(*RotateZ, 1, 0, Sin)
  PokeMatrixElement(*RotateZ, 1, 1, Cos)
  
EndProcedure
Ça devrait fonctionner. Si quelqu'un à une solution pour faire passer les instructions ASM sous Mac OS, je suis prenneur.

A+
Guimauve
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Re: Système de Calculs Matriciels général (V0.9.9)

Message par Good07 »

Bonjour Guimauve,

Merci pour votre réponse, apparemment je n'ai plus d'erreur de compilation, mais j'ai une autre erreur car il doit manquer une procédure:
Erreur ligne 723:
PokeMatrixElement() is not a fonction, array, macro or linked list ...
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Système de Calculs Matriciels général (V0.9.9)

Message par Guimauve »

Oups,

J'ai oublié que j'ai remplacé les macro Private_SetMatrixElement() et Private_GetMatrixElement() par les macros PokeMatrixElement() et PeekMatrixElement()

D'ici à ce que l'archive soit mise à jour.

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Poke Peek Matrix Element <<<<<

Macro PokeMatrixElement(MatrixA, P_Line, P_Row, P_Element)
  
  PokeD(ReachMatrixElement(MatrixA, CalulateOffset1D(GetMatrixRow(MatrixA), P_Line, P_Row)), P_Element)
  
EndMacro

Macro PeekMatrixElement(MatrixA, P_Line, P_Row)
  
  PeekD(ReachMatrixElement(MatrixA, CalulateOffset1D(GetMatrixRow(MatrixA), P_Line, P_Row)))
  
EndMacro
Désolé.

A+
Guimauve
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Re: Système de Calculs Matriciels général (V0.9.9)

Message par Good07 »

Ne soyez pas désolé, c'est moi qui vous remercie de vous pencher sur le problème.
Problème d'ailleurs résolu à mon avis, car cette fois-ci le programme de demo fonctionne sans problème.

Je vois que le Mac pose certains problèmes avec PureBasic, mais avec le temps ça devrai se résorber et il faut dire que la communauté Mac sur le forum FR n'est pas immense.

Merci pour le partage. :D
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Système de Calculs Matriciels général (V1.0.1)

Message par Guimauve »

L'archive viens d'être mise à jour. Voir le premier message pour le lien de téléchargement.

A+
Guimauve
Répondre