PROGRAMMATION SCIENTIFIQUE EN C PRO-1027
Résolution de système d’équations non- linéaires (racines d’équations) u Méthode de la bissection u Analyse de la convergence de la méthode de bissection u Exemple de recherche –Recherche des zéros par la méthode de la bissection –Recherche de plusieurs zéros
Méthodes de la bissection u La méthode de la bissection permet la localisation d’une seule racine dans un intervalle donné u Conditions requises –La fonction f(x) est continue sur l’intervalle [a,b] –SI f(a)f(b) une racine dans l’intervalle u Pour une précision équivalente, cette méthode est généralement plus rapide (convergence)
Méthodes de la bissection u Étapes de la méthodes de bissection –Pour un intervalle [a,b], calculer la position du cen- tre de l’intervalle par: c = 1/2(a+b) = a+(b-a)/2 –Calculer f(a), f(b) et f(c) –Calculer f(a)f(c) et f(c)f(b) –Vérifier la convergence »Si les critères de convergence sont satisfaits, afficher la valeur de la racine » Sinon modifier les extrémités de l’intervalle, répéter les étapes précédentes
Méthodes de la bissection
u La méthode de la bissection converge si une racine se trouve dans un intervalle donné et trouve une seule racine si le nombre de racines dans un inter- valle est impair
Méthodes de la bissection
Méthode de la bissection u Algorithme de la bissection BISSEC(float a, float b, int nbiterMAX, float delta, float eps) u = f(a) v = f(b) e = b-a imprimer a,b,u,v SI u*v > 0 ALORS imprimer un message indiquant l’absence d’une racine SINON nbiter = 0 w = MAXFLOAT TANT QUE nbiter delta ET |w| > eps FAIRE e = e/2 c = a+e w = f(c) imprimer nbiter, c, w, e
Méthode de la bissection u Algorithme de la bissection TANT QUE nbiter delta ET |w| > eps FAIRE e = e/2 c = a+e w = f(c) imprimer nbiter, c, w, e SI (u*w<0) ALORS b=c v=w SINON a=c u=w FIN SI nbiter++ FIN TANTQUE FIN SI
Méthode de la bissection u Cas ou les critères de convergence sont déficients Racines multiples ( échec sur le critère |f(c)| < )
Méthode de la bissection u Cas ou les critères de convergence sont déficients Discontinuité ( échec sur le critère |b-a| < )
Analyse de la convergence u Le critère de convergence peut être exprimé en valeur absolue par a = c k+1 - c k k étant le nombre d’itérations u Il peut aussi être exprimé en pourcentage de l’erreur relative u La précision réelle de la solution est donnée
Analyse de la convergence u Exemple de convergence avec la fonction f(x) = 20 - x 2 = 0 u Avec comme solution c t = sur l’intervalle [0,6]
Analyse de la convergence u Exemple de convergence
Exemple de recherche u Utilisation de la méthode de bissection
Exemple de recherche u Utilisation de la méthode de bissection
Exemple de recherche u Recherche de plusieurs zéros (exemple) –Cherchons les valeurs et les vecteurs propres associés à une matrice A (ex: matrice de coefficients de corré- lation ou matrice variance-covariance) –Si nous avons une matrice A de n x n nous pouvons écrire – Où x est un vecteur propre de A et une valeur propre de A
Exemple de recherche u Recherche de plusieurs zéros (exemple) –Si nous avons une matrice A de n x n nous pouvons écrire – Pour que soit une valeur propre il faut que la solution de la dernière équation soit non nulle. Pour que x soit non nulle il faut que
Exemple de recherche u Recherche de plusieurs zéros (exemple) –Si nous considérons un cas d’ordre 3, nous obtenons – Le déterminant donne
Exemple de recherche u Recherche de plusieurs zéros (exemple) –Lorsque nous avons les valeurs propres, nous les substituons une à une dans (A- I) x = 0 pour trouver les vecteurs propres x
Exemple de recherche u Recherche de plusieurs zéros (exemple) –Les vecteurs propres désignent chacun des axes orthogonaux de variance maximale des données –De plus, les valeurs propres donnent une mesure de la variabilité des données selon chaque axe –Les vecteurs propres nous permettent alors par une transformation linéaire de passer d’un domaine où les données sont corrélées à un autre non corrélé
Exemple de recherche u Recherche de plusieurs zéros (exemple) x1x1 x2x2 * * * * * * * * * * * * * * * * * * * * * * * *
Exemple de recherche u Système d’équations linéaires Ax = 0 : –Si nous avons une matrice variance-covariance A de 2X2
Exemple de recherche u Algorithme de résolution SVD: matrice A de NXN for(i=1;i<=N;i++) for(j=1;j<=N;j++) u[i][j] = a[i][j]; svdcmp(u,N,N,w,v); wmax = 0.0; for(j=1;j wmax) wmax = w[j]; wmin = wmax; // trouver la valeur propre min. dans w for(j=1;j<=N;j++) if((w[j] < wmin) && w[j] != 0.0) {wmin = w[j]; minPos = j;} for(j=1;j<=N;j++) x[j]=v[j][minPos]; // x contient un vecteur propre
Exemple de recherche u Localiser des extremums de fonctions (ex: histogramme) –Calcul de l’histogramme d’une image contenant deux objets principaux for(j=0;j<Hauteur;j++) for(i=0;i<Largeur;i++) h[I[j][i]]++; // comptage des pixels de chaque couleur –Localisation des extremums »Estimation de la dérivée première de la fonction h[] »Détection des passages par zéro associés aux extremums »Localiser les deux maximums associés à la moyenne de chaque distribution de couleur des deux objets »Localiser ensuite le minimum entre ces deux maximums –Segmenter l’image en deux régions distinctes en utilisant un seuil correspondant au minimum
Exemple de recherche u Localiser des extremums de fonctions (ex: histogramme) –Localisation des extremums »Estimation de la dérivée première de la fonction h[]: Pour estimer la dérivée première d’une fonction, il faut convoluer la fonction avec un opérateur de dérivée première. Opération de convolution entre une fonction h() et un opérateur
Exemple de recherche u Localiser des extremums de fonctions (ex: histogramme) –Localisation des extremums »Opérateur de dérivée première (forme mathématique) DF/ 2 = 4 DF = 8 +1 Où [0.5..(N-1)/8] Où DF [5,7,9..N]
Exemple de recherche u Localiser des extremums de fonctions (ex: histogramme) –Segmenter l’image en deux régions distinctes en utilisant un seuil correspondant au minimum »Après avoir détecté les deux maximums et le minimum entre ces deux maximums à partir de la fonction dérivée g(x) »Segmentation de l’image avec le seuil S correspondant au minimum entre les deux maximums détectés à l’étape précédente. for(j=0;j<Hauteur;j++) for(i=0;i<Largeur;i++){ if( I[j][i] > seuil) I[j][i] = 255; else I[j][i] = 0; }