Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| Défi2 = les moindres carrés | |
|
+5papydall mindstorm jean_debord Yannick Ouf_ca_passe 9 participants | Auteur | Message |
---|
Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
| Sujet: Défi2 = les moindres carrés Mar 22 Oct 2019 - 11:34 | |
| Bonjour
Positionner un nuage de points autour d’une ligne virtuelle d’un quadrillage (système d’axes orthonormé) et tracer la courbe réelle (brisée, pas obligatoirement lissée comme si c’était une droite dite « de régression ») grâce à la méthode des moindres carrés. Des quoi ? - Des moindres carrés.
Bonne réflexion
PS. Et j'espère que ça vous occupera le temps de trouver un autre défi à vous proposer. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 22 Oct 2019 - 13:32 | |
| | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Défi2 = les moindres carrés Mar 22 Oct 2019 - 17:35 | |
| La méthode des moindres carrés est liée à la distribution gaussienne. Il faut donc répartir les points autour de la courbe théorique selon cette distribution. Vous aurez besoin d'un générateur de nombres aléatoires gaussiens. En voici un en FBPano : - Code:
-
' ****************************************************************** ' Generateur de nombres aleatoires gaussiens ' ******************************************************************
DIM GaussSave ' Sauvegarde un nombre aleatoire DIM GaussNew% ' Marque un nouveau calcul
FUNCTION RanGauss() ' ------------------------------------------------------------------ ' Algorithme de Box-Muller : ' Calcule 2 nombre aleatoires de la loi normale reduite ' La fonction retourne un nombre et sauvegarde l'autre ' pour l'appel suivant ' ------------------------------------------------------------------
DIM X, R, Theta
IF GaussNew = 0 THEN X = RND() : R = SQR(-2 * LOG(X)) X = RND() : Theta = 6.283185307179586 * X
RanGauss = R * COS(Theta) ' Retourne le premier nombre GaussSave = R * SIN(Theta) ' Sauvegarde le second ELSE RanGauss = GaussSave ' Retourne le nombre sauvegardé END IF
GaussNew = NOT GaussNew END_FUNCTION
? RanGauss()
| |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Défi2 = les moindres carrés Mar 22 Oct 2019 - 19:05 | |
| Bonsoir @ tous Dans mon jeune temps les géomètres utilisez les moindres carré pour affiner leurs mesures. je n'en sais pas plus mais cela peut orienter les recherches...des autres | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 22 Oct 2019 - 19:45 | |
| Jean...Mindstorm...? Vous pouvez vous servir aussi, y en aura pour tout le monde... C'est "Open-Pharma" ce soir. Là vous êtes dans un langage qui n'est pas le mien. Peut-être êtes vous prêt pour aller rendre visite à JJN4... Mais, moi, vous m'avez perdu. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Défi2 = les moindres carrés Jeu 24 Oct 2019 - 1:50 | |
| Salut tout le monde. Comme je me remets lentement mais sûrement de la mauvaise période passée et aussi pour essayer de relever le défi posé par Ouf_ça_passe et lui faire plaisir, je vous propose le code suivant. Ajustement statistique : Régression par la méthode des moindres carrés. - Code:
-
rem ============================================================================ rem Ajustement statistique rem Régression par la méthode des moindres carrés rem Papydall le 24 / 10 / 2019 rem ============================================================================ rem Le programme ci-dessous vous fournira les caractéristiques de l’ajustement rem linéaire de type f(x) = ax + b d’un nuage de points Mi(xi,yi) en minimisant rem la somme des carrées des distances entre yi et f(xi). rem Le programme fournira aussi le point moyen, les variances de X et Y et leur rem écarts-types, la covariance du couple (X,Y) et le coefficient de corrélation. rem Le programme vous fournira également les valeurs des cinq sommes fondamentales rem nécessaires à l’obtention de ces valeurs rem ============================================================================
dim x(20), y(20) : ' coordonnées des points dim s(10), w(10) dim a(12,12) dim np : ' nombre de points dim p : ' degré du lissage, degré du polynome dim sx, sy, sxy, sx2, sy2 dim mx, my, mxy, vx, vy, cov, ect_x, ect_y dim v, somme, a1, a2, b1, b2, nmi, corr dim wg, hg, unite, xo,yo, npt rem ============================================================================ width 0,800 picture 10 : full_space 10 : 2d_target_is 10 : print_target_is 10 : font_bold 10 alpha 20 : left 20,500 : top 20,100 : font_bold 20 : color 20,255,255,255 caption 0,"Ajustement statistique : Régression par la méthode des moindres carrés" wg = 400 : hg = 400 : xo = 50 : yo = 420 : p = 1 rem ============================================================================ data 16 : ' Nombre de points, pour cet exemple 16 points data 1,0.5, 2,1.8, 3,1.8, 4,2.2, 5,2.7, 6,3.3, 7,3.5, 8.2,4 data 9,4.7, 10,5, 11,6, 12,6, 13,7, 14,7.8, 15,9, 16,9.5 rem ============================================================================ Init_Points() : unite = wg / (np+1) Grille() Nuage() Calcul() Tracer() end rem ============================================================================ SUB Init_Points() dim_local i read np : npt = np+1 for i = 1 to np : read x(i) : read y(i) : next i END_SUB rem ============================================================================ SUB Grille() dim_local i,x 2d_line xo,yo,xo,5 : ' Axe des Y 2d_line xo-10,yo-10,wg+100,hg+10 : ' Axe des X print_locate xo-10,wg+20 : print 0 print_locate wg+100,hg+3 : print ">" print_locate xo-3,1 : print "^" 2d_pen_dot : ' tracé avec séries de points for i = xo+unite to wg+80 step unite 2d_line i,hg+10,i,10 : x = x+1 print_locate i-5,hg+20 : print x next i x = 0 for i = hg+10-unite to 10 step 0-unite 2d_line xo,i,wg+80,i : x = x+1 print_locate xo-20,i-5 : print x next i 2d_pen_solid : ' tracé avec trait plein END_SUB rem ============================================================================ SUB Nuage() dim_local xp,yp,i 2d_fill_color 255,0,0 for i = 1 to np xp = x(i)*unite : yp = y(i)*unite : ' Adaptation aux coordonnées de la grille 2d_circle xo+xp,hg+10-yp,4 : ' Marquer le point next i END_SUB rem ============================================================================ SUB Calcul() dim_local i,j,k,t$ for i = 1 to np sx = sx + x(i) : sy = sy + y(i) : sxy = sxy + x(i)*y(i) sx2 = sx2 + x(i)*x(i) : sy2 = sy2 + y(i)*y(i) next i mx = sx/np : my = sy/np : mxy = sxy/np vx = sx2/np - mx*mx : vy = sy2/np-my*my cov = mxy-mx*my : ect_x = sqr(vx) : ect_y = sqr(vy) for k = 0 to 2*p s(k) = 0 for i = 1 to np : s(k) = s(k) + power(x(i),k) : next i next k for k = 0 to p w(k) = 0 for i = 1 to np : w(k) = w(k) + y(i)*power(x(i),k) : next i next k for k = 0 to p : a(k+1,p+2) = w(k) : next k for i = 1 to p+1 for j = 1 to p+1 : a(i,j) = s(i+j-2) : next j next i a(1,1) = np np = p+1 : ' dimension du système des équations for k = 1 to np-1 : ' résolution du système par la méthode du pivot v = a(k,k) if v = 0 v = permuter(k) if v = 0 then singulier() : exit_sub end_if for i = k+1 to np for j = k+1 to np+1 a(i,j) = a(i,j) - a(i,k)*a(k,j)/v next j next i next k if a(np,np) = 0 then singulier() : exit_sub x(np) = a(np,np+1) / a(np,np) for i = np-1 to 1 step -1 somme = 0 for j = i+1 to np somme = somme + a(i,j) * x(j) next j x(i) = (a(i,np+1) - somme) / a(i,i) next i for k = 1 to np : y(k) = x(np-k+1) : next k for k = 1 to np : x(k) = y(k) : next k a1 = cov/vx : a2 = cov/vy : b1 = my-a1*mx : b2 = mx-a2*my corr = cov/sqr(vx)/sqr(vy) t$ = "La droite y = ax + b : a = " + str$(int(a1*1E3)/1E3) t$ = t$ + " b = " + str$(int(b1*1E3)/1E3) + chr$(13) t$ = t$ + "Somme des xi : Sxi = " + str$(int(sx*1E3)/1E3) +chr$(13) t$ = t$ + "Somme des yi : Syi = " + str$(int(sy*1E3)/1E3) + chr$(13) t$ = t$ + "Somme des xi carrés : Sxi² = " + str$(int(sx2*1E3)/1E3) + chr$(13) t$ = t$ + "Somme des yi carrés : Syi² = " + str$(int(sy2*1E3)/1E3) + chr$(13) t$ = t$ + "Somme du produit des xi par yi : Sxiyi = " + str$(int(sxy*1E3)/1E3)+ chr$(13) t$ = t$ + "Moyenne des X : Xmoyen = " + str$(int(mx*1E3)/1E3) +chr$(13) t$ = t$ + "Moyenne des Y : Ymoyen = " + str$(int(my*1E3)/1E3) + chr$(13) t$ = t$ + "Variance de X : V(x) = " + str$(int(vx*1E3)/1E3) +chr$(13) t$ = t$ + "Variance de Y : V(y) = " + str$(int(vy*1E3)/1E3) + chr$(13) t$ = t$ + "Covariance du couple (x,y) : cov(x,y) = " + str$(int(cov*1E3)/1E3) +chr$(13) t$ = t$ + "Coefficient de corrélation : c. corr = " + str$(int(corr*1E3)/1E3) + chr$(13) t$ = t$ + "écart-type(x) = " + str$(int(ect_x*1E3)/1E3) +chr$(13) t$ = t$ + "écart-type(y) = " + str$(int(ect_y*1E3)/1E3) caption 20, t$ END_SUB rem ============================================================================ FNC Permuter(k) dim_local i,q,li,aux q = 0 : li = k while a(li,k) = 0 q = q+1 : li = q+k if li = n+1 then result 0 : exit_fnc end_while for i = 1 to n+1 aux = a(k,i) : a(k,i) = a(li,i) : a(li,i) = aux next i result a(k,k) END_FNC rem ============================================================================ SUB Singulier() message "Pas de chance, ce système est singulier ..." END_SUB rem ============================================================================ ' Tracer la droite y = ax + b SUB Tracer() dim_local a,b a = int(a1*1E3)/1E3 b = int(b1*1E3)/1E3 2d_pen_color 0,0,255 2d_line xo-10,yo-npt-b*unite,xo+npt*unite,yo-npt-unite*(a*npt+b) END_SUB rem ============================================================================
REM : Pour mon exemple, le nuage des points est codé dans les DATA. Vous pouvez modifier le code pour entrer manuellement les coordonnées des points, ou à partir d’un fichier sur disque ou même par poser les points à l’aide de clics dans la grille. - Résultat:
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Défi2 = les moindres carrés Jeu 24 Oct 2019 - 12:36 | |
| Bon, cette fois t'as compris Yannick, c'est quand même simple ! | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Défi2 = les moindres carrés Jeu 24 Oct 2019 - 12:58 | |
| @papydall C'est !!! Pour la droite d'équation Y=0.558x - 0.076, Y=0.482 si x=1. Mais sur le graphique, la droite bleu passe par le point (1;1). Il n'y aurait pas un problème d'affichage? Et pour chipoter encore un peu plus , il n'y aurait pas une erreur de saisie pour le point n°8 dans les DATA(note que ça ne change pas la résolution du pb, tt est calculé )? Visualisation dans un objet CHART: - Code:
-
chart 1 chart_point 1 item_add 1,"1,0.5" item_add 1,"2,1.8" item_add 1,"3,1.8" item_add 1,"4,2.2" item_add 1,"5,2.7" item_add 1,"6,3.3" item_add 1,"7,3.5" item_add 1,"8.2,4" item_add 1,"9,4.7" item_add 1,"10,5" item_add 1,"11,6" item_add 1,"12,6" item_add 1,"13,7" item_add 1,"14,7.8" item_add 1,"15,9" item_add 1,"16,9.5"
chart_line 1 item_add 1,"0,-0.076" item_add 1,"17,9.56" | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Jeu 24 Oct 2019 - 17:27 | |
| Je ne connaissais pas ces moindres carrés...? Je me souviens d'un truc que j'avais appris et qui fait ce genre de chose, c'est le coefficient de corrélation. (ne me demandez pas la formule, je ne m'en souviens plus) Peut-être c'est la même chose, non ? - Yannick a écrit:
- Peut-être êtes vous prêt pour aller rendre visite à JJN4...
C'est une bonne idée, voyez, je vous attends ! (plus on est de fous, plus on rit) | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Défi2 = les moindres carrés Jeu 24 Oct 2019 - 18:58 | |
| Merci Papydall c'est beaucoup plus clair que dans ma mémoire. Pour Sylverman: regarde bien il suffit de décaler l'axe des x de +1
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Défi2 = les moindres carrés Ven 25 Oct 2019 - 0:20 | |
| - Le Martien a écrit:
- Je ne connaissais pas ces moindres carrés...?
Bon, j'essaye de démystifier ces gros mots Méthode des moindres carrés C’est la méthode d’ajustement qui consiste à calculer l’équation de la droite qui minimise les écarts à la moyenne. Une droite est de la forme y = ax+b. Le but est de choisir a et b de sorte que la droite soit la meilleure possible. Comme tous les points du nuage des points ne sont pas forcément sur cette droite, on calcule les écarts entre la droite y = ax+b et les points du nuage. Puis on détermine les paramètres a et b de la droite de sorte que ces écarts soient les plus petits possibles. Or ces écarts peuvent être positifs ou négatifs, on peut penser à prendre leurs valeurs absolues, mais les statisticiens (qui sont d’excellents mathématiciens) ont trouvés mieux : prendre les carrés de ces écarts de sorte qu’on aura toujours des valeurs positives. Le but est de minimiser ces carrés d’où la notion des moindres carrés. Effectuer une régression linéaire au sens des moindres carrés, c'est trouver la droite qui minimise l'écart précédent, c'est-à-dire la somme des carrés des différences : on parle de droite des moindres carrés. - droite des moindres carrés:
Pour ceux qui ne craignent pas les gros mots : cliquez ! | |
| | | maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: Défi2 = les moindres carrés Ven 25 Oct 2019 - 8:12 | |
| Bonjour Papydall (et les autres)
Et si les points sont vraiment trop éparpillés, est-ce que ton raisonnement peut s'appliquer à une autre forme que ax+b
Je pense par exemple à ce que fait excel en trouvant des courbes collant au plus prés à un graphique.
| |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Défi2 = les moindres carrés Ven 25 Oct 2019 - 9:28 | |
| | |
| | | Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
| Sujet: Et avec les nombres premiers Ven 25 Oct 2019 - 9:34 | |
| @ maellou
Je me suis posé la même question que toi.
Par exemple pour la répartition des nombres premiers sur un graphique. | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Défi2 = les moindres carrés Ven 25 Oct 2019 - 10:14 | |
| Pour les nombres premiers jusqu'à 1000, une fonction puissance donne une assez bonne approximation : En rouge, les nombres premiers ; en vert la courbe calculée. La fonction est 1.9664 * (Rang)^1.2159 Par exemple, pour le centième nombre premier (égal à 541) on trouve : 1.9664 * (100)^1.2159 ~ 531,46... On peut certainement faire mieux ! | |
| | | Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
| Sujet: courbe des nombres premiers Ven 25 Oct 2019 - 11:29 | |
| Je ne m'attendais pas à une courbe aussi lissée, quasiment une droite.
Merci Jean | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Défi2 = les moindres carrés Ven 25 Oct 2019 - 12:08 | |
| | |
| | | Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
| Sujet: Fonction Zeta Ven 25 Oct 2019 - 12:53 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Défi2 = les moindres carrés Dim 27 Oct 2019 - 10:13 | |
| Bonjour tout le monde. - maelilou a écrit:
- Et si les points sont vraiment trop éparpillés, est-ce que ton raisonnement peut s'appliquer à une autre forme que ax+b
ax+b est un polynôme de degré 1. Dans mon code c’est la variable p qui est initialisée à 1. Dans les lignes REM, je parlais de l’ajustement linéaire de type f(x) = ax+b. Mais on peut envisager d’autres degré de polynômes 2, 3, 4, etc Ce sont des souvenirs très lointains et puis je suis vraiment désolé : je passe par une mauvaise période de mauvaise santé. J’ai voulu simplement répondre à Ouf_ça_passe « Positionner un nuage de points autour d’une ligne virtuelle d’un quadrillage (système d’axes orthonormé) et tracer la courbe réelle (brisée, pas obligatoirement lissée comme si c’était une droite dite « de régression ») grâce à la méthode des moindres carrés. » A l’un de ces jours ! | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Défi2 = les moindres carrés Dim 27 Oct 2019 - 10:39 | |
| Bon courage papydall et merci pour ta contribution ! Pour ce qui me concerne, je vais reprendre ma DLL qui permet d'ajuster plusieurs types de courbes, comme le montre ce petit extrait du code Delphi : - Code:
-
type TModel = (REG_LIN, { y = a + b.x } REG_POL2, { y = a + b.x + c.x^2 } REG_POL3, { y = a + b.x + c.x^2 + d.x^3 } REG_FRAC1, { y = a.x / (1 + b.x) } REG_FRAC2, { y = (a + b.x) / (1 + c.x) } REG_EXPO1, { y = a.exp(-b.x) } REG_EXPO2, { y = a + b.exp(-c.x) } REG_LOGIS1, { y = a / [1 + exp(-b.x + c)] } REG_LOGIS2, { y = a + (b - a) / [1 + exp(-c.x + d)] } REG_POWER1, { y = a.x^b } REG_POWER2, { y = a / [1 + (b / x)^c] } REG_USER); { Fonction definie par l'utilisateur }
| |
| | | maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: Défi2 = les moindres carrés Dim 27 Oct 2019 - 11:52 | |
| Merci pour ta réponse.
Et surtout soigne toi bien pour revenir en pleine forme ! | |
| | | Contenu sponsorisé
| Sujet: Re: Défi2 = les moindres carrés | |
| |
| | | | Défi2 = les moindres carrés | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |