0% ont trouvé ce document utile (0 vote)
23 vues9 pages

Solutions

Le document présente plusieurs méthodes de résolution de systèmes linéaires et d'interpolation, notamment la méthode de Gauss, la méthode de Jacobi, la méthode de Vandermonde et la méthode de Lagrange. Chaque méthode est accompagnée d'exemples pratiques, de la saisie des données à l'affichage des résultats. Il inclut également des informations sur le cours d'analyse numérique et programmation dispensé par Mohamed SHAIMI à l'Université Hassan II de Casablanca.

Transféré par

hassnanajeh188
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
23 vues9 pages

Solutions

Le document présente plusieurs méthodes de résolution de systèmes linéaires et d'interpolation, notamment la méthode de Gauss, la méthode de Jacobi, la méthode de Vandermonde et la méthode de Lagrange. Chaque méthode est accompagnée d'exemples pratiques, de la saisie des données à l'affichage des résultats. Il inclut également des informations sur le cours d'analyse numérique et programmation dispensé par Mohamed SHAIMI à l'Université Hassan II de Casablanca.

Transféré par

hassnanajeh188
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

solutions

April 28, 2025

1 Méthode de Gauss (sans permutation de lignes)


[4]: # ----------------------------------------------------------------------------
# Résolution d'un système linéaire par la méthode d'élimination de Gauss
# ----------------------------------------------------------------------------

# Matrice des coefficients du système (n x n)


A = [[1, 2, 1], [2, 2, 3], [-1, -3, 0]]
# Vecteur du second membre
b = [0, 3, 2]
# Dimension du système (nombre d'équations)
n = len(b)

# ----------------------------------------------------------------------------
# Phase d'élimination (transformation en matrice triangulaire supérieure)
# ----------------------------------------------------------------------------
for i in range(n-1): # i = indice de la ligne pivot
# Vérification que le pivot n'est pas nul
pivot = A[i][i]
if pivot == 0:
raise ValueError(f"Pivot nul à la position ({i},{i})")

# Normalisation de la ligne du pivot


# On divise toute la ligne par A[i][i] pour avoir 1 sur la diagonale
for j in range(i, n):
A[i][j] /= pivot
b[i] /= pivot

# Élimination des termes sous le pivot


for k in range(i+1, n): # k = lignes à modifier
# Calcul du facteur pour éliminer A[k][i]
factor = A[k][i]

# Soustraction de la ligne pivot multipliée par le facteur


for j in range(i, n): # j = colonnes à modifier
A[k][j] -= factor * A[i][j]

1
b[k] -= factor * b[i]

# ----------------------------------------------------------------------------
# Phase de remontée (résolution du système triangulaire)
# ----------------------------------------------------------------------------

# Initialisation du vecteur solution


x = [0 for _ in range(n)]

# Parcours des équations de la dernière à la première


for i in range(n-1, -1, -1):
# On part de la valeur du second membre
x[i] = b[i]

# Soustraction des termes déjà calculés


for j in range(i+1, n):
x[i] -= A[i][j] * x[j]

# Division par le coefficient diagonal


x[i] /= A[i][i]

# ----------------------------------------------------------------------------
# Affichage des résultats
# ----------------------------------------------------------------------------
print("Matrice après élimination:")
for row in A:
print(row)
print("\nSecond membre après élimination:", b)
print("\nSolution du système:", x)

Matrice après élimination:


[1.0, 2.0, 1.0]
[-0.0, 1.0, -0.5]
[0.0, 0.0, 0.5]

Second membre après élimination: [0.0, -1.5, 0.5]

Solution du système: [1.0, -1.0, 1.0]

2 Méthode de Jacobi
[6]: # ----------------------------------------------------------------------------
# Résolution d'un système linéaire par la méthode itérative de Jacobi
# ----------------------------------------------------------------------------

2
# Importation de la bibliothèque mathématique pour la racine carrée
import math

# ----------------------------------------------------------------------------
# Saisie des paramètres du système
# ----------------------------------------------------------------------------
print("----------------------------------------------------")
print("Méthode de Jacobi pour les systèmes linéaires")
print("----------------------------------------------------")

# Dimension du système
n = int(input("Entrez la dimension du système n : "))

# Tolérance pour le critère de convergence


tol = 1e-6

# Nombre maximal d'itérations


max_iterations = int(input("Entrez le nombre maximal d'itérations : "))

# ----------------------------------------------------------------------------
# Saisie de la matrice A
# ----------------------------------------------------------------------------
print("\nSaisie de la matrice A (coefficients du système):")
A = []
for i in range(n):
ligne = []
for j in range(n):
element = float(input(f"Entrez A[{i+1}][{j+1}] : "))
[Link](element)
[Link](ligne)

# ----------------------------------------------------------------------------
# Saisie du vecteur b (second membre)
# ----------------------------------------------------------------------------
print("\nSaisie du vecteur b (second membre):")
b = []
for i in range(n):
element = float(input(f"Entrez b[{i+1}] : "))
[Link](element)

# ----------------------------------------------------------------------------
# Initialisation du vecteur solution x
# ----------------------------------------------------------------------------
print("\nInitialisation du vecteur solution x:")
x = []
for i in range(n):
element = float(input(f"Entrez la valeur initiale x[{i+1}] : "))

3
[Link](element)

# Création du vecteur pour la nouvelle solution


x_new = []
for i in range(n):
x_new.append(0.0)

# ----------------------------------------------------------------------------
# Affichage de l'en-tête du tableau de résultats
# ----------------------------------------------------------------------------
print("\nItération", end="")
for i in range(n):
print(f"\tx{i+1}", end="\t")
print()

# ----------------------------------------------------------------------------
# Méthode itérative de Jacobi
# ----------------------------------------------------------------------------
for k in range(max_iterations):
# Calcul des nouvelles valeurs
for i in range(n):
somme = b[i]
for j in range(n):
if j != i:
somme = somme - A[i][j] * x[j]
x_new[i] = somme / A[i][i]

# Calcul de la norme de la différence


norm_carre = 0.0
for i in range(n):
difference = x_new[i] - x[i]
norm_carre += difference * difference
norm = [Link](norm_carre)

# Affichage de l'itération courante


print(k+1, end="\t")
for val in x_new:
print(f"\t{val:.6f}", end="")
print()

# Copie de x_new dans x


for i in range(n):
x[i] = x_new[i]

# Test de convergence
if norm < tol:
print(f"\nConvergence atteinte après {k+1} itérations.")

4
break

# Message si convergence non atteinte


if norm >= tol:
print(f"\nNombre maximal d'itérations ({max_iterations}) atteint sans␣
↪convergence.")

# ----------------------------------------------------------------------------
# Affichage de la solution finale
# ----------------------------------------------------------------------------
print("\nSolution finale:")
for i in range(n):
print(f"x[{i+1}] = {x[i]:.8f}")

----------------------------------------------------
Méthode de Jacobi pour les systèmes linéaires
----------------------------------------------------
Entrez la dimension du système n : 3
Entrez le nombre maximal d'itérations : 100

Saisie de la matrice A (coefficients du système):


Entrez A[1][1] : 3
Entrez A[1][2] : 1
Entrez A[1][3] : -1
Entrez A[2][1] : 1
Entrez A[2][2] : 5
Entrez A[2][3] : 2
Entrez A[3][1] : 2
Entrez A[3][2] : -1
Entrez A[3][3] : -6

Saisie du vecteur b (second membre):


Entrez b[1] : 2
Entrez b[2] : 17
Entrez b[3] : -18

Initialisation du vecteur solution x:


Entrez la valeur initiale x[1] : 0
Entrez la valeur initiale x[2] : 0
Entrez la valeur initiale x[3] : 0

Itération x1 x2 x3
1 0.666667 3.400000 3.000000
2 0.533333 2.066667 2.655556

5
3 0.862963 2.231111 2.833333
4 0.867407 2.094074 2.915802
5 0.940576 2.060198 2.940123
6 0.959975 2.035835 2.970159
7 0.978108 2.019941 2.980686
8 0.986915 2.012104 2.989379
9 0.992425 2.006865 2.993621
10 0.995585 2.004067 2.996331
11 0.997421 2.002351 2.997851
12 0.998500 2.001375 2.998749
13 0.999124 2.000801 2.999271
14 0.999490 2.000467 2.999575
15 0.999703 2.000272 2.999752
16 0.999827 2.000159 2.999856
17 0.999899 2.000092 2.999916
18 0.999941 2.000054 2.999951
19 0.999966 2.000031 2.999971
20 0.999980 2.000018 2.999983
21 0.999988 2.000011 2.999990
22 0.999993 2.000006 2.999994
23 0.999996 2.000004 2.999997
24 0.999998 2.000002 2.999998
25 0.999999 2.000001 2.999999
26 0.999999 2.000001 2.999999

Convergence atteinte après 26 itérations.

Solution finale:
x[1] = 0.99999922
x[2] = 2.00000072
x[3] = 2.99999935

3 Méthode de Vandermonde
[2]: # Points de données pour l'interpolation
x = [0, 1, 2] # Abscisses des points
y = [0, 2, 4] # Ordonnées des points
n = len(x) # Nombre de points

# ----------------------------------------------------------------------------
# Construction de la matrice de Vandermonde
# ----------------------------------------------------------------------------
V = []
for i in range(n):
ligne = []

6
for j in range(n):
# Chaque ligne i correspond à [x_i^0, x_i^1, x_i^2, ..., x_i^{n-1}]
[Link](x[i] ** j)
[Link](ligne)
print("Matrice de Vandermonde:")
for ligne in V:
print(ligne)

# ----------------------------------------------------------------------------
# Phase d'élimination (transformation en matrice triangulaire supérieure)
# ----------------------------------------------------------------------------
for i in range(n-1): # i = indice de la ligne pivot
# Vérification que le pivot n'est pas nul
pivot = V[i][i]
if pivot == 0:
raise ValueError(f"Pivot nul à la position ({i},{i})")

# Normalisation de la ligne du pivot


# On divise toute la ligne par V[i][i] pour avoir 1 sur la diagonale
for j in range(i, n):
V[i][j] /= pivot
y[i] /= pivot

# Élimination des termes sous le pivot


for k in range(i+1, n): # k = lignes à modifier
# Calcul du facteur pour éliminer V[k][i]
factor = V[k][i]

# Soustraction de la ligne pivot multipliée par le facteur


for j in range(i, n): # j = colonnes à modifier
V[k][j] -= factor * V[i][j]
y[k] -= factor * y[i]

# ----------------------------------------------------------------------------
# Phase de remontée (résolution du système triangulaire)
# ----------------------------------------------------------------------------

# Initialisation du vecteur solution (coefficients du polynôme)


coeffs = [0 for _ in range(n)]

# Parcours des équations de la dernière à la première


for i in range(n-1, -1, -1):
# On part de la valeur du second membre
coeffs[i] = y[i]

# Soustraction des termes déjà calculés


for j in range(i+1, n):

7
coeffs[i] -= V[i][j] * coeffs[j]

# Division par le coefficient diagonal


coeffs[i] /= V[i][i]

print("\nCoefficients du polynôme d'interpolation (ordre croissant):")


print(coeffs)

Matrice de Vandermonde:
[1, 0, 0]
[1, 1, 1]
[1, 2, 4]

Coefficients du polynôme d'interpolation (ordre croissant):


[0.0, 2.0, 0.0]

4 Méthode de Lagrange
[3]: def lagrange_interpolation(points_x, points_y, x_to_interpolate):
"""
Interpolation polynomiale par la méthode de Lagrange

Paramètres:
points_x (list): Liste des abscisses des points connus
points_y (list): Liste des ordonnées des points connus
x_to_interpolate (float): Point où évaluer le polynôme d'interpolation

Retourne:
float: Valeur interpolée du polynôme au point x_to_interpolate
"""
n = len(points_x) # Nombre de points d'interpolation
result = 0 # Initialisation du résultat

# Calcul de la somme des polynômes de Lagrange pondérés


for i in range(n):
# Initialisation du polynôme de Lagrange L_i(x)
lagrange_poly = 1

# Construction du polynôme de Lagrange L_i(x)


for j in range(n):
if j == i:
continue # On saute le cas j=i pour éviter une division par␣
zéro

# Multiplication des termes (x-x_j)/(x_i-x_j)

8
lagrange_poly *= (x_to_interpolate - points_x[j]) / (points_x[i] -␣
points_x[j])

# Ajout du terme y_i*L_i(x) à la somme totale


result += points_y[i] * lagrange_poly

return result

# Points connus pour l'interpolation


known_points_x = [0, 1, 2] # Abscisses des points connus
known_points_y = [0, 2, 4] # Ordonnées des points connus

# Évaluation du polynôme d'interpolation en différents points


print("Interpolation en x = 3 :", lagrange_interpolation(known_points_x,␣
↪known_points_y, 3))

print("Interpolation en x = 8 :", lagrange_interpolation(known_points_x,␣


↪known_points_y, 8))

Interpolation en x = 3 : 6.0
Interpolation en x = 8 : 16.0

5 Informations sur le cours


Titre du cours : Analyse Numérique et Programmation (Python)
Enseignant : Mohamed SHAIMI
Etablissement : Faculté des Sciences Aïn Chock, Université Hassan II de Casablanca, Casablanca,
Maroc
Date de création : 28 avril 2025

Vous aimerez peut-être aussi