IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème avec tableaux de double à une ou plusieurs dimensions


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut Problème avec tableaux de double à une ou plusieurs dimensions
    Bonjour à tous,

    Je code depuis peu en VB.Net et je suis confronté à un problème. Mon problème concerne les tableaux de double à une ou plusieurs dimensions. En effet, j'ai pu trouvé un code sur le net permettant de faire des opérations sur matrices (exemple ci-dessous):

    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
     
    Public Shared Function Mult(ByVal Mat1(,) As Double, ByVal Mat2(,) As Double) As Double(,)
            Dim Sum As Double = 0
            Dim Rows1 As Integer, Cols1 As Integer
            Dim Rows2 As Integer, Cols2 As Integer
     
            On Error GoTo Error_Handler
     
            Find_RC(Mat1, Rows1, Cols1)
            Find_RC(Mat2, Rows2, Cols2)
     
            If Cols1 <> Rows2 Then
                GoTo Error_Dimension
            End If
     
            Dim Temp(Rows1, Cols2) As Double
     
            For i As Integer = 0 To Rows1
                For j As Integer = 0 To Cols2
                    For k As Integer = 0 To Cols1
                        Sum += Mat1(i, k) * Mat2(k, j)
                    Next k
                    Temp(i, j) = Sum
                    Sum = 0
                Next j
            Next i
     
            Return Temp
     
    Error_Dimension:
            Err.Raise("5009", , "Dimensions of the two matrices not suitable for multiplication !")
     
    Error_Handler:
            If Err.Number = 5009 Then
                Err.Raise("5009", , "Dimensions of the two matrices not suitable for multiplication !")
            Else
                Err.Raise("5022", , "One or both of the matrices are null, this operation cannot be done !!")
            End If
     
        End Function
    Ce code permet de multiplier des matrices de 2 dimensions entre elles comme l'indique le "Mat(,) as double "

    Mon problème est que j'aimerais pouvoir utiliser ce code pour des matrices à une dimension style "Mat() as double". Or ce n'est pas possible puisqu'il m'affiche comme erreur:
    Un tableau à 2 dimensions de double ne peut être converti en un tableau à 1 dimension de double.
    Dois je le déclarer en objet, créer un type (je crois savoir que c'est impossible en VB.Net), votre aide sera la bienvenue.

    Merci à tous

    Anthony

  2. #2
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Bonjour,

    tu t'emballe les pédales la, une matrice est un tableau à double dimension, et un vecteur est un tableau à une dimension. L'algorithme pour la multiplication de deux matrices n'est pas pareil que l'algorithme pour la multiplication de deux vecteurs.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  3. #3
    Membre éprouvé
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Par défaut
    Bonjour

    Mr.Anthony75 pour ton bien , la meilleure façon d'apprendre les choses est de faire effort

    tu peux faire ton propre code car c'est simple et je crois qu'il ne vas pas te poser un gros problème

    utilise un algorithme simple et efficace , tu vas trouver la solution bien sûr

    Bien à vous

    Cdt ,

  4. #4
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Tout d'abord merci à tous les deux pour vos réponses.

    Le code ci-dessus m'a servi d'inspiration en réalité. J'en ai programmé d'autres qui me posent le même problème.

    Un vecteur en effet est un cas particulier de matrice, une matrice Nx1.

    Ce que je voudrais consiste à ne pas avoir deux codes différents pour la multiplication vectorielle et la multiplication matricielle. Un même code "Mult" permettant de prendre en compte les vecteurs et les matrices. D'où le problème avec la déclaration de variable dans la fonction:

    "Mat1(,) as double"

    qui ne prend pas en compte les vecteurs (matrices Nx1) et seulement les matrices (NxN)

    N'existe-il pas un moyen de déclarer par exemple: " Mat1 as double () or(,) "

    D'ailleurs, il ne faudrait pas créer seulement deux fonctions, l'une vectorielle et l'autre matricielle. Je pense notamment aux moindres carrés dans lesquels le vecteur des coefficient sera de la forme () et la matrice des variables indépendantes (,) si la régression est une régression multiple. Il me faudrait donc créer:
    (,) * (,)
    () * (,)
    () * ()

    C'est assez lourd pour du code si une solution à la source de la déclaration existe.

    ou de créer un type prenant en compte les deux types de matrices... comme il était possible sous VB6

    Merci à tous les deux

    Anthony

  5. #5
    Membre éprouvé
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Par défaut
    Bonjour

    Anthony75 , j'ai pas bien compris ce que tu veux faire

    notamment je constate que tu veux faire la multiplication de 2 Vecteurs , aussi 2 tableaux à 2 dimensions

    je demande si tu peux nous donner un peu plus d'explication pour qu'on puisse t'aider

    Merci à vous

    Cdt ,

  6. #6
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Merci jimb2k,

    Ce que j'aimerais faire et qui serait surement le plus efficient consisterait à créer je pense une classe ou structure (je ne connais pas bien la différence) que l'on appelerait par exemple "matrix" et qui pourrait supporter les tableaux de type (,) et () .

    Ainsi, je pourrais faire comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Shared Function Mult(ByVal Mat1 As Matrix, ByVal Mat2 As Matrix) as Matrix
    En déclarant mes variables de la sorte j'éviterai de devoir définir si le tableau est (,) ou (). Il serait considéré comme une Matrix (à une ou deux dimensions)

    Je n'ai cependant aucune idée de comment débuter et ce que j'ai pu lire sur le net me laisse perplexe...

    Si vous avez une idée de comment je peux me lancer, ce serait vraiment sympa.

    Cheers

    Anthony

  7. #7
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Citation Envoyé par Anthony75 Voir le message
    Tout d'abord merci à tous les deux pour vos réponses.


    Un vecteur en effet est un cas particulier de matrice, une matrice Nx1.
    Un vecteur n'est pas un cas particulier de matrice.

    Tu peut utiliser la surcharge pour faire ce que tu veut.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  8. #8
    Membre éprouvé
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Par défaut
    Bonjour

    je crois qu'il y a beaucoup de casse tête dans tout ça

    pour moi , je croix que tu peux faire ça en déclarant 3 fonctions qui contiendront les mêmes instructions pour faire ce que tu veux

    Par exemple :

    1ère fonction : (,) * (,)

    2ème fonction : () * (,)

    3ème fonction : () * ()

    Si vous avez d'autres idées , on est là

    Merci à vous

    Cdt ,

Discussions similaires

  1. problème avec l'apostrophe dans une requête
    Par mika0102 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2019, 16h51
  2. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 15h22
  3. [Débutant] Problème avec les paramètres d'une proc stockée
    Par babulior dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/06/2005, 15h38
  4. Problèmes avec un TWebBrowser dans une DLL
    Par bellamyjc dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/01/2005, 22h35
  5. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo