Slides octave1

of 67/67
Introduction ` a Octave Rodolphe Charrier UFRST Universit ´ e du Havre M1 Math-Info MATIS Rodolphe Charrier Introduction ` a Octave
  • date post

    12-Jun-2015
  • Category

    Education

  • view

    238
  • download

    4

Embed Size (px)

Transcript of Slides octave1

  • 1. ` Introduction a Octave Rodolphe CharrierUFRST Universite du Havre M1 Math-Info MATISRodolphe Charrier` Introduction a Octave

2. Apercu et environnement I GNU Octave est le logiciel libre offrant actuellement la meilleure compatibilite avec le logiciel commercial de calcul numerique Matlab. Version 3.2 sous linux Ubuntu (existe aussi sur Mac et Windows). Octave est : un langage interprete converti en P-code (pseudo code Matlab), utilisable en ligne de commande ou par execution de scripts stockes dans des M-les (extension .m), dote de fonctionnalites de haut niveau - developpement rapide. Rodolphe Charrier` Introduction a Octave 3. Apercu et environnement II Octave est un langage de programmation associe une riche collection dalgorithmes numeriques : ` algebre lineaire et matriciel polynomes et fonctions rationnelles interpolation et approximation optimisation lineaire, quadratique et non lineaire EDO / EDP Controle classique et robuste Traitement du signal Statistiques Graphisme 2D/3D ...Rodolphe Charrier` Introduction a Octave 4. Apercu et environnement III Octave est fourni ici avec lIDE QtOctave qui permet ledition de scripts, leur execution et debuggage, les requetes en ligne de commande, laide en ligne, des menus de fonctions dediees, etc . . . Le lancement de QtOctave depuis le menu programme dUbuntu lance automatiquement Octave dans une console et un editeur integre.Rodolphe Charrier` Introduction a Octave 5. Apercu et environnement IV Rodolphe Charrier` Introduction a Octave 6. Obtenir de laide IDans la console dOctave : doc fonction ou help fonction lance une aide sur la fonction speciee, la commande lookfor mot-cl recherche loccurrence e ` du mot-cle dans toutes les premieres lignes des textes daide loption lookfor -all mot-cl cherche dans tout le e texte de laide. ` ` Une des manieres les plus completes dobtenir de laide est douvrir le menu Help/Octave Help de QtOctave. Une fenetre dediee souvre alors.Rodolphe Charrier` Introduction a Octave 7. Obtenir de laide IIDans cette aide, on trouve aussi des exemples de codes et des demonstrations. Enn une aide dynamique est aussi disponible dans le menu Help de QtOctave. Rodolphe Charrier` Introduction a Octave 8. Obtenir de laide III Elle ouvre une fenetre complementaire qui fournit des ` informations interessantes a la saisie dans lune quelconque des fenetres ouvertes.Rodolphe Charrier` Introduction a Octave 9. Modes dutilisation - console, editeur, batch processing I Octave sutilise dans une fenetre console, au travers dune boucle du type lecture-evaluation-resultat Taper les lignes de commandes suivantes successivement. Que constatez-vous? >>> s="Hello World!"; >>> disp(s); >>> s ` Les eches et permettent une navigation dans lhistorique des commandes. ` La touche lance un systeme de completion facilitant la saisie. Rodolphe Charrier` Introduction a Octave 10. Modes dutilisation - console, editeur, batch processing IIRodolphe Charrier` Introduction a Octave 11. Modes dutilisation - console, editeur, batch processing III Execution de chiers de scripts / commandes ` A partir de lediteur integre a QtOctave ou dun editeur externe, on peut construire un chier de commandes avec lextension .m. On pourra executer ce script par lune des methodes suivantes : depuis le menu Run/Run de la fenetre dedition de QtOctave, par la commande Octave source("nomDuScript.m") dans le dossier du script, en tapant directement le nom du script (sans extension) depuis le dossier du script dans la console de commande. Rodolphe Charrier` Introduction a Octave 12. Modes dutilisation - console, editeur, batch processing IV Mode batch On peut lancer Octave en mode batch : pour disposer dun environnement simplie (sans fenetrage), pour lancer en externe des chiers de scripts Commande de base : octave --silent monScript.m >Resultats.txt lance le script sur Octave (sans afcher les messages ` douverture Octave), quitte automatiquement apres execution ` et recupere eventuellement le resultat dans le chier Resultats.txt. Rodolphe Charrier` Introduction a Octave 13. Modes dutilisation - console, editeur, batch processing V On peut egalement rendre executable un script en rajoutant en ` en-tete la ligne suivante donnant le chemin dacces absolu au binaire Octave : #!usr/bin/octave --silent puis lexecuter dans un terminal de commande avec la sequence suivante : $ chmod u+x script.m $./script.m > Resultats.txtRodolphe Charrier` Introduction a Octave 14. Elements de base - types de donnees, variables, operations ITout est matrice dans Octave! Malgre cette remarque, nous allons commencer par decrire des types de donnees simples (des matrices 1x1) avant de passer aux aspects plus generaux de traitement de matrices.Rodolphe Charrier` Introduction a Octave 15. Elements de base - types de donnees, variables, operations II Reels Les reels sont codes sur 64 bits (double precision) avec 16 chiffres signicatifs au maximum dans lintervalle : [10308 , 10+308 ] ` la fonction de conversion single() permet de ramener a une simple precision, ! ! : certains operateurs arithmetiques rendent des entiers lorsquils sont en presence dentiers et de reels. Utiliser la fonction double( )pour convertir les entiers en reels.Rodolphe Charrier` Introduction a Octave 16. Elements de base - types de donnees, variables, operations IIIEntiers Les entiers sont obtenus via des fonctions de conversion vers un encodage en 8, 16, 32 ou 64 bits : int8, int16, int32, int64 pour les entiers signes uint8, uint16, int32, uint64 pour les entiers non signes.Rodolphe Charrier` Introduction a Octave 17. Elements de base - types de donnees, variables, operations IV Nombres complexes i, imaginaire pur dont le carre vaut -1, partie reelle (reel) + i partie imaginaire (reel), des fonctions speciques manipulent les nombres complexes : >>> z1=5+6i z1 = 5 + 6i >>> real(z1) ans = 5 >>> imag(z1) ans = 6 >>> conj(z1) ans = 5 - 6i Rodolphe Charrier` Introduction a Octave 18. Elements de base - types de donnees, variables, operations V Noms de variables Un nom de variable sous Octave commence par une lettre puis par au choix : des lettres de lalphabet en minuscules ou majuscules, avec differenciation de ces deux types (case sensitive) ` des nombres de 0 a 9 ` un caractere ` ` ` Le nombre de caracteres utilisables est limite a 63 caracteres sur Matlab/Octave. Les variables une fois creees resident en memoire dans le Workspace dOctave.Rodolphe Charrier` Introduction a Octave 19. Elements de base - types de donnees, variables, operations VI Manipulation de variables numeriques Loperateur daffectation est represente par un seul signe = (== designe loperateur booleen de comparaison). >>> x=1 x= 1 >>> x=x*2 x= 2 Tester lusage du point-virgule ;. Exemples doperateurs arithmetiques : x2 ou x 2 designe lelevation au carre x/y = xy 1 xy = x 1 y Rodolphe Charrier` Introduction a Octave 20. Elements de base - types de donnees, variables, operations VII Commentaires et lignes de continuation ` Un commentaire commence par le caractere %, Un bloc entier est encadre par %{ et %} , Une ligne se terminant par ... sera prolongee par la ligne suivante. Exemples : >>> % >>> x >>> + >>> + x= 6cest un commentaire = 1 ... 2 ... 3Rodolphe Charrier` Introduction a Octave 21. Elements de base - types de donnees, variables, operations VIII Fonctions mathematiques elementairesRodolphe Charrier` Introduction a Octave 22. Elements de base - types de donnees, variables, operations IX La plupart de ces fonctions prennent un argument et en ` retourne un autre. Elles sont vectorisees, cest-a-dire quelles manipulent des matrices. Exemple : Tester les commandes ci-dessous >>> >>> >>> >>> >>>x = cos(2) y = sin (2) x2 + y2 ans*2 z=sin([x y]) La variable ans stocke levaluation de lexpression courante et est reutilisable.Rodolphe Charrier` Introduction a Octave 23. Elements de base - types de donnees, variables, operations X Variables mathematiques predenies Dans Matlab/Octave, plusieurs variables mathematiques sont enies : predRodolphe Charrier` Introduction a Octave 24. Elements de base - types de donnees, variables, operations XI Booleens Les booleens sont des variables qui peuvent prendre deux valeurs, false ou 0, et true ou 1 (ou dans certains cas de conditions logiques toute valeur differente de 0) . 0perateurs booleens :Rodolphe Charrier` Introduction a Octave 25. Elements de base - types de donnees, variables, operations XIIfonctions logiques :Rodolphe Charrier` Introduction a Octave 26. Elements de base - types de donnees, variables, operations XIII ` Chanes de caracteres Elles sont delimitees sous Matlab/Octave par des apostrophes : >>> x = coucou x = coucou ` Une chane de caracteres est un vecteur ligne ce qui explique que la concatenation se fasse par la mise entre crochets [ ] : >>> [bonjour tout le monde] ans = bonjour tout le mondeRodolphe Charrier` Introduction a Octave 27. Elements de base - types de donnees, variables, operations XIV La fonction de concatenation strcat(chaine1,chaine2,...) supprime les espaces blancs. Cf. doc Octave pour les fonctions de manipulation. ` Une specicite dOctave par rapport a Matlab est daccepter egalement les chanes declarees entre guillemets integrant des ` caracteres speciaux : t pour la tabulation ` n pour le passage a la ligne. Ainsi executer la commande : >>> disp("Ce texte n saffiche sur 2 lignes avec une ttabulation")Rodolphe Charrier` Introduction a Octave 28. Matrices et vecteurs IConstruction dune matrice : delimitee par des crochets ouvrant [ et fermant ], elements dune meme ligne sont separes par des blancs ou des virgules, points virgules ; pour separer les lignes.Rodolphe Charrier` Introduction a Octave 29. Matrices et vecteurs II Exemples Executer les commandes successives suivantes dans la console Octave : >>> A = [ 1 1 1; 2 4 8; 3 9 27] %renvoie la taille de la matrice : >>>size(A) >>> y = [1 + i, - 3 * i, -1] %vecteur transpos de y : e >>>y % matrice transpose de A : e >>> A %renvoie dun lment de A : e e >>> A(2,2) %renvoie la deuxi`me ligne de A : e >>> A(2,:) % renvoie les deuxi`me et troisi`me lignes de A : e e >>>A(2:3,:)Rodolphe Charrier` Introduction a Octave 30. Matrices et vecteurs III Generation automatique % Gnration dun vecteur ligne gnr par srie linaire. e e e e e e e % Lincrment est en position milieu pour chaque vecteur ligne e % t peut tre un nombre dcimal e e >>>x=1:1:3 >>>u=1:0.5:3 % gnration dune matrice ` laide de 3 vecteurs lignes : e e a >>>B=[1:1:3 ; 1:3:9 ; 9:-1:7] %vecteur ligne gnr par la fonction linspace : e e e >>>v=linspace(-1,3,5)Rodolphe Charrier` Introduction a Octave 31. Matrices et vecteurs IV Construction de matrices speciques Tester les fonctions de construction de matrices suivantes et retrouver leur specicite : (On reprendra la matrice A et les variables precedentes) >>> >>> >>> >>> >>> >>> >>> >>>I = eye(4,4) Y = diag(y) a = diag(A) J = zeros(3,4) K = ones(3,4) B=triu(A) C= tril(A) R = rand (3,4)Rodolphe Charrier` Introduction a Octave 32. Visualiser un graphe simple I On va construire le graphe de la fonction y = ex sin(4x) pour x [0, 2] On commence alors par creer un maillage de lintervalle [0, 2] avec la fonction linspace : -->x=linspace(0,2*pi,101); x est alors un vecteur de 101 valeurs pour donner 100 intervalles. On calcule ensuite les valeurs de la fonction pour chaque composante du vecteur x : >>>y=exp(-x).*sin(4*x); Rodolphe Charrier` Introduction a Octave 33. Visualiser un graphe simple II La notation pointee de loperateur arithmetique permet de traiter loperation element par element sur les matrices. Le trace du graphique se fait alors par linstruction plot : >>>plot(x,y) >>>title(y=exp(-x)*sin(4x)) % le titre du trac e Linstruction permet de tracer une courbe passant par les points dont les coordonnees sont donnees dans les vecteurs x pour les abscisses, et y pour les ordonnees. Les points sont relies par des segments de droites.Rodolphe Charrier` Introduction a Octave 34. Visualiser un graphe simple IIIRodolphe Charrier` Introduction a Octave 35. Ecrire et executer un script I Lecriture de scripts Octave/Matlab (M-les) peut se faire dans lediteur de QtOctave et peut etre execute depuis cet environnement dans le menu Run de lediteur. Voici un petit exemple que lon nommera script1.m : % mon premier script Octave a = input( Rentrer la valeur de a : ); b = input( Rentrer la valeur de b : ); n = input( Nb dintervalles n : ); % calcul des abscisses x = linspace(a,b,n+1); % calcul des ordonnes e y = exp(-x).*sin(4*x); % reprsentation graphique e plot(x,y); xlabel(x); % label sur les abscisses ylabel(y); % label sur les ordonnes e title(y=exp(-x)*sin(4x));Rodolphe Charrier` Introduction a Octave 36. Entrees-sorties-chiers I Principales fonctions (tire de http://enacit1.epfl.ch/ cours_matlab/mfiles.html#entrees_sorties) :Rodolphe Charrier` Introduction a Octave 37. Entrees-sorties-chiers IISaisie clavier Une saisie au clavier utilise la commande input. Tester les saisies ci-dessous>>> n=input(entrer la dimension n) >>> A=input(entrer une matrice) >>> nomfichier=input(Donner le nom du fichier,s) Analyse automatique du type entre. ` Lorsque cest une chane de caracteres, on rajoute s en ` parametre.Rodolphe Charrier` Introduction a Octave 38. Entrees-sorties-chiers III Afchage sur la sortie standard La commande disp nafche quune seule variable/chane de ` ` caractere a la fois. >>> A=[1, 2; 3, 4] >>> disp(A) Linstruction fprintf qui est en fait celle qui est heritee du langage C (ici en absence didentiant de chier, cest la sortie standard qui est utilisee). Ex : >>> a=64; b=sin(a); >>> fprintf(le sinus de %2.f n est %f ,a,b) le sinus de 64 est 0.920026 Noter le format des nombres. Rodolphe Charrier` Introduction a Octave 39. Entrees-sorties-chiers IV Manipulation de donnees matricielles dans des chiers dlmread met les donnees lues dans une matrice (avec eventuellement un delimiteur). Ecrire quelques donnees en lignes et colonne dans un chier donnees.txt puis executer le script suivant : >>> M=dlmread(donnees.txt); >>> disp(M); >>> M2=dlmread(donnees.txt," ",[0,0,4,4])` La derniere instruction renvoie la sous-matrice des valeurs comprises entre lelement (0,0) et lelement (4,4), le separateur un espace blanc. dlmwrite ecrit les donnees dune matrice dans un chier : >>> dlmwrite(donnees.txt, M, "-append"); Le dernier argument (-append) signale une ecriture en n de chier. Rodolphe Charrier` Introduction a Octave 40. Entrees-sorties-chiers V Lecture formatee dans un chier Soit le chier texte data.txt suivant : 101 Martin Cahier 2 3.50 102 Charrier Crayon 5 2.95 Procedure de lecture sur un chier : boucle qui termine avec le signal de n de chier rendu par la fonction feof. % fopen : le mode douverture est indiqu par le second argument e % r lecture; w criture; a ajout en fin) e data_id = fopen(data.txt, r) ; no = 1 ; while not(feof(data_id)) % lecture des lments 1 ` 1 (dernier argument de fscanf) e e a No_client(no) = fscanf(data_id,%u,1) ; Nom{no,1} = fscanf(data_id,%s,1) ; Article{no,1} = fscanf(data_id,%s,1) ; Nb_articles(no) = fscanf(data_id,%u,1) ; Prix_unit(no) = fscanf(data_id,%f,1) ; no = no + 1 ; end status = fclose(data_id) ; Rodolphe Charrier` Introduction a Octave 41. Entrees-sorties-chiers VI` Rem : les chanes de caracteres sont stockees dans des tableaux cellulaires (cf. doc). Principaux types de format : %u et %d designent respectivement un entier positif (naturel) et un entier relatif (positif ou negatif) %f designe les ottants ` %s designe les chanes de caracteres Rodolphe Charrier` Introduction a Octave 42. Entrees-sorties-chiers VII Ecriture formatee dans un chier On ecrit dans un chier precedemment ouvert en ecriture via fprintf. Tester le script suivant (si vous ne precisez aucun file id, on ecrit sur la sortie standard) : >>> a=0:0.1:1; >>> b=sin(a); >>> fprintf(file_id, %1.2f %1.4f n,[a;b]); Les formats peuvent integrer des specications dafchage (ici ` nombre avant et apres la virgule pour les ottants)Rodolphe Charrier` Introduction a Octave 43. La programmation en Scilab I If - instructions conditionnelles Ecrire et executer le script suivant et modier les valeurs de n pour tester : n=2; if (n==1) disp(un); elseif (n==2) disp(deux); else disp(autre); endifOn peut enchaner plusieurs tests avec elseif. La condition logique de selection ne necessite pas de ` parentheses. Il peut sagir dune matrice sur laquelle on verie que tous les elements ne sont pas faux (differents de 0).Rodolphe Charrier` Introduction a Octave 44. La programmation en Scilab IISwitch - alternatives switch n case{1} disp(un); case{2} disp(deux); otherwise disp(autre); endswitch Seule linstruction qui suit directement le case est executee si la comparaison est vraie. otherwise est facultatif et sera effectue si tous les tests precedents ont echoues.Rodolphe Charrier` Introduction a Octave 45. La programmation en Scilab IIIBoucle for On utilise un index qui decrit un ensemble de valeurs, genere souvent avec loperateur deux-points : . Literateur de la boucle for peut etre plus generalement une matrice, pour laquelle chaque iteration renvoie un vecteur colonne. Tester le script ci-dessous : for i=1:2:5 disp(i) endfor % sur une matrice for n=[1 5 2;4 4 4] n endforRodolphe Charrier` Introduction a Octave 46. La programmation en Scilab IVRemarque Quand cela est possible, on remplacera la boucle for par une ` operation matricielle, cest a dire vectorisee pour un gain en performance.Rodolphe Charrier` Introduction a Octave 47. La programmation en Scilab V Boucle While ` Une boucle while repete une sequence dinstructions de ` ` maniere conditionnee a la verication dune expression booleenne. Tester le script ci-dessous qui calcule la somme des 10 premiers entiers : s=0; i=1; while (i>>sum(1:10) Comparez en augmentant le nombre utilise.Rodolphe Charrier` Introduction a Octave 48. La programmation en Scilab VI Break-Continue break permet de sortir denitivement dune boucle. continue permet de sortir de literation courante dune boucle. Comparer lexecution des deux scripts qui suivent. Break : s=0; i=1; while (true) if (i>10) break endif s=s+i i=i+1 endwhileRodolphe Charrier` Introduction a Octave 49. La programmation en Scilab VIIContinue : s=0; i=0; while (i>>A=rand(3,3); >>>[L,U]=lu(A) >>>[L,U,P]=lu(A)Rodolphe Charrier` Introduction a Octave 53. Les fonctions IV Ecriture de fonctions 1 2 Declarer la fonction (nom arguments dentree / sortie), utiliser des commentaires pour renseigner laide en ligne : ` ` premiere ligne de commentaire immediatement apres la declaration, la H1-line (utilisee par les commandes daide help ou lookfor) autres commentaires. . .3 declaration des variables globales ou statiques sil y en a (les variables statiques sont immuables et declarees par le mot-cle persistent),4 ecriture du code proprement dit de la fonction et commentaires associes,5` ` penser a affecter des valeurs a chaque argument de sortie,6 n de fonction signalee par le mot-cle endfunction. Rodolphe Charrier` Introduction a Octave 54. Les fonctions V Exemple ` Ecriture dune fonction renvoyant un vecteur (a tester) : function [somme,produit]=fsomprod(a,b) %FSOMPROD somme et produit de 2 nombres, vecteurs ou matrices % Usage: [S,P]=FSOMPROD(V1,V2) % Retourne matrice S contenant la somme de V1 et V2, % et matrice P contenant le produit de V1 et V2 lment par lment % e e e e % if (nargin=2) % donne le nombre darguments dentre e % message derreur si on a pas 2 arguments error(cette fonction attend 2 arguments); endif if ( isequal(size(a),size(b))) error(les 2 arg. nont pas la mme dimension); e endif somme=a+b; produit=a.*b; % produit lment par lment ! e e e e endfunction % sortie de la fonctionRodolphe Charrier` Introduction a Octave 55. Les fonctions VI Fonctions recursives Ecrire la fonction ci-dessous dans un chier facto.m et faire des tests dexecution sous Octave en se placant dans le meme dossier que le script. function p=facto(n) if n>>f1 = @sin; >>>quad (f1, 0, pi) ans = 2 >>> feval(f1,pi/4) ans = 0.70711 >>> f1(pi/4) ans = 0.70711 Rodolphe Charrier` Introduction a Octave 57. Utiliser une fonction comme argument dune autre fonction IIFonctions anonymes Syntaxe de generation dune fonction anonyme : @(liste darguments) expression Executer ces quelques exemples tires de la doc Octave : >>> >>> >>> >>> >>> f = @(x) x.2; % permet egalement de dfinir f e quad(f,0,10) quad (@(x) sin (x), 0, pi) % en fonction anonyme a = 1; b = 2; % les param`tres sont valus e e quad (@(x) betainc (x, a, b), 0, 0.4)Rodolphe Charrier` Introduction a Octave 58. Utiliser une fonction comme argument dune autre fonction III Construction dynamique de fonctions ` Denition dune fonction in-line par une chaine de caracteres : >>> f = inline("x2 + 2"); >>>f(2) ans = 6` Conversion de chane de caracteres en expression evaluable ou en instructions executables : fonction eval fonction = input(Quelle est la fonction y=fct(x) ` tracer ?,s); a min_max = input(Indiquez [xmin xmax] : ); x = linspace(min_max(1),min_max(2),100); eval(fonction,error(fonction incorrecte)); plot(x,y);La fonction feval, comme fplot (cf. diapo suivante), prend un pointeur de fonction en entree. Rodolphe Charrier` Introduction a Octave 59. Graphisme I http: //enacit1.epfl.ch/cours_matlab/graphiques.html ` Complements (a tester) fplot prend un pointeur de fonction ou une fonction in-line en entree : function [y]=sigmoid(x) y=1./(1 + exp(-20 .* (x - 0.25))); endfunction % fplot(@sigmoid, [0, 1], r); ezplot trace une fonction parametree en 3D par le meme ` parametre : >>>ezplot3(t*sin(t),t*cos(t),t,[0,10*pi]);Rodolphe Charrier` Introduction a Octave 60. ` Modelisation et systemes differentiels I Matlab/Octave permet de resoudre numeriquement des equations differentielles par approximation. ` Soit une equation avec une condition initiale (probleme de Cauchy) : du(t) = f (t, u(t)) dt u(t0 ) = u0 ou u : R Rn , u0 Rn et f : R Rn Rn . `Rodolphe Charrier` Introduction a Octave(1) 61. ` Modelisation et systemes differentiels IILa fonction lsode est la fonction Octave qui va permettre de ` calculer une solution numerique, cest a dire de lintegrer sur un intervalle demarrant en t0 , en partant du vecteur colonne u0 . Pour cela, il faut commencer par denir la fonction f du ` probleme de Cauchy decrit ci-dessus (1). On la denit comme une fonction Octave classique : function [f] = SecondMembreEDO(u,t) // on dcrit ici les composantes de f e endfunctionRodolphe Charrier` Introduction a Octave 62. ` Modelisation et systemes differentiels IIIRemarque ` Meme si la fonction f est autonome (cest a dire independante de t), il faudra quand meme mettre t comme second argument ` de f (ou toute autre variable denissant le parametre devolution).Rodolphe Charrier` Introduction a Octave 63. ` Modelisation et systemes differentiels IV Exemple ` On considere lequation de Van der Pol : y = c(1 y 2 )y y ` que lon reformule classiquement comme un systeme de deux equations differentielles du premier ordre, en posant u1 (t) = y (t) u2 (t) = y (t) ` Soit le systeme equivalent d dtu1 (t) u2 (t)=u2 (t) 2 c(1 u1 (t))u2 (t) u1 (t)Rodolphe Charrier` Introduction a Octave 64. ` Modelisation et systemes differentiels V Ce que lon decrit par la fonction Octave suivante, en xant c = 0.4 : function [f] = vanDerPol(u,t) f(1)=u(2) f(2)=0.4*(1-u(1)2)*u(2) - u(1) endfunction Pour resoudre numeriquement lequation, il faut donc denir ` une distribution uniforme de valeurs de t sur un intervalle, a partir de t0 , et une condition initiale pour les variables u. On appelle ensuite la fonction lsode ainsi : t = linspace(t0,T,m); [U] = lsode("vanDerPol",u0, t); ` On recupere alors une matrice U telle que U(i, j) est la solution approchee de ui (t(j)).Rodolphe Charrier` Introduction a Octave 65. ` Modelisation et systemes differentiels VI printf("Rsolution dune quation de Van der Pol.n"); e e % dclaration de la fonction en second membre e function [f] = vanderpol(u,t) f(1)=u(2); f(2)=0.4*(1-u(1)2)*u(2)-u(1); endfunction % trac des lignes de champ e clf; [x, y] = meshgrid (-5:0.5:5); h = quiver (x, y, y, 0.4*(1-x.2).*y-x,0.5); set (h, "maxheadsize", 0.1); hold on; % calcul de la solution avec la condition initiale : m=500; T=30; t=linspace(0,T,m); u0 = [-2.5; 2.5]; % marquage de la condition initiale plot(u0(1),u0(2),b*);Rodolphe Charrier` Introduction a Octave 66. ` Modelisation et systemes differentiels VII%affichage de la solution [u] =lsode("vanderpol",u0,t); plot(u(:,1),u(:,2),r); %titre, lgendes, etc... e title(Equation de Van Der Pol : plan de phase (y(t), dy(t)/dt)); xlabel(y(t)); ylabel(dy(t)/dt); hold off; figure; plot(t,u); legend(y(t),dy(t)/dt);Rodolphe Charrier` Introduction a Octave 67. ` Modelisation et systemes differentiels VIII Figure: Trace du champ de vecteur et de la solution de lequation de Van der PolRodolphe Charrier` Introduction a Octave