CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006
-
27 mars 2006 à 16:10
CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006
-
27 mars 2006 à 21:33
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!!
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 27 mars 2006 à 16:25
Dans le forum, il n'y a pas très longtemps (la semaine dernière?) quelqu'un a posté une aide concernant les moindres carrés. Tu peux peut-être y jeter un coup d'oeil...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006 27 mars 2006 à 17:05
j'ai effectivement cherché mais je n'ai rien trouvé d'autre à part ces fonctions en VB !!! fonctionnent elles ensemble?
je n'arrive pas à obtenir de régression polynomiale correcte....
CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006 27 mars 2006 à 21:33
oué j'avais vu cela, mais ça ne correspondai pas bien à ce que je voulais faire.
les deux fonctions utilisées ci dessus étaient exactement ça...et comme je pige pas granchose aux maths, ben j'ai recopié en essayant de l'adapter mais pas facile!!!!
merci qd meme