none
Vecteur propre d'une matrice RRS feed

Réponses

  • Une solution calculant vecteur propres et valeurs propres.Et ça marche! Enjoy...

     Sub MatMult(ByVal n, ByVal a, ByVal b, ByRef c)
            Try
                For i As Integer = 0 To n
                    For j As Integer = 0 To n
                        Dim ci As Double = 0
                        For k As Integer = 0 To n
                            ci = ci + a(i, k) * b(k, j)
                        Next
                        c(i, j) = ci
    
                    Next
    
                Next
            Catch erreur As Exception
                MessageBox.Show("Une erreur innatendue liée aux données que vous avez saisies est survenue. Veuillez recommencer", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    
        Sub MatEqual(ByVal n, ByVal a, ByRef b)
            Try
                For i As Integer = 0 To n
                    For j As Integer = 0 To n
                        b(i, j) = a(i, j)
                    Next
                Next
            Catch erreur As Exception
                MessageBox.Show("Une erreur innatendue liée aux données que vous avez saisies est survenue. Veuillez recommencer", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    
        Sub Transpose(ByVal n, ByVal a, ByRef b)
            Try
                For i As Integer = 0 To n
                    For j As Integer = 0 To n
                        b(i, j) = a(j, i)
                    Next
                Next
            Catch erreur As Exception
                MessageBox.Show("Une erreur innatendue liée aux données que vous avez saisies est survenue. Veuillez recommencer", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    
        Sub VPropre(ByVal t, ByVal formTS, ByRef formTSfinal)
            Try
                Dim a(t, t) As Double
                Dim b(t, t) As Double
                Dim d(t, t) As Double
                Dim q(t, t) As Double
                Dim r(t, t) As Double
    
                MatEqual(t, formTS, a)
    
                For i As Integer = 0 To t
                    For j As Integer = 0 To t
                        r(i, j) = 0
                    Next
                    r(i, i) = 1
                Next
    
                i = 0
                j = t - 1
                If Math.Abs(a(0, t)) < Math.Abs(a(0, 1)) Then
                    j = t
                End If
    
                sum = 1
                Do While (sum > 0.0000000001)
    
                    Dim m As Integer = 3 - j
                    Dim n As Integer = 1 - i
    
                    If (Math.Abs(a(0, m)) > Math.Abs(a(n, t))) Then
                        i = 0
                        j = m
                    Else
                        i = n
                        j = t
                    End If
    
    
                    Dim theta As Double = 0
    
                    If a(i, j) <> 0 Then
                        theta = PI / 4
                    End If
    
                    If a(i, i) <> a(j, j) Then
                        theta = 0.5 * (Math.Atan((2 * a(i, j)) / (a(i, i) - a(j, j))))
                    End If
    
    
                    Dim c As Double = Math.Cos(theta)
                    Dim s As Double = Math.Sin(theta)
    
                    For m = 0 To t
                        For n = 0 To t
                            q(m, n) = 0
                        Next
                        q(m, m) = 1
                    Next
    
                    q(i, i) = c
                    q(i, j) = s
                    q(j, i) = -s
                    q(j, j) = c
    
                    MatMult(t, q, a, d)
                    Transpose(t, q, b)
                    MatMult(t, d, b, a)
                    MatMult(t, q, r, b)
                    MatEqual(t, b, r)
                    sum = Math.Abs(a(0, 1)) + Math.Abs(a(0, 2)) + Math.Abs(a(1, 2))
    
                Loop
    
                MatEqual(t, r, formTSfinal)
    
                'Les a(i,i) représente les valeurs propres
    
                'TextBox1.Text = a(0, 0)
                'TextBox2.Text = a(1, 1)
                'TextBox3.Text = a(2, 2)
    
            Catch erreur As Exception
                MessageBox.Show("Une erreur innatendue liée aux données que vous avez saisies est survenue. Veuillez recommencer", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    • Marqué comme réponse alaminelesur mardi 28 janvier 2014 23:23
    mardi 28 janvier 2014 23:05

Toutes les réponses

  • Bonjour

    J'ai trouvé cet thread sur le même sujet.

    Essayez de le comprendre et l'adapter.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 17 janvier 2014 11:47
  • Bonjour

    Un petit retour SVP?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 22 janvier 2014 10:37
  • Une solution calculant vecteur propres et valeurs propres.Et ça marche! Enjoy...

     Sub MatMult(ByVal n, ByVal a, ByVal b, ByRef c)
            Try
                For i As Integer = 0 To n
                    For j As Integer = 0 To n
                        Dim ci As Double = 0
                        For k As Integer = 0 To n
                            ci = ci + a(i, k) * b(k, j)
                        Next
                        c(i, j) = ci
    
                    Next
    
                Next
            Catch erreur As Exception
                MessageBox.Show("Une erreur innatendue liée aux données que vous avez saisies est survenue. Veuillez recommencer", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    
        Sub MatEqual(ByVal n, ByVal a, ByRef b)
            Try
                For i As Integer = 0 To n
                    For j As Integer = 0 To n
                        b(i, j) = a(i, j)
                    Next
                Next
            Catch erreur As Exception
                MessageBox.Show("Une erreur innatendue liée aux données que vous avez saisies est survenue. Veuillez recommencer", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    
        Sub Transpose(ByVal n, ByVal a, ByRef b)
            Try
                For i As Integer = 0 To n
                    For j As Integer = 0 To n
                        b(i, j) = a(j, i)
                    Next
                Next
            Catch erreur As Exception
                MessageBox.Show("Une erreur innatendue liée aux données que vous avez saisies est survenue. Veuillez recommencer", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    
        Sub VPropre(ByVal t, ByVal formTS, ByRef formTSfinal)
            Try
                Dim a(t, t) As Double
                Dim b(t, t) As Double
                Dim d(t, t) As Double
                Dim q(t, t) As Double
                Dim r(t, t) As Double
    
                MatEqual(t, formTS, a)
    
                For i As Integer = 0 To t
                    For j As Integer = 0 To t
                        r(i, j) = 0
                    Next
                    r(i, i) = 1
                Next
    
                i = 0
                j = t - 1
                If Math.Abs(a(0, t)) < Math.Abs(a(0, 1)) Then
                    j = t
                End If
    
                sum = 1
                Do While (sum > 0.0000000001)
    
                    Dim m As Integer = 3 - j
                    Dim n As Integer = 1 - i
    
                    If (Math.Abs(a(0, m)) > Math.Abs(a(n, t))) Then
                        i = 0
                        j = m
                    Else
                        i = n
                        j = t
                    End If
    
    
                    Dim theta As Double = 0
    
                    If a(i, j) <> 0 Then
                        theta = PI / 4
                    End If
    
                    If a(i, i) <> a(j, j) Then
                        theta = 0.5 * (Math.Atan((2 * a(i, j)) / (a(i, i) - a(j, j))))
                    End If
    
    
                    Dim c As Double = Math.Cos(theta)
                    Dim s As Double = Math.Sin(theta)
    
                    For m = 0 To t
                        For n = 0 To t
                            q(m, n) = 0
                        Next
                        q(m, m) = 1
                    Next
    
                    q(i, i) = c
                    q(i, j) = s
                    q(j, i) = -s
                    q(j, j) = c
    
                    MatMult(t, q, a, d)
                    Transpose(t, q, b)
                    MatMult(t, d, b, a)
                    MatMult(t, q, r, b)
                    MatEqual(t, b, r)
                    sum = Math.Abs(a(0, 1)) + Math.Abs(a(0, 2)) + Math.Abs(a(1, 2))
    
                Loop
    
                MatEqual(t, r, formTSfinal)
    
                'Les a(i,i) représente les valeurs propres
    
                'TextBox1.Text = a(0, 0)
                'TextBox2.Text = a(1, 1)
                'TextBox3.Text = a(2, 2)
    
            Catch erreur As Exception
                MessageBox.Show("Une erreur innatendue liée aux données que vous avez saisies est survenue. Veuillez recommencer", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    • Marqué comme réponse alaminelesur mardi 28 janvier 2014 23:23
    mardi 28 janvier 2014 23:05