Skip to content

Implémentation des deux méthodes de Newton - #1

Open
bouayoubegrine wants to merge 1 commit into
dpo-mth8408:mainfrom
bouayoubegrine:TP3
Open

bouayoubegrine wants to merge 1 commit into
dpo-mth8408:mainfrom
bouayoubegrine:TP3

Conversation

@bouayoubegrine

Copy link
Copy Markdown

Titre : Implémentation des méthodes de Newton modifiée et inexacte pour la minimisation sans contrainte

Description :

Ce pull request propose l'implémentation de deux variantes de la méthode de Newton pour la minimisation de fonctions sans contrainte.

Les deux méthodes implémentées sont :

  1. Méthode de Newton modifiée : Utilise une factorisation LDL modifiée de la hessienne pour garantir que la direction obtenu est toujours une direction de descente.
  2. Méthode de Newton inexacte : Utilise le gradient conjugué pour résoudre approximativement le système de Newton en tronquant CG en se basant sur la courbure du sous-problème quadratique.

Les deux méthodes suivent un critère d'arrêt basé sur la norme du gradient et le nombre d'itérations. Un test sur des problèmes polynomiaux et des problèmes non linéaires est inclus pour valider les méthodes.

Changements :

  • Ajout de la fonction newton_modifiee pour la méthode de Newton modifiée avec factorisation LDL modifiée.
  • Ajout de la fonction newton_inexacte pour la méthode de Newton inexacte utilisant le gradient conjugué.
  • Ajout de tests numériques pour valider les deux méthodes sur un problème polynomial et des problèmes non linéaires.

@github-actions

Copy link
Copy Markdown

Status:
Success--Here-is-the-PDF

Comment thread rapport.qmd
k = 0
@printf "%2s %9s %7s %7s %7s\n" "k" "fk" "‖grad‖" "t" "slope"
@printf "%2d %9.2e %7.1e\n" k fk gnorm
while gnorm > 1.0e-6 + 1.0e-6 * gnorm0 && k < 10*n

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eps_a, eps_r

Comment thread rapport.qmd
@printf "%2d %9.2e %7.1e\n" k fk gnorm
while gnorm > 1.0e-6 + 1.0e-6 * gnorm0 && k < 10*n
Hk = hess(model,xk)
Hk = Symmetric(triu(Hk), :U)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Elle est déjà triangulaire.

Comment thread rapport.qmd
k = 0
@printf "%2s %9s %7s %7s %7s\n" "k" "fk" "‖grad‖" "t" "slope"
@printf "%2d %9.2e %7.1e\n" k fk gnorm
while gnorm > 1.0e-6 + 1.0e-6 * gnorm0 && k < 10*n

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utilise eps_a et eps_r

Comment thread rapport.qmd
##############################
# Direction de descent #
##############################
(dk, stats) = Krylov.cg(Hk, -gk,linesearch=true)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tolérances d'arrêt de CG ?

Comment thread rapport.qmd
slope = dot(dk, gk)
t = 1.0
while obj(model, xk + t .* dk) > fk + 1.0e-4 * t * slope
t /= 2

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

-> dans une fonction

Comment thread rapport.qmd

On remarque également que la méthode de Newton inexacte approche la solution plus rapidement que la méthode de Newton modifiée. De meme, la méthode inexacte peut s’avérer moins coûteuse, notamment si le gradient conjugué retourne une direction en un nombre faible d’itérations.

Enfin, dans les problèmes de grande taille, en particulier lorsque la matrice hessienne est sparse, le produit matrice-vecteur dans le gradient conjugué est bien plus économique que le coût d'une manipulation dense. Les méthodes directes comme la factorisation LDL nécessitent une permutation de la matrice pour conserver une factorisation creuse, mais obtenir une telle permutation peut être coûteux, voire inaccessible.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants