Bonsoir à tous,
L'an prochain je devrais avoir du Python, et je souhaitais commencer à prendre un peu mes marques dessus, mais ça m'a l'air très complexe ![]()
Du coup, n'y aurait-il pas quelqu'un qui aurait un lien vers un petit résumé de python, notamment pour l'optimisation et le traçage de graphes de fonction ![]()
Merci à vous!
Pour du calcul scientifique je recommanderais d'installer Anaconda: c'est un package qui permet d'installer un seul truc facilement pour avoir une bonne distribution de python, les bibliotheques scientifiques les plus classiques, et d'avoir un editeur cool (Spyder, tres pratique pour le calcul scientifique).
https://www.anaconda.com/distribution/ (choisi la version de python 3.7, la version 2 est depreciee ... sauf si tu sais es sur que ton cours l'annee prochaine va utiliser python 2)
Les bibliotheque la plus classique pour tracer des trucs c'est matplotlib: https://matplotlib.org/
Pour manipuler des donnees comme vecteurs/matrices, numpy: https://numpy.org/
Pour l'optim, scipy: https://docs.scipy.org/do/doc/scipy/reference/#tutorial https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html
Les trois sont installees par defaut avec Anaconda
Si tu as de l'experience en programmation ca n'est pas un langage tres complique non, en particulier il est interprete et pas compile; ce qui simplifie beaucoup les choses. Si non bah tu vas decouvrir
En chercher "tutorial python 3" sur google tu devrais trouver des trucs corrects qui commencent par les vraies bases...
Je suis sur le Jupyter Notebook, je dois quand même installer Anaconda?
Ouais justement j'ai import scipy, j'ai essayé d'optimiser des fonctions à 2 variables (facilement résolvables à la main) et je me tapais un message d'erreur à chaque fois ![]()
Ok je vais check ça, et j'ai fait que du R et du Latex, python m'a l'air totalement différent bordel ![]()
Merci bcp!
Connais pas R
Mais j'imagine que ca devrait pas etre trop complique de faire la transition.
Je conseillerais d'installer Anaconda quand meme oui, ca permet d'avoir un truc clean avec tout deja bien prepare. Et tu peux meme utiliser jupyter notebook dans Spyder, donc passer tres facilement de la programmation classique au notebook (le notebook c'est cool mais pas forcement pour tout, des fois on va preferer coder normalement)
Genre ca c'est mon truc maintenant (rien d'interessant, juste pour que tu vois l'interface)
et ca prend 2 s d'ouvrir un notebook dans la meme fenetre 
Notebook de souvenir c'est pas ouf pour sauvegarder certains trucs, éxécuter certains programmes ou importer certains modules
Y'a pyzo aussi comme interpréteur python c'est facile à utiliser je l'ai utilisé pendant des anées ![]()
Python est vraiment un langage "simple" et souvent on le fait apprendre comme 1er langage et introduction à la programmation, c'est assez intuitif je trouve et la synthaxe est vraiment intuitive aussi si tu sais parler anglais
Au fur et à mesure que tu gagneras en pratique et en expérience ça ira tkt pas
Commence par apprendre les trucs de bases : les différentes structures de données (tuple, liste...), les types (entiers, flottants, booléens..), les boucles, les conditions (if, else, while, for...) . Tu devrais trouver plein de ressources sur internet
Go openclassroom il y a de bons cours dessus et c'est plutôt bien fait. ![]()
Merci beaucoup à tous ![]()
Blue : l'interface me paraît bien plus familière que les Notebook donc je télécharge ça de suite !
Ok Lelouch, en fait j'ai téléchargé Jupyter car c'est ce que le prof l'an prochain demandera d'installer, mais Spyder a l'air+ intuitif à vue d'œil. Pas de soucis en anglais, ça devrait m'aider du coup
en fait justement, lorsque j'ai vu tout ça sur internet, j'ai un peu zappé pour passer directement à l'optimisation bête et méchante. Mais j'imagine qu'on doit d'abord voir les bases évidemment ![]()
Faurlin : bien vu, j'en ai trouvé aussi Udemy!
Le 15 avril 2020 à 20:35:31 Blue-tamere a écrit :
Connais pas RMais j'imagine que ca devrait pas etre trop complique de faire la transition.
Je conseillerais d'installer Anaconda quand meme oui, ca permet d'avoir un truc clean avec tout deja bien prepare. Et tu peux meme utiliser jupyter notebook dans Spyder, donc passer tres facilement de la programmation classique au notebook (le notebook c'est cool mais pas forcement pour tout, des fois on va preferer coder normalement)Genre ca c'est mon truc maintenant (rien d'interessant, juste pour que tu vois l'interface)
et ca prend 2 s d'ouvrir un notebook dans la meme fenetre
C'est quoi ton thème ? ![]()
c'est dans les trucs de base de spyder 4
interface theme: dark
icon theme: spyder 3
syntax highlighting theme: retta
Bon du coup, j'ai un peu cherché et j'ai réussi à optimiser certaines fonctions, même avec des contraintes ![]()
Toutefois, j'ai un problème avec par exemple cette fonction : $$f(x_1,x_2) = x_1^{4}+x_1^{2}-6x_1 x_2+ 3x_2^{2}$$
Je rentre le code suivant : https://pastebin.com/CX9JcFab
Et ça m'indique une erreur dans la syntaxe. Je ne sais pas trop ce que le "(f,x0=(1,1)) signifie, mais je l'ai croisé dans tous les problèmes d'optimisation. Je l'ai donc bêtement recopié ![]()
En plus, la fonction admet 2 minimums locaux en (-1;-1) ; (1;1) et un point selle en (0;0), ce qui me conforte dans mon idée d'écrire so.minimize ![]()
Autre problème, pour le tracé de graphes, on peut pas directement définir une fonction pour qu'elle soit tracée ![]()
quand je lance ton code j'ai directement une erreur a 6x[0], parce qu'il faut ecrire les multiplications:
x[0]**4+x[0]**2-6*x[0]*x[1]+3*x[1]**2
Pour la seconde question, c'est bien d'apprendre a lire la doc, t'en auras surement besoin.
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
-scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)[source]¶
ca veut dire que fun et x0 sont des arguments qui doivent etre donnees a la fonction. Les autres arguments, ecrit comme "nom=none" ne sont pas obligatoire. Si tu ne les rentrent pas dans la fonction, ils sont initialise a la valeur None.
Donc par exemple tu peux appeler scipy.optimize.minimize(fun, x0), et c'est equivalent a appeller scipy.optimize.minimize(fun, x0, hess=None). Dans ce deuxieme cas on precise qu'on ne donne pas de hessienne, mais c'est deja precise dans la definition de la fonction donc on avait pas besoin de le fairee. Si t'avais une hessienne H a donner, t'ecrirais: scipy.optimize.minimize(fun, x0, hess=H)
Bref, ensuite tu vois plus bas: x0ndarray, shape (n,)
Initial guess. Array of real elements of size (n,), where ‘n’ is the number of independent variables.
donc le deuxieme argument, ton (1,1), c'est de la ou part ton algo d'optimisation.
tu devrais voir que si tu commences pres de (1,1) il converge vers (1,1), alors que si tu commences pres de (-1,-1) il converge vers (-1,-1)
pour les graphs il faut creer une matrice (parce que tu es en 2D) qui a les valeur de ta fonction en certains points, et la representer avec matplotlib
un bon exemple, avec de l'optim en prime
http://scipy-lectures.org/intro/scipy/auto_examples/plot_2d_minimization.html
Merci beaucoup pour les graphes ![]()
Alors j'avais d'abord commencé par mettre les "*" dans mon code, et ça me faisait le même souci ![]()
Ah oui d'accord je comprends mieux les arguments
j'ai de la lecture demain alors ![]()
Grâce à la doc que t'as postée j'ai pu voir qu'on pouvait directement intégrer la contrainte. Je me suis cassé la tête à définir g(x) ![]()
Je reprendrai tout ça à tête reposée quand je serai sur le PC, encore merci à tous ![]()
Le 15 avril 2020 à 20:35:31 Blue-tamere a écrit :
Connais pas RMais j'imagine que ca devrait pas etre trop complique de faire la transition.
Je conseillerais d'installer Anaconda quand meme oui, ca permet d'avoir un truc clean avec tout deja bien prepare. Et tu peux meme utiliser jupyter notebook dans Spyder, donc passer tres facilement de la programmation classique au notebook (le notebook c'est cool mais pas forcement pour tout, des fois on va preferer coder normalement)Genre ca c'est mon truc maintenant (rien d'interessant, juste pour que tu vois l'interface)
et ca prend 2 s d'ouvrir un notebook dans la meme fenetre
Écrire 10**-6 au lieu de 1.0E-06, cette sous-optimalité
![]()
RIP PEP8 ![]()
En quoi c'est plus optimal?
Yo les gars, j'ai pu m'avancer sur mes "leçons" grâce à vous
![]()
Je me suis attaqué aux équations différentielles, et je suis en train de coincer sur la résolution numérique des équations différentielles non linéaires d'ordre 1 ![]()
Notamment cette équation ci : https://ibb.co/Khs1HFL
J'ai bien étudié qualitativement l'équation, mais je n'arrive pas à approximer (il me semble que c'est possible) numériquement via Python ![]()
Merci de votre aide ![]()
Tu peux faire deux choses.
1) Soit coder toi-meme un algorithme de resolution. Tu peux google forward/backward Euler, ce sont les algorithmes les plus simples et qui illustrent la difference entre algorithmes explicites et implicites. Regarde aussi ce que sont les methodes de Runge-Kutta, elles sont tres frequentes.
Si t'as le temps je te recommenderais de coder des petits exemples, et si non regarde quand meme un peu dans les details a quoi ca ressemble, c'est important de savoir ce qui se cache derriere les outils qu'on utilise
2) Comme c'est quelque chose de tres frequent y'a deja des bibliotheques/fonctions optimisees.
https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.integrate.odeint.html
y'a un exemple, ou un autre example ici: https://apmonitor.com/pdc/index.php/Main/SolveDifferentialEquations
Ca sera plus efficace que ce que tu coderas toi meme, mais au moins si t'a suivi 1) tu auras une idee de comment ca marche.
Ah et c'est illustre dans l'exemple, mais c'est important aussi de voir qu'une equation diff d'ordre n sur une variable de dimension 1 peut toujours etre vue comme une equa diff d'ordre 1 sur une variable de n dimensions. C'est pour ca que les solveurs ne s'interessent qu'aux equations d'ordre 1, on peut toujours s'y ramener.
Par exemple si tu as z"+z'+z^2=0, soit d2z/dt2 + dz/dt + z^2 = 0, c'est equivalent a:
dz/dt=z' (c'est une tautologie)
dz'/dt = -z'-z^2
du coup si on defini un vecteur y (en notation python) tel que y[0]=z, y[1]=z', l'equa diff initiale d'ordre 2 est equivalent a:
dy[0]/dt = y[1]
dy[1]/dt = -y[1]-y[0]**2
Ce qui est bien une equa diff d'ordre 1 sur un vecteur de dimension 2, qu'on peut resoudre avec n'importe quel solveur numerique.
J'ai regardé directement les outils optimisés pour, étant donné qu'on n'a pas étudié les différentes méthodes d'approximation (je suis en éco) ![]()
Yes, je le sais qu'on peut toujours se ramener à une EDO d'ordre 1 ![]()
J'ai regardé la vidéo et j'ai lu les codes etc, mais j'ai un problème ![]()
https://pastebin.com/ExKD0znv
Tu demandes au code de resoudre y'(t)=t*(exp(-t)-1/e); i.e. tu calcules la primitive du membre de droite, alors que tu dis vouloir resoudre y'(t)=y(t)*(exp(-y(t))-1/e)
Si tu remplaces les t par des y a la ligne 7 ca devrait faire ce que tu veux