4 lines
124 KiB
JavaScript
4 lines
124 KiB
JavaScript
var documenterSearchIndex = {"docs":
|
||
[{"location":"mise_en_place.html#Mise-en-place-de-Julia-1","page":"Installation de Julia et tests unitaires","title":"Mise en place de Julia","text":"","category":"section"},{"location":"mise_en_place.html#Julia-1","page":"Installation de Julia et tests unitaires","title":"Julia","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Julia est un langage très récent : sa première version date de 2012 et il est actuellement en version 1.4. Il est de plus en plus utilisé de par le monde, avec un public assez divers : quelques programmeurs bien sûr, mais surtout des scientifiques, des ingénieurs, des analystes financiers, des statisticiens qui développent les bibliothèques de fonctions qui leur sont utiles. ","category":"page"},{"location":"mise_en_place.html#Installation-de-Julia-1","page":"Installation de Julia et tests unitaires","title":"Installation de Julia","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Le langage de programmation Julia peut être téléchargé sur le site web Download Julia. La version v1 ou une version plus récente doit être téléchargée.","category":"page"},{"location":"mise_en_place.html#Éditeur-à-utiliser-1","page":"Installation de Julia et tests unitaires","title":"Éditeur à utiliser","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Pour que plus de gens utilisent le langage, il est nécessaire de fournir un environnement de développement complet et accessible pour ce public, avec de l’autocomplétion intelligente, l’intégration de graphiques, le débogage, etc. Cet environnement prend le nom de Juno. Le développement est parti d’un composant proposé par GitHub, Atom, un éditeur de texte prévu pour être facile à personnaliser. Donc nous recommandons d'utiliser l'environnement Juno installé sur l'éditeur de texte Atom, mais rien ne vous empêche d'utiliser d'autres éditeurs comme Visual Studio Code avec l'extension Julia, IntelliJ IDEA de JetBrains avec le plugin Julia,... etc","category":"page"},{"location":"mise_en_place.html#Installation-de-l'éditeur-Atom-1","page":"Installation de Julia et tests unitaires","title":"Installation de l'éditeur Atom","text":"","category":"section"},{"location":"mise_en_place.html#Sous-Linux-1","page":"Installation de Julia et tests unitaires","title":"Sous Linux","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Vous pouvez installer Atom sur Linux en téléchargeant ce fichier .deb, ensuite allez au dossier contenant le fichier, ouvrez un terminal, puis installez l’éditeur Atom avec la commande suivante : sudo dpkg -i atom-amd64.deb ","category":"page"},{"location":"mise_en_place.html#Sous-Windows-1","page":"Installation de Julia et tests unitaires","title":"Sous Windows","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Téléchargez Julia\nTéléchargez Atom","category":"page"},{"location":"mise_en_place.html#Installation-de-Juno-1","page":"Installation de Julia et tests unitaires","title":"Installation de Juno","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Pour installer Juno, une fois Atom ouvert, suivez les étapes suivantes:","category":"page"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Il faut aller dans Packages -> Settings View -> Open ou avec la commande Ctrl + Virgule\nUne fois dans Setting, sélectionnez l'onglet Install à gauche\nInstallez le package uber-juno\nOuvrez les Settings du package uber-juno et assurez vous que l'option Disable - Don't run installation when Atom boots est déselectionné.\nRedémarrez l'éditeur Atom. Atom devrait alors installer de nouveaux packages.\nRedémarrez une dernière fois l'éditeur Atom.","category":"page"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Une nouvelle barre d'outils devrait apparaître sur l'interface d'Atom. Si cette barre n'est pas visible, vous pouvez la faire apparaître/disparaître avec la commande Ctrl+Alt+T. De plus, sous le menu Packages d'Atom, une entrée Julia devrait maintenant être présente. Si vous rencontrez des problèmes, assurez vous que les packages suivants d'Atom sont installés:","category":"page"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"latex-completion\nindent-detective\nink\njulia-client\nlanguage-julia\ntool-bar","category":"page"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Besoin d'aide ? Consultez notre F.A.Q.","category":"page"},{"location":"mise_en_place.html#Lancement-des-tests-1","page":"Installation de Julia et tests unitaires","title":"Lancement des tests","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Dans le dossier Optinum/ faire :","category":"page"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"(@v1.) pkg> activate .\n(Optinum) pkg> test","category":"page"},{"location":"mise_en_place.html#Lancement-d'un-seul-test-1","page":"Installation de Julia et tests unitaires","title":"Lancement d'un seul test","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"Après une inclusion du fichier contenant la fonction à tester (Lagrangien_Augmente dans l'exemple), mettez la fonction en question en paramètre de la fonction de test correspondante dans TestOptinum (tester_Lagrangien_Augmente dans l'exemple) puis true/false pour l'affichage.","category":"page"},{"location":"mise_en_place.html#Exemple-(avec-l'algorithme-du-Lagrangien-augmenté-):-1","page":"Installation de Julia et tests unitaires","title":"Exemple (avec l'algorithme du Lagrangien augmenté ):","text":"","category":"section"},{"location":"mise_en_place.html#","page":"Installation de Julia et tests unitaires","title":"Installation de Julia et tests unitaires","text":"pkg> add https://github.com/mathn7/TestOptinum.git\njulia> using TestOptinum\njulia> include(\"src/Lagrangien_Augmente.jl\") # inclusion de fichier contenant la fonction à tester\njulia> tester_Lagrangien_Augmente(true,Lagrangien_Augmente) # test","category":"page"},{"location":"Integration_continue.html#Intégration-continue-avec-Travis-CI-1","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"","category":"section"},{"location":"Integration_continue.html#L'Intégration-continue-1","page":"Intégration continue avec Travis CI","title":"L'Intégration continue","text":"","category":"section"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"L'intégration continue est un ensemble de pratiques utilisées en génie logiciel consistant à vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression dans l'application développée, Le principal but de cette pratique est de détecter les problèmes d'intégration au plus tôt lors du développement. De plus, elle permet d'automatiser l'exécution des suites de tests et de voir l'évolution du développement du logiciel.","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Les principaux avantages d'une telle technique de développement sont :\nle test immédiat des modifications \nla notification rapide en cas de code incompatible ou manquant \nles problèmes d'intégration sont détectés et réparés de façon continue, évitant les problèmes de dernière minute \nune version est toujours disponible pour un test, une démonstration ou une distribution.","category":"page"},{"location":"Integration_continue.html#Travis-CI-1","page":"Intégration continue avec Travis CI","title":"Travis CI","text":"","category":"section"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Travis CI est un logiciel libre d'intégration continue. Il fournit un service en ligne utilisé pour compiler, tester et déployer le code source des logiciels développés, notamment en lien avec le service d'hébergement du code source GitHub. Le logiciel est publié sous licence MIT. Sa configuration s'effectue en YAML.","category":"page"},{"location":"Integration_continue.html#Lancement-des-jobs-sur-Travis-CI-1","page":"Intégration continue avec Travis CI","title":"Lancement des jobs sur Travis CI","text":"","category":"section"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Pour lancer des jobs sur Travis : ","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Allez sur Travis CI ensuite Sign up with GitHub.\nAcceptez l'autorisation de Travis CI. Vous serez redirigé vers GitHub.\nCliquez sur votre photo de profil en haut à droite de votre tableau de bord Travis, cliquez sur Paramètres puis sur le bouton vert Activate button et sélectionnez les dépôts que vous souhaitez utiliser avec Travis CI.\nMaintenant , il ne reste que d'ajouter un fichier .travis.yml dans la racine de votre dépôt. ce fichier doit contenir les informations suivantes : le langage utilisé et les versions sur lequels vous voulez lancer les tests. par exemple : ","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"language: julia\nos:\n - osx\n - linux\n - windows \njulia:\n - 1.0.5\n - 1.4\n - 1.5 ","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"le job des tests est configuré par défaut, mais il faudra avoir un fichier runtests.jl dans le dossier test sinon vous devrez personnaliser votre test, par exemple :","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"language: julia\nos:\n - osx\n - linux\n - windows \njulia:\n - 1.0.5\n - 1.4\n - 1.5 \nscript:\n - julia -e 'using Pkg; Pkg.instantiate(); Pkg.develop(PackageSpec(path=pwd()))'\n - julia test/test1.jl\n - julia test/test2.jl","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Travis CI peut être utilisé pour deployer votre documentation dans les Github pages. pour se faire, créez un job spécifique pour la documentation : ","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"jobs:\n include:\n - stage: Documentation\n julia: 1.4\n os: linux\n script: \n - julia --project=docs -e 'using Pkg; Pkg.instantiate(); Pkg.develop(PackageSpec(path=pwd()))' \n - julia --project=docs docs/make.jl\n after_success: skip","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Dans ce script on utilise un stage (\"Documentation\" n'est qu'un nom), pour en savoir plus consultez cette page.\nPour personnaliser les notifications de Travis, consultez cette page.\nPour lancer des applications sur Heroku, consultez cette page.\nPour personnaliser votre build, consultez cette page","category":"page"},{"location":"Integration_continue.html#Déploiement-de-la-documentation-1","page":"Intégration continue avec Travis CI","title":"Déploiement de la documentation","text":"","category":"section"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Si vous voulez déployer votre doc sur Github pages, vous devez avoir dans votre fichier docs/make.jl, dans le cas de Julia, un appel à la fonction deploydocs() du package Documenter en donnant comme paramètre le dépôt surlequel vous voulez déployer, exemple :","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"deploydocs(repo = \"github.com/username/myrepo.git\")","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"la branche de déploiement est par défaut branch = \"gh-pages\", et celle du développement est devbranch=\"master\",consultez la documentation de la fonction deploydocs() pour en savoir plus.","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"À chaque push ou pull request Travis-CI va exécuter ce fichier, et pour lui donner les droits à faire des modifications dans votre branche du dépoiement (gh-pages par défaut) suivez les étapes suivantes : ","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Dans le dossier contenant votre module Julia, dans la console julia utilisez la fonction genkeys(MonModule) du package DocumenterTools pour récuperer la clé ssh et la clé de sécurité: ","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"julia> using MonModule # s'il ne trouve pas le module, faites activate ./ dans la racine de votre module\njulia> using DocumenterTools\njulia> DocumenterTools.genkeys(MonModule)","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Ensuite,","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"Allez sur https://github.com/username/myrepo/settings/keys et àjoutez la clé ssh (\"ssh-rsa ...\") à votre dépôt,mettez comme nom documenter et cochez read/write access.\nAllez sur https://travis-ci.com/github/username/myrepo/settings ajoutez une secure environment variable avec le nom DOCUMENTER_KEY en donnant comme valeur la deuxième clé ().","category":"page"},{"location":"Integration_continue.html#","page":"Intégration continue avec Travis CI","title":"Intégration continue avec Travis CI","text":"warning: Note\nVous devez avoir suffisamment de droits pour pouvoir effectuer ces modifications. \nEvitez de copier un espace de plus en récupérant les deux clés.","category":"page"},{"location":"Questions_Lagrangien_Augmente.html#Travail-à-réaliser-:-1","page":"Travail à réaliser :","title":"Travail à réaliser :","text":"","category":"section"},{"location":"Questions_Lagrangien_Augmente.html#Implémentation-1","page":"Travail à réaliser :","title":"Implémentation","text":"","category":"section"},{"location":"Questions_Lagrangien_Augmente.html#","page":"Travail à réaliser :","title":"Travail à réaliser :","text":"1.Choisir des critères d’arrêt pour la convergence de l'algorithme.","category":"page"},{"location":"Questions_Lagrangien_Augmente.html#","page":"Travail à réaliser :","title":"Travail à réaliser :","text":"2.Implémenter l'algorithme du lagrangien augmenté, en utilisant les différentes méthodes qui ont été vues en première partie pour la résolution de la suite de problémes sans contraintes.","category":"page"},{"location":"Questions_Lagrangien_Augmente.html#","page":"Travail à réaliser :","title":"Travail à réaliser :","text":"3.Tester les différentes variantes sur les problèmes en Annexe D.","category":"page"},{"location":"Questions_Lagrangien_Augmente.html#Interprétation-1","page":"Travail à réaliser :","title":"Interprétation","text":"","category":"section"},{"location":"Questions_Lagrangien_Augmente.html#","page":"Travail à réaliser :","title":"Travail à réaliser :","text":"1.Commenter les résultats obtenus, en étudiant notamment les valeurs de λ_k et μ_k.","category":"page"},{"location":"Questions_Lagrangien_Augmente.html#","page":"Travail à réaliser :","title":"Travail à réaliser :","text":"2.Étudier l'influence du paramètre τ dans la performance de l'algorithme.","category":"page"},{"location":"Questions_Lagrangien_Augmente.html#","page":"Travail à réaliser :","title":"Travail à réaliser :","text":"3.Supplémentaire : Que proposez-vous comme méthode pour la résolution des problèmes avec des contraintes à la fois d'égalité et d'inégalité ? Implémenter (si le temps le permet) ce nouvel algorithme","category":"page"},{"location":"Annexes.html#A.-Problèmes-sans-contraintes-1","page":"Annexes","title":"A. Problèmes sans contraintes","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"Les problèmes de minimisation sans contraintes à résoudre sont les suivants :","category":"page"},{"location":"Annexes.html#Problème-1-1","page":"Annexes","title":"Problème 1","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"hspace*15cm beginaligned f_1 mathbbR^3 rightarrow mathbbR left(x_1 x_2 x_3right) mapsto 2left(x_1+x_2+x_3-3right)^2+left(x_1-x_2right)^2+left(x_2-x_3right)^2 endaligned","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"On cherchera à minimiser f_1 sur mathbbR^3 , en partant des points suivants : ","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"hspace*2cm x_011=leftbeginarrayc 1 0 0 endarrayright quad x_012=leftbeginarrayc 10 3 -22 endarrayright","category":"page"},{"location":"Annexes.html#Problème-2-1","page":"Annexes","title":"Problème 2","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"hspace*15cm beginaligned f_2 mathbbR^2 rightarrow mathbbR left(x_1 x_2right) mapsto 100left(x_2-x_1^2right)^2+left(1-x_1right)^2 endaligned","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"On cherchera à minimiser f_2 sur mathbbR^2 , en partant des points suivants : ","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"x_0 2 1=leftbeginarrayc -12 1 endarrayright","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"x_0 2 2=leftbeginarrayc 10 0 endarrayright","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"x_023=leftbeginarrayc 0 frac1200+frac110^12 endarrayright","category":"page"},{"location":"Annexes.html#B.-Cas-tests-pour-le-calcul-du-pas-de-Cauchy-1","page":"Annexes","title":"B. Cas tests pour le calcul du pas de Cauchy","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"On considère des fonctions quadratiques de la forme q(s)=s^top g+frac12 s^top H s","category":"page"},{"location":"Annexes.html#Quadratique-1-1","page":"Annexes","title":"Quadratique 1","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"g=leftbeginarrayl 0 0 endarrayright,H=leftbeginarrayll 7 0 0 2 endarrayright","category":"page"},{"location":"Annexes.html#Quadratique-2-1","page":"Annexes","title":"Quadratique 2","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"g=leftbeginarrayl 6 2 endarrayright,H=leftbeginarrayll 7 0 0 2 endarrayright","category":"page"},{"location":"Annexes.html#Quadratique-3-1","page":"Annexes","title":"Quadratique 3","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"g=leftbeginarrayl -2 1 endarrayright,H=leftbeginarrayll -2 0 0 10 endarrayright","category":"page"},{"location":"Annexes.html#C.-Cas-tests-pour-la-résolution-du-sous-problème-par-l’algorithme-du-Gradient-Conjugué-Tronqué-1","page":"Annexes","title":"C. Cas tests pour la résolution du sous-problème par l’algorithme du Gradient Conjugué Tronqué","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"On reprendra les 3 quadratiques testées avec le pas de Cauchy, auxquelles on ajoutera :","category":"page"},{"location":"Annexes.html#Quadratique-4-1","page":"Annexes","title":"Quadratique 4","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"g=leftbeginarrayl 0 0 endarrayright, H=leftbeginarrayll -2 0 0 10 endarrayright","category":"page"},{"location":"Annexes.html#Quadratique-5-1","page":"Annexes","title":"Quadratique 5","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"g=leftbeginarrayl 2 3 endarrayright,H=leftbeginarrayll 4 6 6 5 endarrayright","category":"page"},{"location":"Annexes.html#Quadratique-6-1","page":"Annexes","title":"Quadratique 6","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"g=leftbeginarrayl 2 0 endarrayright, H=leftbeginarrayll 4 0 0 -15 endarrayright","category":"page"},{"location":"Annexes.html#D.-Problèmes-avec-contraintes-1","page":"Annexes","title":"D. Problèmes avec contraintes","text":"","category":"section"},{"location":"Annexes.html#Retour-sur-f_1-1","page":"Annexes","title":"Retour sur f_1","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"On s'intéresse à la valeur minimale de f_1 sur un ensemble défini par une contrainte linéaire. La formulation du problème sera alors ","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"min _x_1+x_3=1 x in mathbbR^3 f_1(x)","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"On choisira comme point initial","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"x_c 11=leftbeginarrayl 0 1 1 endarrayright (réalisable) ","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"ou ","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"x_c 12=leftbeginarrayl 05 125 1 endarrayright (non réalisable) .","category":"page"},{"location":"Annexes.html#Retour-sur-f_2-1","page":"Annexes","title":"Retour sur f_2","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"On cherche à minimiser la fonction f_2 décrite dans la partie précédente, en se restreignant maintenant à une sphère. Le problème s'écrit :","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"min _x_1^2+x_2^2=15 x in mathbbR^2 f_2(x)","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"On choisira comme point initial","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"x_c 21=leftbeginarrayc 1 0 endarrayright (non réalisable) ","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"ou ","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"x_c 22=leftbeginarrayc sqrt3 2 sqrt3 2 endarrayright (réalisable).","category":"page"},{"location":"Annexes.html#Un-problème-avec-contraintes-d'inégalité-(supplément)-1","page":"Annexes","title":"Un problème avec contraintes d'inégalité (supplément)","text":"","category":"section"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"leftbeginarraylll min _(x y) in mathbbR^2 f_3(x y) = (x-1)^2+(y-25)^2 x-2 y+2 geq 0 -x-2 y+6 geq 0 -x+2 y+2 geq 0 x geq 0 y geq 0 endarrayright","category":"page"},{"location":"Annexes.html#","page":"Annexes","title":"Annexes","text":"L'origine pourra être prise comme point initial.","category":"page"},{"location":"generation_doc.html#Génération-de-la-documentation-d'un-dépot-git-1","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"","category":"section"},{"location":"generation_doc.html#/-Créer-un-répertoire-docs/-au-niveau-de-la-racine-du-projet-1","page":"Génération de la documentation d'un dépot git","title":"1/ Créer un répertoire docs/ au niveau de la racine du projet","text":"","category":"section"},{"location":"generation_doc.html#/-En-se-plaçant-au-niveau-du-répertoire-docs/-1","page":"Génération de la documentation d'un dépot git","title":"2/ En se plaçant au niveau du répertoire docs/","text":"","category":"section"},{"location":"generation_doc.html#1/-Création-du-fichier-make.jl-1","page":"Génération de la documentation d'un dépot git","title":"2-1/ Création du fichier make.jl","text":"","category":"section"},{"location":"generation_doc.html#","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"Ce programme utilise Documenter.makedocs() pour générer les pages html et Documenter.deploydocs() pour la dépoloyer dans les Github-pages:","category":"page"},{"location":"generation_doc.html#","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"using Documenter\nusing *le module*\n\nmakedocs( \n modules = [*le module*],\n sitename = \"le nom du site\",\n authors = \"author 1, author 2, ...\",\n format = Documenter.HTML(prettyurls = get(ENV, \"CI\", nothing) == \"true\"),\n pages = [ \n *Ici vous listez vos pages de la façon suivante*\n \"Le nom de la page 1 \" => \"page1.md\",\n \"Le nom de la page 2 \" => \"page2.md\",\n .\n .\n .\n ]\n )\n\ndeploydocs(repo = \"*Le lien du dépôt git*\")","category":"page"},{"location":"generation_doc.html#2/-Ajouter-les-dépendances-spécifiques-à-la-génération-de-la-doc-1","page":"Génération de la documentation d'un dépot git","title":"2-2/- Ajouter les dépendances spécifiques à la génération de la doc","text":"","category":"section"},{"location":"generation_doc.html#","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"Au niveau du répertoire docs vous tapez sur un terminal","category":"page"},{"location":"generation_doc.html#","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"/docs$ julia","category":"page"},{"location":"generation_doc.html#","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"julia> ]\npkg> activate .\n(docs) pkg> add Documenter\n(docs) pkg> add *Le lien git du module*","category":"page"},{"location":"generation_doc.html#3/-ajout-des-fichiers-1","page":"Génération de la documentation d'un dépot git","title":"2-3/ ajout des fichiers","text":"","category":"section"},{"location":"generation_doc.html#","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"Créez un docs src/ ensuite src/assets/ le premier contiendra les fichiers.md et le deuxième contiendra les éventuels images, logo et autres. (pour ajouter un logo mettez l'image sous le nom logo.<extension> dans assets/.","category":"page"},{"location":"generation_doc.html#4/-index-des-fonctions-1","page":"Génération de la documentation d'un dépot git","title":"2-4/ index des fonctions","text":"","category":"section"},{"location":"generation_doc.html#","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"","category":"page"},{"location":"generation_doc.html#/-Génération-de-la-docs-1","page":"Génération de la documentation d'un dépot git","title":"3/- Génération de la docs","text":"","category":"section"},{"location":"generation_doc.html#","page":"Génération de la documentation d'un dépot git","title":"Génération de la documentation d'un dépot git","text":"Pour en savoir plus, consultez cette page. ","category":"page"},{"location":"git_doc.html#Créer-un-module-en-Julia-et-définir-ses-fonctions-1","page":"-","title":"Créer un module en Julia et définir ses fonctions","text":"","category":"section"},{"location":"git_doc.html#","page":"-","title":"-","text":"Pour générer un nouveau module, utilisez pkg> generate Toto, deux fichiers seront crées : Project.toml qui contient le nom du package, son UUID unique, sa version, l'auteur et les éventuelles dépendances et le fichier src/Toto.jl :","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"module Toto\n\ngreet() = print(\"Hello World!\")\ninclude(\"Fonctions.jl\")\n\nend # module","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Dans ce fichier Toto.jl, on définit les fonctions du module. Dans l'exemple ci-dessus la fonction \"greet()\" et toutes les fonctions définies dans le fichier \"Fonctions.jl\" seront accessibles pour les utilisateurs du module.","category":"page"},{"location":"git_doc.html#Définir-les-tests-du-module-:-1","page":"-","title":"Définir les tests du module :","text":"","category":"section"},{"location":"git_doc.html#","page":"-","title":"-","text":"Pour ajouter des tests à ce module :","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Créez un nouveau dossier /test (pas /tests !)\ndedans créez un nouveau fichier runtests.jl (pas runtest.jl !)","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"!! tous les tests devraient être inclus (avec des include) dans ce fichier. ","category":"page"},{"location":"git_doc.html#Créer-un-dépôt-Git-1","page":"-","title":"Créer un dépôt Git","text":"","category":"section"},{"location":"git_doc.html#","page":"-","title":"-","text":"Pour créer un dépôt sur Github:","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Rendez-vous sur github.com\nCréez un compte si vous en avez pas\nCréez un dépôt, il est recommandé de prendre le même nom que le Module (Toto dans notre cas).","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"warning: Avertissement\nNe cochez PAS Initialize this repository with a README !, mais si vous l'avez déja fait n'utilisez PAS la méthode suivante, mais plutôt la méthode Git clone ci-dessous.\nPour les authentifications, utilisez votre identifiant Github.","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Ensuite,recupérez le lien de votre dépôt:","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"| (Image: ) |","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Lancez un terminal dans le dossier (Toto dans notre cas) contenant votre Module:","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"git init \ngit add . \ngit commit -m \"first commit\" \ngit remote add origin https://le_lien_du_dépôt.git \ngit push -u origin master","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Dans la suite vous n'aurez plus besoin d'utiliser toute la commande git push -u origin master,mais juste git push pour pousser vos modifs.","category":"page"},{"location":"git_doc.html#Git-clone-1","page":"-","title":"Git clone","text":"","category":"section"},{"location":"git_doc.html#","page":"-","title":"-","text":"Pour ajouter vos fichier si vous avez initialisé votre dépôt lancez un terminal dans un dossier à coté du dossier contenant votre Module:","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"git clone https://le_lien_du_dépôt.git ","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Un dossier au nom du dépôt sera crée, ajouter vos fichiers dedans,(Project.toml,Manifest.toml,src/,...)","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"warning: Avertissement\nAjoutez les fichiers et pas le dossier contenant le module !","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Maintenant,allez dans le dossier du dépôt et dans un terminal :","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"git add . \ngit commit -m \"first commit\" \ngit push","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"Consultez cette page pour savoir plus sur Git/Github.","category":"page"},{"location":"git_doc.html#Utilisation-du-module-1","page":"-","title":"Utilisation du module","text":"","category":"section"},{"location":"git_doc.html#","page":"-","title":"-","text":"Vous pouvez maintenant importé votre module:","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"julia> ]\npkg> add https://le_lien_du_dépôt.git","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"pour le tester: ","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"pkg> test Toto","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"pour l'utiliser:","category":"page"},{"location":"git_doc.html#","page":"-","title":"-","text":"julia> using Toto","category":"page"},{"location":"generate_pdf.html#Génération-d'un-fichier-pdf-1","page":"Génération d'un fichier pdf","title":"Génération d'un fichier pdf","text":"","category":"section"},{"location":"generate_pdf.html#","page":"Génération d'un fichier pdf","title":"Génération d'un fichier pdf","text":"Le package Weave permet de générer un rapport sous format pdf d'un script Julia.","category":"page"},{"location":"generate_pdf.html#","page":"Génération d'un fichier pdf","title":"Génération d'un fichier pdf","text":"Le fichier gabarit_rapport.jl est un gabarit de rapport. Après avoir édité votre script, vous pouvez publier votre script en format HTML avec la commande:","category":"page"},{"location":"generate_pdf.html#","page":"Génération d'un fichier pdf","title":"Génération d'un fichier pdf","text":"julia> ]\npkg> add Weave\njulia> using Weave\njulia> weave(\"gabarit_rapport.jl\", doctype = \"md2html\")","category":"page"},{"location":"generate_pdf.html#","page":"Génération d'un fichier pdf","title":"Génération d'un fichier pdf","text":"Il est important d'imprimer ensuite le fichier HTML en format pdf pour la remise sur Moodle.","category":"page"},{"location":"generate_pdf.html#","page":"Génération d'un fichier pdf","title":"Génération d'un fichier pdf","text":"warning: Avertissement\nLes lignes de code précédentes ne doivent pas se retrouver dans votre script. Vous devez les éxécuter dans la console de Julia en vous assurant d'être dans le dossier contenant le fichier gabarit_rapport.jl.","category":"page"},{"location":"Questions_Pas_De_Cauchy.html#Travail-à-réaliser-pour-l'algorithme-des-régions-de-confiance-avec-pas-de-cauchy-1","page":"-","title":"Travail à réaliser pour l'algorithme des régions de confiance avec pas de cauchy","text":"","category":"section"},{"location":"Questions_Pas_De_Cauchy.html#Implémentation-1","page":"-","title":"Implémentation","text":"","category":"section"},{"location":"Questions_Pas_De_Cauchy.html#","page":"-","title":"-","text":"Implémenter une fonction calculant à part le pas de Cauchy d’un sous-problème de","category":"page"},{"location":"Questions_Pas_De_Cauchy.html#","page":"-","title":"-","text":"régions de confiance. La tester sur les quadratiques proposées en Annexe B.","category":"page"},{"location":"Questions_Pas_De_Cauchy.html#","page":"-","title":"-","text":"Inclure en suivant ce calcul dans un algorithme de régions de confiance ; le tester sur les problèmes de l’Annexe A.","category":"page"},{"location":"Questions_Pas_De_Cauchy.html#Interprétation-1","page":"-","title":"Interprétation","text":"","category":"section"},{"location":"Questions_Pas_De_Cauchy.html#","page":"-","title":"-","text":"Quelle relation lie la fonction test f 1 et son modèle de Taylor à l’ordre 2 ? Comparer alors les performances de Newton et RC-Pas de Cauchy sur cette fonction.\nLe rayon initial de la région de confiance est un paramètre important dans l’analyse","category":"page"},{"location":"Questions_Pas_De_Cauchy.html#","page":"-","title":"-","text":"de la performance de l’algorithme. Sur quel(s) autre(s) paramètre(s) peut-on jouer pour essayer d’améliorer cette performance ? Étudier l’influence d’au moins deux de ces paramètres.","category":"page"},{"location":"Regions_de_confiance.html#Régions-de-confiance-partie-1-1","page":"La méthode des régions de confiance","title":"Régions de confiance partie 1","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"L’introduction d’une région de confiance dans la méthode de Newton permet de garantir la convergence globale de celle-ci, i.e. la convergence vers un optimum local quel que soit le point de départ. Cela suppose certaines conditions sur la résolution locale des sous- problèmes issus de la méthode, qui sont aisément imposables.","category":"page"},{"location":"Regions_de_confiance.html#Principe-1","page":"La méthode des régions de confiance","title":"Principe","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"L’idée de la méthode des régions de confiance est d’approcher f par une fonction modèle plus simple m_k dans une région R_k=leftx_k+s s leq Delta_kright pour un Delta_k fixé. Cette région dite “de confiance” doit être suffisament petite pour que","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*25cm m_kleft(x_k+sright) sim fleft(x_k+sright)","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Le principe est que, au lieu de résoudre : fleft(x_k+1right)=min _x leq Delta_k fleft(x_k+sright) on résout :","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*25cm m_kleft(x_k+1right)=min _x leq Delta_k m_kleft(x_k+sright) hspace*25cm(2.1)","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Si la différence entre f(x_k+1) et m_k (x_k+1 ) est trop grande, on diminue le _k (et donc la région de confiance) et on résout le modèle (2.1) à nouveau. Un avantage de cette méthode est que toutes les directions sont prises en compte. Par contre, il faut faire attention à ne pas trop s’éloigner de x_k ; en général, la fonction m_k n’approche proprement f que sur une région proche de x_k .","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Exemple de modèle : l’approximation de Taylor à l’ordre 2 (modèle quadratique) :","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm\tm_kleft(x_k+sright)=q_k(s)=fleft(x_kright)+g_k^top s+frac12 s^top H_k s hspace*15cm(2.2)","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"avec g_k=nabla fleft(x_kright) text et H_k=nabla^2 fleft(x_kright)","category":"page"},{"location":"Regions_de_confiance.html#Algorithme-1","page":"La méthode des régions de confiance","title":"Algorithme","text":"","category":"section"},{"location":"Regions_de_confiance.html#Algorithme-2-1","page":"La méthode des régions de confiance","title":"Algorithme 2","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Méthode des régions de confiance (algo général) ","category":"page"},{"location":"Regions_de_confiance.html#Données:-1","page":"La méthode des régions de confiance","title":"Données:","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Delta_max 0 Delta_0 in(0 Delta_max) 0 gamma_1 1 gamma_2 0 eta_1 eta_2 1","category":"page"},{"location":"Regions_de_confiance.html#Sorties:-1","page":"La méthode des régions de confiance","title":"Sorties:","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"une approximation de la solution du problème : min _x in mathbbR^n f(x)","category":"page"},{"location":"Regions_de_confiance.html#.Tant-que-le-test-de-convergence-est-non-satisfait-:-1","page":"La méthode des régions de confiance","title":"1.Tant que le test de convergence est non satisfait :","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm a.Calculer approximativement s_k solution du sous-problème (2.1).","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm b.Evaluer fleft(x_k+s_kright) et rho_k=fracfleft(x_kright)-fleft(x_k+s_kright)m_kleft(x_kright)-m_kleft(x_k+s_kright)","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm c. Mettre à jour l’itéré courant :","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*25cm x_k+1=leftbeginarrayll x_k+s_k text si rho_k geq eta_1 x_k text sinon endarrayright","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm d. Mettre à jour la région de confiance : ","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*25cm Delta_k+1=leftbeginarrayccmin gamma_2 Delta_k Delta_max operatornamesi rho_k geq eta_2 Delta_k text si rho_k in eta_1 eta_2 gamma_1 Delta_k text sinon endarrayright","category":"page"},{"location":"Regions_de_confiance.html#.Retourner-x_{k}.-1","page":"La méthode des régions de confiance","title":"2.Retourner x_k.","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Cet algorithme est un cadre générique. On va s’intéresser à deux raffinages possibles de l’étape a.","category":"page"},{"location":"Regions_de_confiance.html#Le-pas-de-cauchy-1","page":"La méthode des régions de confiance","title":"Le pas de cauchy","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*05cmOn considère ici le modèle quadratique q_k(s). Le sous-problème de régions de confiance correspondant peut se révéler difficile à résoudre (parfois autant que le problème de départ).","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Il est donc intéressant de se restreindre à une résolution approchée de ce problème.","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*05cmLe pas de Cauchy appartient à la catégorie des solutions approchées. Il s’agit de se restreindre au sous-espace engendré par le vecteur g_k ; le sous-problème s’écrit alors","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*25cm leftbeginarraycl min q_k(s) s t s=-t g_k t0 s leq Delta_k endarrayright hspace*15cm (2.3)","category":"page"},{"location":"Regions_de_confiance.html#Algorithme-du-Gradient-Conjugué-Tronqué-1","page":"La méthode des régions de confiance","title":"Algorithme du Gradient Conjugué Tronqué","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"On s’intéresse maintenant à la résolution approchée du problème (2.1) à l’itération k de l’algorithme 2 des Régions de Confiance. On considère pour cela l’algorithme du Gradient Conjugué Tronqué (vu en cours), rappelé ci-après :","category":"page"},{"location":"Regions_de_confiance.html#Algorithme-3-1","page":"La méthode des régions de confiance","title":"Algorithme 3","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Algorithme du gradient conjugué tronqué","category":"page"},{"location":"Regions_de_confiance.html#Données:-2","page":"La méthode des régions de confiance","title":"Données:","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"Delta_k 0 x_k g=nabla fleft(x_kright) H=nabla^2 fleft(x_kright)","category":"page"},{"location":"Regions_de_confiance.html#Sorties:-2","page":"La méthode des régions de confiance","title":"Sorties:","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"le pas s qui approche la solution du problème : min_s leq Delta_k q(s)","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"où q(s)=g^top s+frac12 s^top H_k s","category":"page"},{"location":"Regions_de_confiance.html#Initialisations-:-1","page":"La méthode des régions de confiance","title":"Initialisations :","text":"","category":"section"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"s_0=0 g_0=g p_0=-g","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"1. Pour j = 0, 1, 2, . . . , faire :","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm a. hspace*04cm kappa_j=p_j^T H p_j","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm b.hspace*04cm Si kappa_j leq 0 alors hspace*25cm déterminer sigma_j la racine de l’équation lefts_j+sigma p_jright_2=Delta_k hspace*27cm pour laquelle la valeur de qleft(s_j+sigma p_jright) est la plus petite.","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*25cm Poser s=s_j+sigma_j p_j et sortir de la boucle. hspace*15cm Fin Si","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm c. hspace*04cm alpha_j=g_j^T g_j kappa_j","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm d.hspace*04cm Si lefts_j+alpha_j p_jright_2 geq Delta_k alors","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*25cm déterminer sigma_j la racine positive de l’équation lefts_j+sigma p_jright_2=Delta_k","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*25cm Poser s=s_j+sigma_j p_j et sortir de la boucle. hspace*15cm Fin Si","category":"page"},{"location":"Regions_de_confiance.html#","page":"La méthode des régions de confiance","title":"La méthode des régions de confiance","text":"hspace*15cm e. hspace*04cm s_j+1=s_j+alpha_j p_j hspace*15cm f. hspace*04cm g_j+1=g_j+alpha_j H p_j hspace*15cm g. hspace*04cm beta_j=g_j+1^T g_j+1 g_j^T g_j hspace*15cm h. hspace*04cm p_j+1=-g_j+1+beta_j p_j hspace*15cm i. hspace*04cm Si la convergence est suffisante (g_j+1leq Tol_relg_0), poser s=s_j+1 et sortir de la boucle.","category":"page"},{"location":"Regions_de_confiance.html#Retourner-s.-1","page":"La méthode des régions de confiance","title":"Retourner s.","text":"","category":"section"},{"location":"Sujet.html#Sujet-TP-Projet-Optimisation-numérique-2A-ENSEEIHT-1","page":"Sujet","title":"Sujet TP-Projet Optimisation numérique 2A-ENSEEIHT","text":"","category":"section"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"La première partie de ce TP-projet concerne les problèmes d’optimisation sans contraintes. On étudie la méthode de Newton et sa globalisation par l’algorithme des régions de confiance. La résolution du sous-problème des régions de confiance sera réalisée de deux façons, soit à l’aide du point de Cauchy, soit par l’algorithme du Gra- dient Conjugué Tronqué. La seconde partie du projet exploite la partie précédente pour résoudre des problèmes d’optimisation avec contraintes par l’algorithme du Lagrangien augmenté. ","category":"page"},{"location":"Sujet.html#Optimisation-sans-contraintes-1","page":"Sujet","title":"Optimisation sans contraintes","text":"","category":"section"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"Dans cette partie, on s’intéresse à la résolution du problème","category":"page"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"min _x in mathbbR^n f(x)","category":"page"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"où la fonction f est de classe C^2 sur R^n . On cherche donc à exploiter l’information fournie par ses dérivées première et seconde, que l’on représente en tout point x par le vecteur gradient nabla f (x) in R^n et la matrice Hessienne nabla^2 f (x) in R^ntimes n.","category":"page"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"1) Algorithme de Newton local","category":"page"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"2) La méthode des régions de confiance","category":"page"},{"location":"Sujet.html#Optimisation-avec-contraintes-1","page":"Sujet","title":"Optimisation avec contraintes","text":"","category":"section"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"Dans cette partie, nous nous intéressons à la résolution des problèmes sous contraintes. Le problème se présente donc sous la forme suivante :","category":"page"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"min _x in mathbbR^n f(x) sous la contrainte x in C","category":"page"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"où C est un sous-ensemble non vide de mathbbR^n.","category":"page"},{"location":"Sujet.html#","page":"Sujet","title":"Sujet","text":"3) Lagrangien Augmenté","category":"page"},{"location":"FAQ.html#Foire-Aux-Questions-1","page":"Foire aux Questions","title":"Foire Aux Questions","text":"","category":"section"},{"location":"Questions_GCT.html#Travail-à-réaliser-pour-l'algorithme-des-régions-de-confiance-avec-gradient-conjugué-tronqué-1","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"","category":"section"},{"location":"Questions_GCT.html#Implémentation-1","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Implémentation","text":"","category":"section"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"Implémenter l’algorithme du Gradient Conjugué Tronqué, en se basant sur le cours.","category":"page"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"On validera les résultats sur les fonctions de l’Annexe C.","category":"page"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"Intégrer finalement l’algorithme du Gradient Conjugué Tronqué dans un code de","category":"page"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"régions de confiance, et appliquer ce code pour résoudre les exemples proposés en Annexe A.","category":"page"},{"location":"Questions_GCT.html#Interprétation-1","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Interprétation","text":"","category":"section"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"Comparer la décroissance obtenue avec celle du pas de Cauchy, en retournant, dans","category":"page"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"un premier temps le dernier itéré admissible à courbure positive (c’est à dire, que si l’une ou l’autre des deux conditions (b) ou (d) sont rencontrées dans l’algorithme 3, alors on ne calcule pas σ_j et on retourne le dernier itéré s_j directement).","category":"page"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"Comparer la décroissance obtenue avec celle du pas de Cauchy, en imposant la sortie","category":"page"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"dans l’algorithme 3 au bout d’une itération seulement. Que remarquez vous ?","category":"page"},{"location":"Questions_GCT.html#","page":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","title":"Travail à réaliser pour l'algorithme des régions de confiance avec gradient conjugué tronqué","text":"Comparer la décroissance obtenue avec celle du pas de Cauchy dans le cas général.\nQuels sont les avantages et inconvénients des deux approches ?","category":"page"},{"location":"julia_vs_matlab.html#Julia-vs-MatLab-1","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Cette page se veut une description sommaire des différences entre les languages de programmation MatLab et Julia. Cette page ne se veut pas être une revue exhaustive ni complète des différences entre ces deux langages, mais un sommaire permettant à un utilisateur habitué à MatLab de pouvoir être minimalement fonctionnel sur Julia. Un complément d'informations peut être trouvé sur cette page web de la documentation de Julia Noteworthy Differences from other Languages.","category":"page"},{"location":"julia_vs_matlab.html#Quelques-fonctions-usuelles-1","page":"Julia vs MatLab","title":"Quelques fonctions usuelles","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Le tableau suivant se veut un recensement non-exhaustif de certaines commandes usuelles sur MatLab et Julia.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Opération MatLab Julia Librairie requise\nVecteur linéairement espacé linspace LinRange \nValeur maximale d'un array max maximum \nValeur minimale d'un array min minimum \nRésolution système linéaire \\ \\ LinearAlgebra\nNorme d'un vecteur norm norm LinearAlgebra\nNorm d'une matrice norm opnorm LinearAlgebra\nAffichage sur la console fprintf @printf Printf\nMoyenne d'un array mean mean Statistics\nAffichage d'un graphique plot plot Plots","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Une des différences majeures entre Julia et MatLab est que MatLab représente par défaut ces données dans dans des matrices contenant des Float64, tandis que Julia type fortement ces variables. Notamment, Julia distingue les integer et les float à l'aide d'un point . suivant immédiatemment le nombre. Par exemple, la commande suivante crée un integer (Int64 sur la majorité des machines):","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"a = 3\ntypeof(a)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Alors que la syntaxe suivante crée un float (Float64 sur la majorité des machines):","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"b = 3.\ntypeof(b)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Aussi, Julia fait la différence entre une variable de type Float64 et un vecteur contenant des Float64.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"c = -1.\nd = [-1.]","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Ceci engendre donc des différences dans l'utilisation de certaines fonctions. Par exemple, si l'on veut calculer les valeurs absolues d'un Float64 et les valeurs absolues des éléments d'un vecteur (ou d'une matrice), on obtient les résultats suivants:","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"abs(c)\nabs(d)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Il sera indiqué à la section Opérations sur des vecteurs et des matrices comment effectuer cette opération simple à effectuer sur MatLab.","category":"page"},{"location":"julia_vs_matlab.html#Création-de-vecteurs-et-de-matrices-1","page":"Julia vs MatLab","title":"Création de vecteurs et de matrices","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"La première différence notable avec MatLab est le fait que Julia distingue les vecteurs des matrices. Les vecteurs sont des array de dimension 1, alors que les matrices sont des array dimension 2. En Julia, la convention adoptée est de type column-major order, les vecteurs sont de type colonne. Afin de créer un vecteur sur Julia, on emploie les crochets [] et on sépare les éléments par des virgules ou des point-virgules ;.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"x = [1,2,3]\ny = [1;2;3]","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Les matrices sont quant à elles créées encore à l'aide de crochets [], mais les éléments sur une même ligne doivent être séparés pas des espaces et un saut de ligne s'indique par le point-virgule ;.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"A = [1 2 3; 4 5 6]","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"note: Note\nLa commande suivante créera un array de dimension 2 possédant une ligne et 3 colonnes au lieu d'un vecteurz = [1 2 3]","category":"page"},{"location":"julia_vs_matlab.html#creation_vec_mat-1","page":"Julia vs MatLab","title":"Opérations sur des vecteurs et des matrices","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Julia récupère quelques éléments syntaxiques de MatLab concernant les opérations sur arrays, mais diffère sur quelques points. Comme dans MatLab, les opérations élément par élément s'effectuent à l'aide du point .. Ainsi, les opérations suivantes sont les mêmes que sur MatLab.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"v=[1,2]\nB=[1 2 ; 3 4]\nC=[5 -6 ; -7 8]\n\nB*C\nB.*C\n\nB^2\nB.^2\n\nB*v\nB.*v","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"La multiplication d'un vecteur ou une matrice par un nombre est définie comme sur MatLab.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"2.5*v\n2.5*B\nC/3","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Les opérations différentes concernent notamment les opérations d'addition/soustraction et les comparaison logique. L'addition/soustraction d'un nombre et d'un vecteur/matrice n'est pas définie en Julia, il faut donc utiliser le ..","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"2 + B\n2 .+ B\nB - C\nB .- C","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Pour les opérateurs logiques, il faut aussi employer le . afin de comparer éléments par éléments.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"2 == B\n2 .== B\n2 .<= B\n\nB<C\nB.<C","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"warning: Important\nÉtant donné que le point . permet à la fois de définir un float et d'effectuer les opérations éléments par éléments, il faut mettre des espaces entre les points afin de pouvoir distinguer la signification de chaque point .. La commande suivante:5.+[1,2]produira le message d'erreur suivant:ERROR: syntax: invalid syntax \"5.*\"; add space(s) to clarifyIl faut alors utiliser la syntaxe suivante:5. .+ [1,2]","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Les fonctions mathématiques standards définies sur mathbbR n'acceptent pas des vecteurs sous Julia. Il faut donc employer le point . immédiatemment après le nom de la fonction afin d'appliquer la fonction élément par élément.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"cos(v)\ncos.(v)\nmod(B,3)\nmod.(B,3)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Cette syntaxe s'applique à toute les fonctions écrit sur Julia, que cela soit les fonctions des librairies standards de Julia ou des fonctions créées par l'utilisateur.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"warning: Avertissement\nCertaines fonctions mathématiques sont définies sur des matrices carrés, tels les fonctions trigonométriques, l'exponentiation et la puissance. Il faut donc faire attention à savoir si l'on veut effectuer ces opérations sur la matrice ou sur les éléments de la matrice. L'exemple suivant illustre ces différences:M=[0 1 ; 2 -1]\nexp(M)produit le résultat suivant:2×2 Array{Float64,2}:\n1.8573 0.860982\n1.72196 0.996317Alors que la commande suivante:exp.(M)effectue l'exponentiation élément par élément:2×2 Array{Float64,2}:\n1.0 2.71828\n7.38906 0.367879","category":"page"},{"location":"julia_vs_matlab.html#Indexation,-*slices*-et-concaténation-de-vecteurs-et-de-matrices-1","page":"Julia vs MatLab","title":"Indexation, slices et concaténation de vecteurs et de matrices","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"On accède aux éléments d'un vecteur ou d'une matrice à l'aide des crochets [] comparativement à MatLab ou l'on accède aux éléments avec les parenthèse (). Le reste de la syntaxe est identique à celle de MatLab, la numérotation commence à 1 et le dernier élément peut être extrait avec end. Les dimensions sont aussi séparées par des virgules ,.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"w=[-1,2,3]\nE=[1 2 3 ; 4 5 6 ; 7 8 9]\n\nw[2:end]\nE[[1,3],1:2]\nE[[1,3],[1:2]]","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"La dernière commande engendre une erreur, ce qui permet d'illustrer une subtile différence entre Julia et MatLab. MatLab interprète la commande [1:2] en créant un vecteur contenant [1,2], alors que Julia crée un array d'array, ce qui génère l'erreur.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"La concaténation s'effectue selon la même logique que la création d'une matrice, on emploie l'espace pour concaténer horizontalement et le point-virgule ; pour concaténer verticalement ","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"[E E]\n[E;E]\n[w E]\n[E ; w']","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"La syntaxe pour modifier un ou des éléments d'un vecteur ou d'une matrice est la même que sur MatLab. Toutefois, puisque Julia est fortement typé, les commandes suivantes produisent des erreurs étant donné que les types ne concordent pas.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"E[1,1] = [-1]\nE[2:3,[1,3]] = -4","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"En comparaison, les commandes suivantes ne produisent pas d'erreurs:","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"E[1,1] = -1\nE[1:1,1] = [-1]\nE[2:3,[1,3]] .= -4","category":"page"},{"location":"julia_vs_matlab.html#Passer-par-valeur-ou-par-référence?-1","page":"Julia vs MatLab","title":"Passer par valeur ou par référence?","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Une différence majeure entre MatLab et Julia est le fait que MatLab effectue des copies de ses variables, alors que Julia effectue parfois le référencement.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"A = [1 2 ; 3 4]\nB = A;\nB[1,1] = -9;\nA","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"La deuxième commande ne crée pas une copie de A, mais indique plutôt que B pointe vers le même espace mémoire que A. Ainsi, toute modification à A ou à B sera effectuée sur les deux variables.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Toutefois, dès qu'une opération de slices consistant à extraire un sous-vecteur d'un array est effectuée, une copie est créée.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"A = [1 2 ; 3 4]\nC = A[1,:]\nA[1,1] = -5;\nC","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Si l'on veut que la variable C pointe vers l'espace mémoire de A, il faut plutôt employer la fonction view.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"A = [1 2 ; 3 4]\nD = view(A,1,1:2)\nA[1,1] = -3;\nD","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Lorsqu'un array est passé en argument dans une fonction, l'argument est passé par référence. Ainsi, toute modification de cet array dans la fonction se réflètera à l'extérieur de cette fonction. Ceci constitue une très grosse différence par rapport à MatLab, où toutes les variables modifiées au sein d'une fonction sont passées par valeur et non par référence.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"A = [1 2 ; 3 4]\nfunction demo!(M)\n M[1,1] = -11\n T = 1 .+ M\n return T\nend\n\nS = demo!(A)\nA","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"note: Note\nPar convention, les fonctions modifiant les variables passées en arguments sont notées avec un point d'exclamation !.","category":"page"},{"location":"julia_vs_matlab.html#Création-d'une-fonction-1","page":"Julia vs MatLab","title":"Création d'une fonction","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Sur MatLab, la création de fonctions ne peut s'effectuer qu'à la fin d'un script ou en écrivant un fichier .m contenant la définition d'une fonction. Julia est plus versatile, car des fonctions peuvent être définies n'importe où dans un script et même à l'intérieur d'autres fonctions. L'exemple suivant permet de définir la fonction y(x) = x cos(x) -e^x.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"function exemple1(x)\n y = x * cos(x) - exp(x)\n return y\nend\nx = LinRange(0,1,250)\nz1 = exemple1.(x)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"warning: Important\nla fonction est appellée avec un point étant donné que le veut évaluer la fonction sur chaque élément du vecteur x.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Cette dernière fonction peut être définie de manière plus compacte ainsi:","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"exemple2(x) = x * cos(x) - exp(x)\nz2 = exemple2.(x)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Voici un exemple d'une fonction permettant de retourner les éléments d'un vecteur plus petit ou égal à une valeur p et les valeurs strictement plus grande que p.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"function exemple3(x,p)\n vector_petit = x[x .<= p]\n vector_grand = x[x .> p]\n return vector_petit , vector_grand\nend\n\ntest = [1,5,-9,3,-5,2,8,12,7]\n(vec1,vec2) = exemple3(test,2);\nvec1\nvec2","category":"page"},{"location":"julia_vs_matlab.html#Scope/portée-des-variables-1","page":"Julia vs MatLab","title":"Scope/portée des variables","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Une autre différence majeure entre MatLab et Julia réside dans la portée/scope des variables. Sur MatLab, les variables globales doivent être déclarées à la fois dans le script et dans les fonctions employant ces variables. Ces variables peuvent être modifiées et ces modifications seront accessibles partout. Sur Julia, les variables globales sont celles définies dans un script, le REPL ou dans un module. Les variables globales dans Julia peuvent seulement être modifiées dans le scope global (changer des éléments d'un array ne consiste pas à changer la variable). Les fonctions et les boucles for/while introduisent un scope local qui hérite de toutes les variables du scope parent (qu'elles soient globales ou locales). Si une variable introduite dans le scope local possède le même nom qu'une variable globale, une nouvelle variable possédant le même nom sera créée, mais sa portée sera restreint qu'au scope local (c'est pourquoi, dans l'exemple suivant, la variable c n'est pas définie en dehors de la boucle for).","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"b = 1\nfor t=1:5\n b = -2\n c = t + b\n println(c)\nend\nb\nc\n\nfunction test1()\n b = 3\n println(b)\nend\ntest1()\nb","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Le script suivant produit une erreur étant donné que la variable b dans le scope de la boucle for ne correspond pas au b du scope global. Une nouvelle variable b est alors créée dans le scope de la boucle for, ce qui engendre une erreur puisque cette variable n'est pas initialisée.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"b = 1\n\nfor t=1:10\n b = b + 1\nend","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Les variables locales sont aussi passées aux scopes enfants. Ces variables peuvent toutefois être modifiées à l'intérieur de ces scopes enfants, contrairement aux variables globales.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"b = 1\nfunction test2()\n x = 2\n function test_in()\n x = 3\n return x + b\n end\n return test_in() + x\nend\ntest2()","category":"page"},{"location":"julia_vs_matlab.html#Affichage-de-textes-et-de-tableaux-sur-la-console-1","page":"Julia vs MatLab","title":"Affichage de textes et de tableaux sur la console","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Afin d'afficher une ligne de texte sur MatLab, on emploie la commande fprintf, alors que sur Julia, il faut utiliser la macro @printf. Cette macro se retrouve dans le package Printf qui doit être importé. Le reste de la syntaxe reste néanmoins similaire à celle de MatLab.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"using Printf\n\nn = 1:6; v1 = 2 .^ n; v2 = 2 .^ (1 ./ n);\n\n@printf(\"n 2^n 2^(1/n)\\n\")\nfor t=1:length(n)\n @printf(\"%2d %2d %16.15e\\n\",n[t],v1[t],v2[t])\nend","category":"page"},{"location":"julia_vs_matlab.html#Affichage-de-graphiques-1","page":"Julia vs MatLab","title":"Affichage de graphiques","text":"","category":"section"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Afin d'afficher des graphiques avec Julia, il faut utiliser le package Plots, en employant la commande using Plots. Les attributs spécifiant les propriétés des courbes et des graphiques doivent être décrites lors de la création de ces mêmes courbes, comparativement à Matlab. L'exemple suivant permet de créer une courbe rouge représentant la fonction sin et une courbe bleue représentant la fonction cos.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"using Plots\n\nx = LinRange(-2*pi,2*pi,250); y1 = sin.(x); y2 = cos.(x);\n\nplot(x,y1,label=\"sin(x)\",color=\"red\")\nplot!(x,y2,label=\"cos(x)\",color=\"blue\",xlabel=\"x\",ylabel=\"y\",title=\"Un premier graphique\")\n\nplot!([],[],label=\"\",size=(400,300)); savefig(\"tutorial-plot1.png\"); nothing # hide","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"(Image: Graphique #1)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Le titre de chaque courbe est spécifié avec l'attribut label et la couleur avec l'attribut color. Pour afficher plusieurs courbes sur le même graphique, il faut utiliser la commande terminée par un ! (ici la commande est plot!). Finalement, le titre des axes et du graphiques sont spécifiés.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Afin d'afficher des points sur un graphique, on change l'attribut linetype pour scatter.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"y3 = 2 .* rand(length(x)) .- 1;\n\nplot!(x,y3,label=\"random\",color=\"green\",linetype=\"scatter\")\n\nplot!([],[],label=\"\",size=(400,300)); savefig(\"tutorial-plot2.png\"); nothing # hide","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"(Image: Graphique #1)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"Afin de créer un graphique avec des axes en base logarithmique, il faut employer l'attribut xscale=:log10 pour l'axe x ou yscale=:log10 pour l'axe y. Le package Plots génèrera toutefois des erreurs si des éléments sont nuls ou négatifs lorsque l'on emploie des axes logarithmiques. Il faut donc seulement selectionner les éléments strictement plus grand que 0.","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"data_x = 1:5;\ndata_y = [1e-3,1e-7,-1e-4,1e-5,0];\n\nplot(data_x[data_y.>0],data_y[data_y.>0],yscale=:log10,title=\"Graphique avec axe y de type log\")\n\nplot!([],[],label=\"\",size=(400,300)); savefig(\"tutorial-plot3.png\"); nothing # hide","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"(Image: Graphique #2)","category":"page"},{"location":"julia_vs_matlab.html#","page":"Julia vs MatLab","title":"Julia vs MatLab","text":"La description complète des attributs des graphiques est disponible à ce lien: http://docs.juliaplots.org/latest/attributes/.","category":"page"},{"location":"fct_index.html#Documentation-des-fonctions-1","page":"Index des fonctions","title":"Documentation des fonctions","text":"","category":"section"},{"location":"fct_index.html#","page":"Index des fonctions","title":"Index des fonctions","text":"Documentation de toute les fonctions du package Optinum","category":"page"},{"location":"fct_index.html#","page":"Index des fonctions","title":"Index des fonctions","text":"Pages = [\"fct_index.md\"]","category":"page"},{"location":"fct_index.html#","page":"Index des fonctions","title":"Index des fonctions","text":"Modules = [Optinum]\nOrder = [:function, :type]","category":"page"},{"location":"fct_index.html#Optinum.Algorithme_De_Newton-Tuple{Function,Function,Function,Any,Any}","page":"Index des fonctions","title":"Optinum.Algorithme_De_Newton","text":"Approximation de la solution du problème min_x in mathbbR^n f(x) en utilisant l'algorithme de Newton\n\nSyntaxe\n\nxk,f_min,flag,nb_iters = Algorithme_de_Newton(f,gradf,hessf,x0,option)\n\nEntrées :\n\nf : (Function) la fonction à minimiser\ngradf : (Function) le gradient de la fonction f\nhessf : (Function) la Hessienne de la fonction f\nx0 : (Array{Float,1}) première approximation de la solution cherchée\noptions : (Array{Float,1})\nmax_iter : le nombre maximal d'iterations\nTol_abs : la tolérence absolue\nTol_rel : la tolérence relative\n\nSorties:\n\nxmin : (Array{Float,1}) une approximation de la solution du problème : min_x in mathbbR^n f(x)\nf_min : (Float) f(x_min)\nflag : (Integer) indique le critère sur lequel le programme à arrêter\n0 : Convergence\n1 : stagnation du xk\n2 : stagnation du f\n3 : nombre maximal d'itération dépassé\nnb_iters : (Integer) le nombre d'itérations faites par le programme\n\nExemple d'appel\n\nusing Optinum\nf(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2\ngradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]\nhessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]\nx0 = [1; 0]\noptions = []\nxmin,f_min,flag,nb_iters = Algorithme_De_Newton(f,gradf,hessf,x0,options)\n\n\n\n","category":"method"},{"location":"fct_index.html#Optinum.Gradient_Conjugue_Tronque-Tuple{Any,Any,Any}","page":"Index des fonctions","title":"Optinum.Gradient_Conjugue_Tronque","text":"Minimise le problème : min_s delta_k q_k(s) = s^tg + (12)s^tHs pour la k^ème itération de l'algorithme des régions de confiance\n\nSyntaxe\n\nsk = Gradient_Conjugue_Tronque(fk,gradfk,hessfk,option)\n\nEntrées :\n\ngradfk : (Array{Float,1}) le gradient de la fonction f appliqué au point xk\nhessfk : (Array{Float,2}) la Hessienne de la fonction f appliqué au point xk\noptions : (Array{Float,1})\ndelta : le rayon de la région de confiance\nmax_iter : le nombre maximal d'iterations\ntol : la tolérance pour la condition d'arrêt sur le gradient\n\nSorties:\n\ns : (Array{Float,1}) le pas s qui approche la solution du problème : min_s delta_k q(s)\n\nExemple d'appel:\n\ngradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]\nhessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]\nxk = [1; 0]\noptions = []\ns = Gradient_Conjugue_Tronque(gradf(xk),hessf(xk),options)\n\n\n\n","category":"method"},{"location":"fct_index.html#Optinum.Lagrangien_Augmente-Tuple{Any,Function,Function,Function,Function,Function,Function,Any,Any}","page":"Index des fonctions","title":"Optinum.Lagrangien_Augmente","text":"Résolution des problèmes de minimisation sous contraintes d'égalités\n\nSyntaxe\n\nLagrangien_Augmente(algo,fonc,contrainte,gradfonc,hessfonc,grad_contrainte,\n\t\t\thess_contrainte,x0,options)\n\nEntrées\n\nalgo \t\t : (String) l'algorithme sans contraintes à utiliser:\n\"newton\" : pour l'algorithme de Newton\n\"cauchy\" : pour le pas de Cauchy\n\"gct\" : pour le gradient conjugué tronqué\nfonc \t\t : (Function) la fonction à minimiser\ncontrainte\t : (Function) la contrainte [x est dans le domaine des contraintes ssi c(x)=0]\ngradfonc : (Function) le gradient de la fonction\nhessfonc \t : (Function) la hessienne de la fonction\ngrad_contrainte : (Function) le gradient de la contrainte\nhess_contrainte : (Function) la hessienne de la contrainte\nx0 \t\t\t : (Array{Float,1}) la première composante du point de départ du Lagrangien\noptions\t\t : (Array{Float,1})\nepsilon \t : utilisé dans les critères d'arrêt\ntol : la tolérance utilisée dans les critères d'arrêt\nitermax \t : nombre maximal d'itération dans la boucle principale\nlambda0\t : la deuxième composante du point de départ du Lagrangien\nmu0,tho \t : valeurs initiales des variables de l'algorithme\n\nSorties\n\nxmin\t\t : (Array{Float,1}) une approximation de la solution du problème avec contraintes\nfxmin \t : (Float) f(x_min)\nflag\t\t : (Integer) indicateur du déroulement de l'algorithme\n0 : convergence\n1 : nombre maximal d'itération atteint\n(-1) : une erreur s'est produite\nniters \t : (Integer) nombre d'itérations réalisées\n\nExemple d'appel\n\nusing LinearAlgebra\nf(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2\ngradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]\nhessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]\nalgo = \"gct\" # ou newton|gct\nx0 = [1; 0]\noptions = []\ncontrainte(x) = (x[1]^2) + (x[2]^2) -1.5\ngrad_contrainte(x) = [2*x[1] ;2*x[2]]\nhess_contrainte(x) = [2 0;0 2]\noutput = Lagrangien_Augmente(algo,f,contrainte,gradf,hessf,grad_contrainte,hess_contrainte,x0,options)\n\n\n\n","category":"method"},{"location":"fct_index.html#Optinum.Pas_De_Cauchy-Tuple{Any,Any,Any}","page":"Index des fonctions","title":"Optinum.Pas_De_Cauchy","text":"Approximation de la solution du sous-problème q_k(s) = s^tg + (12)s^tHs avec s=-t g_kt 0s delta_k\n\nSyntaxe\n\ns1, e1 = Pas_De_Cauchy(gradient,Hessienne,delta)\n\nEntrées\n\ngradfk : (Array{Float,1}) le gradient de la fonction f appliqué au point x_k\nhessfk : (Array{Float,2}) la Hessienne de la fonction f appliqué au point x_k\ndelta : (Float) le rayon de la région de confiance\n\nSorties\n\ns : (Array{Float,1}) une approximation de la solution du sous-problème\ne : (Integer) indice indiquant l'état de sortie: si g != 0 si on ne sature pas la boule e <- 1 sinon e <- -1 sinon e <- 0\n\nExemple d'appel\n\ng1 = [0; 0]\nH1 = [7 0 ; 0 2]\ndelta1 = 1\ns1, e1 = Pas_De_Cauchy(g1,H1,delta1)\n\n\n\n","category":"method"},{"location":"fct_index.html#Optinum.Regions_De_Confiance-Tuple{Any,Function,Function,Function,Any,Any}","page":"Index des fonctions","title":"Optinum.Regions_De_Confiance","text":"Minimise une fonction en utilisant l'algorithme des régions de confiance avec - le pas de Cauchy ou - le pas issu de l'algorithme du gradient conjugue tronqué\n\nSyntaxe\n\nxk, nb_iters, f(xk), flag = Regions_De_Confiance(algo,f,gradf,hessf,x0,option)\n\nEntrées :\n\nalgo : (String) string indicant la méthode à utiliser pour calculer le pas\n\"gct\" : pour l'algorithme du gradient conjugué tronqué\n\"cauchy\": pour le pas de Cauchy\nf : (Function) la fonction à minimiser\ngradf : (Function) le gradient de la fonction f\nhessf : (Function) la hessiene de la fonction à minimiser\nx0 : (Array{Float,1}) point de départ\noptions : (Array{Float,1})\ndeltaMax : utile pour les m-à-j de la région de confiance R_k=leftx_k+s s leq Delta_kright\ngamma1,gamma2 : 0 gamma_1 1 gamma_2 pour les m-à-j de R_k\neta1,eta2 : 0 eta_1 eta_2 1 pour les m-à-j de R_k\ndelta0 : le rayon de départ de la région de confiance\nmax_iter : le nombre maximale d'iterations\nTol_abs : la tolérence absolue\nTol_rel : la tolérence relative\n\nSorties:\n\nxmin : (Array{Float,1}) une approximation de la solution du problème : min_x in mathbbR^n f(x)\nfxmin : (Float) f(x_min)\nflag : (Integer) un entier indiquant le critère sur lequel le programme à arrêter\n0 : Convergence\n1 : stagnation du x\n2 : stagnation du f\n3 : nombre maximal d'itération dépassé\nnb_iters : (Integer)le nombre d'iteration qu'à fait le programme\n\nExemple d'appel\n\nalgo=\"gct\"\nf(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2\ngradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]\nhessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]\nx0 = [1; 0]\noptions = []\nxmin, fxmin, flag,nb_iters = Regions_De_Confiance(algo,f,gradf,hessf,x0,options)\n\n\n\n","category":"method"},{"location":"create_package.html#Créer-un-Module-en-Julia-1","page":"-","title":"Créer un Module en Julia","text":"","category":"section"},{"location":"create_package.html#","page":"-","title":"-","text":"Pour générer un nouveau module :","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"julia>]\npkg> generate Module\njulia>;\nshell>cd Module/","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"deux fichiers seront crées : Project.toml qui contient le nom du package, son UUID unique, sa version, l'auteur et les éventuelles dépendances et le fichier src/Module.jl qui contient :","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"module Module\n\ngreet() = print(\"Hello World!\")\n\nend # module","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"ensuite vous pouvez activer le module pour pouvoir l'utiliser en faisant :","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"pkg> activate .\njulia> import Module\n\njulia> Module.greet()\nHello World!","category":"page"},{"location":"create_package.html#Ajout-des-dépendances-au-Module-1","page":"-","title":"Ajout des dépendances au Module","text":"","category":"section"},{"location":"create_package.html#","page":"-","title":"-","text":"Pour ajouter des dépendances au Module (les packages utilisés dans le Module):","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"pkg> add Module1 Module2\n Resolving package versions...\n Updating \"/Module/Project.toml\"\n + ...\n + ...","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"les dépendances résultantes sont ajoutées au fichier Manifest.toml","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"voici un exemple de fichier Project.toml:","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"name = \"Module\"\nuuid = \"d9fbbd2f-b07c-4129-9383-1eb96f1f244d\"\nauthors = [<nom & adresse mail>]\nversion = \"0.1.0\"\n\n[deps]\nLinearAlgebra = \"37e2e46d-f89d-539d-b4ee-838fcccc9c8e\"\nMarkdown = \"d6f4376e-aef5-505a-96c1-9c027394607a\"\nTest = \"8dfed614-e22c-5e08-85e1-65c5234f0b40\"\n","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"maintenant on peut faire une mise à jour du fichier src/Module.jl:","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"module Module\n\nimport Module1\nimport Module2\n\ngreet() = print(\"Hello World!\")\n\nend # module","category":"page"},{"location":"create_package.html#Ajouter-des-tests-1","page":"-","title":"Ajouter des tests","text":"","category":"section"},{"location":"create_package.html#","page":"-","title":"-","text":"les tests à réaliser doivent être inclus dans le fichier test/runtests.jl une fois fait, on peut lancer les tests : ","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"(Module) pkg> test\n Testing Module\n Resolving package versions...\n...\n Testing Module tests passed","category":"page"},{"location":"create_package.html#Ajouter-des-dépendances-spécifiques-aux-tests-1","page":"-","title":"Ajouter des dépendances spécifiques aux tests","text":"","category":"section"},{"location":"create_package.html#","page":"-","title":"-","text":"pour ajouter des dépendances spécifiques aux tests (ou à la génération de la documentation) il faut activer l'environnement test/ et ajouter les modules utilisés:","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"(Module) pkg> activate ./test\n[ Info: activating environment at `/Module/test/Project.toml`.\n(test) pkg> add Module3\n Resolving package versions...\n Updating `/Module/test/Project.toml`\n [8dfed614] + Module3\n Updating `/Module/test/Manifest.toml`\n [...]","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"comme pour l'environnement principal les dépendances sont ajoutées dans un fichier test/Manifest.toml.","category":"page"},{"location":"create_package.html#","page":"-","title":"-","text":"Consultez cette page savoir plus sur la création des packages en Julia.","category":"page"},{"location":"Precompilation.html#Intérêt-1","page":"-","title":"Intérêt","text":"","category":"section"},{"location":"Precompilation.html#","page":"-","title":"-","text":"L'utilisation des fonctions des modules, sans avoir accès aux modules ni faire des using, à partir d'un fichier binaire qui contient des versions précompilées de ces modules.","category":"page"},{"location":"Precompilation.html#Génération-du-fichier-binaire-1","page":"-","title":"Génération du fichier binaire","text":"","category":"section"},{"location":"Precompilation.html#Ajout-du-PackageCompiler-en-local-1","page":"-","title":"Ajout du PackageCompiler en local","text":"","category":"section"},{"location":"Precompilation.html#","page":"-","title":"-","text":"~$ julia","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"julia > ]\n(v1.4) pkg> add PackageCompiler","category":"page"},{"location":"Precompilation.html#Création-d'un-nouvel-environnement-et-ajout-des-modules-à-compiler-1","page":"-","title":"Création d'un nouvel environnement et ajout des modules à compiler","text":"","category":"section"},{"location":"Precompilation.html#","page":"-","title":"-","text":"Dans un dossier NouveauEnv je crée un nouvel environnement julia","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"~$ mkdir NouveauEnv\n~$ cd NouveauEnv\n~$ julia","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"julia> ]\npkg> activate .\n(NouveauEnv) pkg> add https://github.com/mathn7/TestOptinum.git\n(NouveauEnv) pkg> add https://github.com/mathn7/optinum.git\n(NouveauEnv) pkg> add LinearAlgebra #je rajoute autant que je veux des modules","category":"page"},{"location":"Precompilation.html#Génération-du-fichier-binaire-2","page":"-","title":"Génération du fichier binaire","text":"","category":"section"},{"location":"Precompilation.html#","page":"-","title":"-","text":"Avant de procéder à la génération du fichier binaire il faut créer un fichier julia (dans le dossier NouveauEnv) qui utilise les modules pour pouvoir exporter les fonctions. Le contenu de (NouveauEnv/Exemple.jl) sera : ","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"~/NouveauEnv\n❯ cat Exemple.jl\nusing LinearAlgebra ;using TestOptinum;using Optinum;","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"~$julia","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"julia> ]\npkg> activate .\n(NouveauEnv) pkg>\njulia> using PackageCompiler\njulia> PackageCompiler.create_sysimage([:LinearAlgebra , :TestOptinum ,:Optinum]; sysimage_path=\"ExamplePrecompile.so\",\n precompile_execution_file=\"Exemple.jl\")","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"les paramètres de la fonction create_sysimage, utilisés sont :","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"premier paramètre : liste des modules à compiler (dans notre exemple : LinearAlgebra,TestOptinum,Optinum)","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"deuxième paramètre (sysimage_path) : nom du fichier binaire à générer (on peut spécifier le chemin également)","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"troisième paramètre (precompile_execution_file) : nom du fichier à compiler","category":"page"},{"location":"Precompilation.html#Utilisation-du-fichier-binaire-1","page":"-","title":"Utilisation du fichier binaire","text":"","category":"section"},{"location":"Precompilation.html#","page":"-","title":"-","text":"Après la génération du fichier binaire ExamplePrecompile.so on peut utiliser les fonctions précompilées (qui se trouvaient dans Exemple.jl) sans faire des using","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"~$julia -q -JExamplePrecompile.so","category":"page"},{"location":"Precompilation.html#","page":"-","title":"-","text":"julia> LinearAlgebra.norm([4 5],2)\n6.4031242374328485\n\njulia>TestOptinum.tester_algo_newton(true,Optinum.Algorithme_De_Newton)\nTest Summary: | Pass Total\nL'algo de Newton | 4 4\n","category":"page"},{"location":"Exemples.html#Exemples-d'appels-1","page":"-","title":"Exemples d'appels","text":"","category":"section"},{"location":"Exemples.html#","page":"-","title":"-","text":"Dans les exemples suivants appliqués sur les fonctions :","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"Algorithme_De_Newton\nPas_De_Cauchy\nGradient_Conjugue_Tronque\nRegions_De_Confiance\nLagrangien_Augmente","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"nous allons utiliser la fonction suivante : beginalignedhspace*15cm f mathbbR^2 quad rightarrow mathbbR hspace*15cm left(x_1 x_2right) rightarrow 100left(x_2-x_1^2right)^2+left(1-x_1right)^2 endaligned dont le gradient est : hspace*05cm nabla f(x) = leftbeginarrayl -400 x_1(x_2-x_1^2)-2(1-x_1) 200 (x_2-x_1^2) endarrayright^T et la hessienne est : hspace*05cm nabla^2 f(x) = left beginarraycc -400 (x_2-3 x_1^2)+2 -400 x_1 -400 x_1 200 endarrayright","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"using OptinumProf\nusing LinearAlgebra\nusing Plots","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"Voici la fonction f","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2\nx, y = -1.5:0.1:1, -2:0.1:3.5\nz = Plots.Surface((x,y)->f([x,y]), x, y)\nPlots.surface(x,y,z,camera=(85,43))","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"Ici on trace la norme de nabla f","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]\nz = Plots.Surface((x,y)->norm(gradf([x,y])), x, y)\nPlots.surface(x,y,z,camera=(85,43))","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"Et nabla^2 f","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]\noptions = []\nnothing # masquer la sortie","category":"page"},{"location":"Exemples.html#L'Algorithme-de-Newton-1","page":"-","title":"L'Algorithme de Newton","text":"","category":"section"},{"location":"Exemples.html#","page":"-","title":"-","text":"x0 = [1; 0]\noutput = Algorithme_De_Newton(f,gradf,hessf,x0,options)\nprintln(output) # (xmin,f_min,flag,nb_iters)","category":"page"},{"location":"Exemples.html#Le-pas-de-Cauchy-1","page":"-","title":"Le pas de Cauchy","text":"","category":"section"},{"location":"Exemples.html#","page":"-","title":"-","text":"xk = [0; 0.5]\ndelta1 = 1\noutput = Pas_De_Cauchy(gradf(xk),hessf(xk),delta1)\nprintln(output) # (sk, e)","category":"page"},{"location":"Exemples.html#Algorithme-du-Gradient-Conjugué-Tronqué-1","page":"-","title":"Algorithme du Gradient Conjugué Tronqué","text":"","category":"section"},{"location":"Exemples.html#","page":"-","title":"-","text":"# deltak = options[1]\n# max_iter = options[2]\n# tol = options[3]\noptions = [1,5,1e-3]\nxk = [0; 0.5]\nsk = Gradient_Conjugue_Tronque(gradf(xk),hessf(xk),options)\nprintln(sk)","category":"page"},{"location":"Exemples.html#L'Algorithme-des-régions-de-confiance-1","page":"-","title":"L'Algorithme des régions de confiance","text":"","category":"section"},{"location":"Exemples.html#","page":"-","title":"-","text":"algo=\"gct\" # ou cauchy\nx0 = [1; 0]\noptions = []\noutput = Regions_De_Confiance(algo,f,gradf,hessf,x0,options)\nprintln(output) # (xmin, fxmin, flag,nb_iters)","category":"page"},{"location":"Exemples.html#Algorithme-du-Lagrangien-augmenté-pour-contraintes-d’égalité-1","page":"-","title":"Algorithme du Lagrangien augmenté pour contraintes d’égalité","text":"","category":"section"},{"location":"Exemples.html#","page":"-","title":"-","text":"Dans cet exemple nous allons prendre la contrainte suivante : c(x) = x_1^2 + x_2^2 -15 = 0 dont le gradient est : hspace*05cm leftbeginarrayl 2x_1 2 x_2 endarrayright^T et la hessienne est :hspace*05cm left beginarraycc 2 0 0 2 endarrayright","category":"page"},{"location":"Exemples.html#","page":"-","title":"-","text":"algo = \"gct\" # ou newton|gct\noptions = []\ncontrainte(x) = (x[1]^2) + (x[2]^2) -1.5\ngrad_contrainte(x) = [2*x[1] ;2*x[2]]\nhess_contrainte(x) = [2 0;0 2]\noutput = Lagrangien_Augmente(algo,f,contrainte,gradf,hessf,grad_contrainte,hess_contrainte,x0,options)\nprintln(output) # (xmin1,fxmin1,flag,nbiters)","category":"page"},{"location":"Questions_Newton.html#Travail-à-réaliser-Pour-l'algorithme-de-Newton-1","page":"-","title":"Travail à réaliser Pour l'algorithme de Newton","text":"","category":"section"},{"location":"Questions_Newton.html#Implémentation-1","page":"-","title":"Implémentation","text":"","category":"section"},{"location":"Questions_Newton.html#","page":"-","title":"-","text":"Coder l’algorithme de Newton local tel que décrit dans la section Algorithme de Newton\nTester l’algorithme sur les fonctions f_1 , f_2 avec les points initiaux x_011 , x_012 (pour f_1 ) et x_021 , x_022 , x_023 (pour f_2 ) donnés en Annexe A.","category":"page"},{"location":"Questions_Newton.html#Interprétation-1","page":"-","title":"Interprétation","text":"","category":"section"},{"location":"Questions_Newton.html#","page":"-","title":"-","text":"justifier que","category":"page"},{"location":"Questions_Newton.html#","page":"-","title":"-","text":"l’algorithme implémenté converge en une itération pour f_1;\nl’algorithme puisse ne pas converger pour f_2 avec certains points initiaux.","category":"page"},{"location":"Algorithme_de_newton.html#Algorithme-de-Newton-local-1","page":"L'algorithme de Newton local","title":"Algorithme de Newton local","text":"","category":"section"},{"location":"Algorithme_de_newton.html#Principe-1","page":"L'algorithme de Newton local","title":"Principe","text":"","category":"section"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"La fonction f étant C^2 , on peut remplacer f au voisinage de l’itéré courant x_k par son développement de Taylor au second ordre, soit :","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"f(y) sim q(y)=fleft(x_kright)+nabla fleft(x_kright)^Tleft(y-x_kright)+frac12left(y-x_kright)^T nabla^2 fleft(x_kright)left(y-x_kright)","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"On choisit alors comme point x_k+1 le minimum de la quadratique q lorsqu’il existe et est unique, ce qui n’est le cas que si nabla^2 f (x) est définie positive. Or le minimum de q est réalisé par x_k+1 solution de : nabla q (x_k+1) = 0 , soit : nabla fleft(x_kright)+nabla^2 fleft(x_kright)left(x_k+1-x_kright)=0","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"ou encore, en supposant que nabla^2 f (x_k) est définie positive :","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"x_k+1=x_k-nabla^2 fleft(x_kright)^-1 nabla fleft(x_kright)","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"La méthode ne doit cependant jamais être appliquée en utilisant une inversion de la matrice Hessienne (qui peut être de très grande taille et mal conditionnée), mais plutôt en utilisant :","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"x_k+1=x_k+d_k où d_k est l’unique solution du système linéaire :","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"nabla^2 fleft(x_kright) d_k=-nabla fleft(x_kright) , d_k étant appelée direction de Newton.","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"Cette méthode est bien définie si à chaque itération, la matrice hessienne nabla^2 f (x_k) est définie positive : ceci est vrai en particulier au voisinage de la solution x^*_k cherchée si on suppose que nabla^2 f (x^*) est définie positive (par continuité de nabla^2 f).","category":"page"},{"location":"Algorithme_de_newton.html#Algorithme-1","page":"L'algorithme de Newton local","title":"Algorithme","text":"","category":"section"},{"location":"Algorithme_de_newton.html#Données:-1","page":"L'algorithme de Newton local","title":"Données:","text":"","category":"section"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"f x_0 première approximation de la solution cherchée, epsilon 0 précision demandée.","category":"page"},{"location":"Algorithme_de_newton.html#Sorties-1","page":"L'algorithme de Newton local","title":"Sorties","text":"","category":"section"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"une approximation de la solution du problème min _x in mathbbR^n f(x) .","category":"page"},{"location":"Algorithme_de_newton.html#.Tant-que-le-test-de-convergence-est-non-satisfait-1","page":"L'algorithme de Newton local","title":"1.Tant que le test de convergence est non satisfait","text":"","category":"section"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"a. Calculer d_k solution du système : nabla^2 f (x_k) d_k = - nabla f (x_k)","category":"page"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"b. Mise à jour : x_k+1 = x_k+ d_k k = k + 1","category":"page"},{"location":"Algorithme_de_newton.html#.Retourner-:-x_{k}.-1","page":"L'algorithme de Newton local","title":"2.Retourner : x_k.","text":"","category":"section"},{"location":"Algorithme_de_newton.html#Tests-de-convergence-1","page":"L'algorithme de Newton local","title":"Tests de convergence","text":"","category":"section"},{"location":"Algorithme_de_newton.html#","page":"L'algorithme de Newton local","title":"L'algorithme de Newton local","text":"Convergence, nabla f(x^(k+1)) petit nabla f(x^(k+1)) leq max(textttTol_relnabla f(x^(0))textttTol_abs)\nStagnation de x_k, d^(k)=x^(k+1)-x^(k) petit : x^(k+1)-x^(k) leq max(textttTol_relx^(k)textttTol_abs)\nStagnation de f : f(x^(k+1)) - f(x^(k)) leq max(textttTol_relf(x^(k))textttTol_abs)\nLe nombre d'itération maximal est atteint.","category":"page"},{"location":"Lagrangien_augmente.html#Principe-1","page":"La méthode du Lagrangien augmenté","title":"Principe","text":"","category":"section"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"La méthode du lagrangien augmenté appartient à une classe d'algorithme qui permettent la résolution des problèmes avec contraintes. Elle s'apparente aux méthodes de pénalisation, dans lesquelles on résout le problème avec contraintes à travers une suite de problèmes sans contraintes.","category":"page"},{"location":"Lagrangien_augmente.html#Algorithme-du-Lagrangien-augmenté-pour-contraintes-d'égalité-1","page":"La méthode du Lagrangien augmenté","title":"Algorithme du Lagrangien augmenté pour contraintes d'égalité","text":"","category":"section"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"On s'intéresse ici au cas où l'ensemble C est défini par un ensemble des contraintes d'égalités. Le problème se met ainsi sous la forme :","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"min _c(x) = 0 x in mathbbR^n f(x)","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"où c mathbbR^n rightarrow mathbbR^m. L'algorithme suivant est obtenu de Bierlaire, Introduction à l'optimisation différentiable.","category":"page"},{"location":"Lagrangien_augmente.html#Données-:-1","page":"La méthode du Lagrangien augmenté","title":"Données :","text":"","category":"section"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"mu_0 0 tau 0 hateta_0=01258925^1 alpha=01 beta=09 epsilon_0=1mu_0 eta_0=hateta_0 mu_0^alpha , et un point de départ du Lagrangien (x_0lambda_0). On pose k = 0","category":"page"},{"location":"Lagrangien_augmente.html#Sorties-:-1","page":"La méthode du Lagrangien augmenté","title":"Sorties :","text":"","category":"section"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"une approximation de la solution du problème avec contraintes.","category":"page"},{"location":"Lagrangien_augmente.html#.-Tant-qu'il-n'y-a-pas-convergence,-répéter-1","page":"La méthode du Lagrangien augmenté","title":"1. Tant qu'il n'y a pas convergence, répéter","text":"","category":"section"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"a. Calculer approximation un minimiseur x_k+1 du problème sans contraintes suivant :","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"min _x in mathbbR^n L_Aleft(x lambda_k mu_kright)=f(x)+lambda_k^T c(x)+fracmu_k2c(x)^2","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"avec x_k comme point de départ, en terminant lorsque nabla_x L_Aleft(x lambda_k mu_kright) leq epsilon_k. Si convergence de l'algorithme global, s'arrêter , sinon aller en b","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"b. Si c(x_k+1) leq eta_k, mettre à jour (entre autres) les multiplicateurs :","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"leftbeginarrayllambda_k+1=lambda_k+mu_k cleft(x_k+1right) mu_k+1=mu_k epsilon_k+1=epsilon_k mu_k eta_k+1=eta_k mu_k^beta k=k+1endarrayright","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"c. Autrement, mettre à jour (entre autres) le paramétre de pénalité :","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"leftbeginarrayllambda_k+1 =lambda_k mu_k+1 =tau mu_k epsilon_k+1 =epsilon_0 mu_k+1 eta_k+1 =hateta_0 mu_k+1^alpha k=k+1endarrayright","category":"page"},{"location":"Lagrangien_augmente.html#.-Retourner-x_{k},\\lambda_{k},\\mu_{k}-.-1","page":"La méthode du Lagrangien augmenté","title":"2. Retourner x_klambda_kmu_k .","text":"","category":"section"},{"location":"Lagrangien_augmente.html#Critère-de-convergence-global-1","page":"La méthode du Lagrangien augmenté","title":"3 Critère de convergence global","text":"","category":"section"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"( nabla_x L_Aleft(x_x lambda_k 0 right) leq max(Tol_rel nabla_x L_Aleft(x_0 lambda_0 0right) Tol_abs)) et (c(x_k)leq max(Tol_relc(x_0)Tol_abs))","category":"page"},{"location":"Lagrangien_augmente.html#","page":"La méthode du Lagrangien augmenté","title":"La méthode du Lagrangien augmenté","text":"[1] : Pour que eta_0=01.","category":"page"},{"location":"index.html#Optinum-Méthodes-numériques-pour-les-problèmes-d’optimisation-1","page":"Accueil","title":"Optinum - Méthodes numériques pour les problèmes d’optimisation","text":"","category":"section"},{"location":"index.html#Rendu-1","page":"Accueil","title":"Rendu","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Le projet est à rendre sous Moodle le vendredi 17 décembre à 18h00. Vous rendrez un fichier compressé nom du binome .tgz qui déarchivez contiendra un répertoire votre nom qui lui-même contiendra vos répertoire Optinum et TestOptinum. Votre notebook doit se trouver dans le sous répertoire Optinum/src.","category":"page"},{"location":"index.html#Instalation-de-julia-et-jupyter-notebook-sur-vos-machines-1","page":"Accueil","title":"Instalation de julia et jupyter notebook sur vos machines","text":"","category":"section"},{"location":"index.html#Introduction-1","page":"Accueil","title":"Introduction","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Dans les salles de TP, julia et jupyter sont déjà installés. ","category":"page"},{"location":"index.html#Installation-de-julia-1","page":"Accueil","title":"Installation de julia","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Remarque : Il vaut mieux désinstaller, julia, atom, juno, conda et les packages associés si vous avez déjà fait des installations.","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Pour installer julia sur Windows, MacOS ou Linux, le plus simple est de se rendre dans julialang.org dans la section des téléchargements. Vous pouvez télécharger juliaPro (julia+atom+juno).","category":"page"},{"location":"index.html#Installation-du-package-IJulia-et-lancement-d'un-notebook,-version-Linux-et-MacOS-1","page":"Accueil","title":"Installation du package IJulia et lancement d'un notebook, version Linux et MacOS","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Lancer julia\nDans la fenêtre ce commande taper le caractère ], cela fait passer julia dans le mode gestion des packages et de l'environnenment (v1.4 car sur ma machine c'est la version 1.4 de julia). ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"(@v1.4) pkg> add IJulia","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Revenir en mode commande : taper la touche backspace\nCe mettre dans un répertoire au dessus du répertoire Optinum dans lequel il y a un notebbok et lancer notebook ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"julia> notebook()","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Cela devrait fonctionner.","category":"page"},{"location":"index.html#Installation-du-package-IJulia-et-lancement-d'un-notebook,-version-windows-1","page":"Accueil","title":"Installation du package IJulia et lancement d'un notebook, version windows","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Pour windows il faut considérer l'installation de Anaconda complet. Depuis le navigateur anaconda, on peut alors invoquer un jupyter_lab, et associer le kernel julia 1.5.2 associé à l'installation de julia-pro, et ensuite ouvrir n'importe quel fichier \"ipynb\".","category":"page"},{"location":"index.html#Les-projets-en-julia-1","page":"Accueil","title":"Les projets en julia","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Le package Optinum concerne le projet d’Optimisation Numérique pour l’année 2020-2021 de l'École INP-ENSEEIHT. Pour récupérer le répertoire Optinum et toute la structuration il vous faut cloner ce dépot GitHub. Pour cela, ouvrer une fenêtre de commande et cloner ce dépot (il faut que git soit installé sur votre machine) : ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"git clone https://github.com/mathn7/Optinum.git","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Ce répertoire est un Projet julia, c'est-à-dire un ensemble de fichiers organisés de la façon suivante : ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Un fichier Project.toml. C'est l'existence de ce fichier qui signale que l'ensemble des fichiers du répertoire définit un projet julia. Ce fichier contient des méta-données importantes sur le projet : \nun nom : name = \"Optinum\"\nun identifiant : uuid = \"289cfbba-6966-46b0-8dde-953cd55d6e8f\"\nles auteurs : authors = [\"relmo <rachid.elmontassir@etu.enseeiht.fr>\"]\nun numero de version : version = \"0.1.0\"\nune liste de packages externes que le projet peut utiliser\nUn fichier Manifest.tomlqui est optionnel et qui contient des versions de chacune des dépendances listées dans Project.toml\nun fichier src/Optinum.jlqui est le fichier qui sera chargé par l'instruction using si le projet est utilisé comme dépendance d'un autre projet (ce qui n'est pas le cas ici).\nun répertoire src qui contient les sources julia\nun répertoire docs pour générer la documentation\nun répertoire testpour les tests unitaires\nun fichier Markdown README.md qui contient ce qui sera affiché sous un gestionaire du type GitHub.","category":"page"},{"location":"index.html#Soucis-d'installation-1","page":"Accueil","title":"Soucis d'installation","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Sous linux après installation du package IJulia losque vous lancer un notebook situé dans Optinum, jupyter notebook va automatiquement se mettre dans l'environnement d'Optinum. Le soucis est que dans cet environnement vous n'avez pas les bonnes versions des packages. Afin d'avoir ces bonnes versions il vous faut dans la fenêtre de commande julia lancé à partir du répertoire Optinum : ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"passez dans le mode gestion des packages et de l'envirronenment (touche ])\nactiver l'environnement Optinum ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"(@v1.4) pkg> activate .","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"installer les dépendances avec les bonnes versions ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"(Optinum) pkg> instantiate","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Ensuite cela devrait fonctionner et avec le notebook, il est inutile d'installer Mardown, ... car cela est déjà dans l'environnement. Ceci n'est à effectuer qu'une seule fois. Par contre si dans la fenêtre de commande de julia vous exécuter le fichier test-TP-Projet-Optinum.jl et que vous êtes dans l'envirronement général, il vous faut installer les packages nécessaires, mais si vous vous placez dans l'envirronement d'Optinum, cela devrait être ok.","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Remarque : pour voir sous un notebook dans quel environnement vous êtes, vous pouvez exécuter la commande Pkd.status() : julia> using Pkg julia > Pkg.status() vous obtiendrez la liste des packages installés dans l'environnement. Vous pouvez donc comparer ceci avec la liste obtenu dans la fenêtre de commande de julia avant et après l'activation de l'environnement Optinum.","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Remarque : C'est dans le mode gestion des packages et de l'environnenment : ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"que l'on peut passer dans l'environnement doc qui permet de générer la documentation\nque l'on peut effectuer les tests utitaires.","category":"page"},{"location":"index.html#Fichiers-à-modifier-dans-le-cadre-de-ce-projets-1","page":"Accueil","title":"Fichiers à modifier dans le cadre de ce projets","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Il ne faut en aucun cas modifier la structuration de ce projet, ni les interfaces des fonctions.","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Les fichiers julia que vous aurez à modifier se trouvent ","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"dans le répertoire Optinum/src. Ces fichiers sont : \nTP-Projet-Optinum.ipynb: c'est un julia notebook dans lequel vous ferez toutes vos expérimentations numériques et répondrez aux questions posées. Ce fichier est à ouvrir avec jupyter notebook.\nLes fichiers julia qui codent les algorithmes demandés (voir le notebook).\ndans le répertoire TestOptinum/src pour compléter les tests unitaires.","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Enfin vous avez dans le répertoire Optinum/julia le fichier notebook_Julia.pdf d'introduction à julia et à l'utilisation des notebook et dans le répertoire Optinum/julia/scr-julia les notebook d'introduction au langage julia.","category":"page"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Remarque : vous pouvez travailler sur vos machine, mais vous pouvez aussi travailler sur les machines de l'enseeiht (en utilisant x2go ou ssh). Pour cela il vous faut exécuter le script /usr/local/bin/install_ijulia","category":"page"},{"location":"index.html#Organisation-1","page":"Accueil","title":"Organisation","text":"","category":"section"},{"location":"index.html#","page":"Accueil","title":"Accueil","text":"Le projet d'optimisation numérique est un projet individuel.","category":"page"},{"location":"index.html#Auteurs-:-O.Cots,-J.-Gergaud,-S.-Gratton,-P.-Matalon,-C.-Royer,-D.-Ruiz-et-E.-Simon-1","page":"Accueil","title":"Auteurs : O.Cots, J. Gergaud, S. Gratton, P. Matalon, C. Royer, D. Ruiz et E. Simon","text":"","category":"section"}]
|
||
}
|