CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006
-
27 mars 2006 à 15:56
CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006
-
28 mars 2006 à 22:58
salut,
je suis en stage et je code en C++.
j'ai trouvé ce code qui fait exactement la fonction que je veux, je l'ai donc transformé en C++.
Sub MoindreCarre(X(), Y(), p, C())
'X : Tableau des abscisses
'y : Tableau des ordonnées
'p : Dégre de la régression
'C : Tableau des coefficients du polynome calcul (doit contenir p+1 termes)
'
'le polynome genere est de la forme : Y = C(0)+ C(1)*X + C(2)* X^2 + ....
Dim A(), S() As Double
'Nombre de points
'N = 7
'plage des X
'X(1) -3: X(2) -2: X(3) = 1: X(4) = 2: X(5) = 3: X(6) = 4: X(7) = 5
'plage des Y
'Y(1) 2: Y(2) 0.5: Y(3) = -1: Y(4) = -1: Y(5) = 0: Y(6) = 2: Y(7) = 4
' Solution : c(2) 0.2698761, c(1) -0.304307, c(0) = -1.258357.
'Nombre de points
n = UBound(X)
ReDim A(1 To p + 1, 1 To p + 1), S(0 To 2 * p), W(1 To p + 1, 1 To 1), Sol(1 To p + 1, 1 To 1) 'dimensions de la matrice du système
'calcul des Sk
For k 0 To 2 * p: S(k) 0
For i = 1 To n
S(k) = S(k) + X(i) ^ k
Next i
Next k
'calcul des Wk
For k 0 To p: W(k + 1, 1) 0
For i = 1 To n
W(k + 1, 1) = W(k + 1, 1) + Y(i) * X(i) ^ k
Next i
Next k
'coefficients de la matrice du système
For i = 1 To p + 1
For j = 1 To p + 1
If i 1 And j 1 Then A(1, 1) = n Else A(i, j) = S(i + j - 2)
Next j
Next i
Call MAT_GAUSS(A(), W(), Sol())
For k = 0 To p
C(k + 1) = Sol(k + 1, 1) 'matrice colonne du second membre
Next k
End Sub
pouvez vous me dire quelle est la fonction mat_gauss qui correspond et si celle là convient...
'Resolution d'un système matriciel A.X = B par la méthode de Gauss, la
'matrice A étant une matrice carrée d'ordre n, B est un vecteur colonne
'1 x n et X le vecteur solution.
'Dans la procédure ci dessous, "Matrice" est une matrice de n lignes et
'n+1 colonnes obtenue par la juxtaposition de la matrice A et du vecteur B
'La procédure rajoute une colonne à cette matrice et stockera le vecteur
'solution X dans cette Colonne.
Public Sub GaussReso(ByRef Matrice() As Double)
Dim M(), X() As Double
Dim Tampon As Double
Dim n, I, J, K, T, Max As Long
n = UBound(Matrice, 1)
If UBound(Matrice, 2) <> n + 1 Then Exit Sub
ReDim X(n)
ReDim M(n, n + 1)
ReDim Preserve Matrice(n, n + 2)
For I = 1 To n
For K = 1 To n + 1
M(I, K) = Matrice(I, K)
Next K
Next I
For I = n To 2 Step -1
Max = I
For J = 1 To I - 1
If Abs(M(J, I)) > Abs(M(Max, I)) Then Max = J
Next J
If Max <> I Then
For K = 1 To n + 1
Tampon = M(I, K)
M(I, K) = M(Max, K)
M(Max, K) = Tampon
Next K
End If
For J = 1 To I - 1
M(J, n + 1) = M(J, n + 1) - M(I, n + 1) * M(J, I) / M(I, I)
For K = 1 To I
M(J, K) = M(J, K) - M(I, K) * M(J, I) / M(I, I)
Next K
Next J
Next I
X(1) = M(1, n + 1) / M(1, 1)
For I = 2 To n
X(I) = M(I, n + 1)
For K = 1 To I - 1
X(I) = X(I) - M(I, K) * X(K)
Next K
X(I) = X(I) / M(I, I)
Next I
For I = 1 To n
Matrice(I, n + 2) = X(I)
Next I
End Sub
Si vous avez déjà codé une fonction MoindreCarre(X(), Y(), p, C()) de ce type en C++, je serais ravie d'avoir les sources.
c'est urgent s'il vous plait, je dois finir ça vite!!