You are on page 1of 6

scilab ` a lEcole des Ponts ParisTech http://cermics.enpc.

fr/scilab
Introduction ` a Scilab Z eros de fonctions, equations di erentielles, optimisation, hypermatrices
Jean-Philippe Chancelier & Michel de Lara cermics, Ecole des Ponts ParisTech 4 ao ut 2010 (derni` ere date de mise ` a jour)

Table des mati` eres


1 Z eros avec fsolve 1.1 Z eros de fonction scalaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Intersection de coniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Int egration d equations di erentielles avec ode 2.1 Equations di erentielles scalaires autonomes . . . . . . . . . . . . . . . . . . 2.2 Equation di erentielle scalaire non autonome . . . . . . . . . . . . . . . . . . 2.3 Syst` eme di erentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Optimisation avec optim 3.1 Minimum dune fonction de deux variables, sans contraintes . . . . . . . . . 3.2 Minimum dune fonction de deux variables, avec contraintes . . . . . . . . . 4 Hypermatrices 3 3 3 4 4 5 5 6 6 6 7

Z eros avec fsolve

-->help fsolve

1.1

Z eros de fonction scalaire

z ero de polyn ome -->function [y]=fct(x) , y=2*x^3-30*x^2-3*x+200, endfunction -->x=[-3:0.1:15];xbasc();plot2d(x,fct(x)); --> x1=fsolve(-1,fct) -->fct(x1) --> x2=fsolve(1,fct) -->fct(x2) --> x3=fsolve(11,fct) -->fct(x3) z ero de polyn ome, avec gradient -->function [y]=fct(x) , y=2*x^3-30*x^2-3*x+200, endfunction -->function [y]=grad_fct(x) , y=6*x^2-60*x-3, endfunction -->x=[-3:0.1:15];xbasc();plot2d(x,fct(x)); --> x1=fsolve(-1,fct,grad_fct) -->fct(x1) --> x2=fsolve(1,fct,grad_fct) -->fct(x2) --> x3=fsolve(11,fct,grad_fct) -->fct(x3)

1.2

Intersection de coniques

Fonctions de d enition des coniques -->function [z]=conique1(x,y) , z=2*x^2+ 5*y^2-30*x+20, endfunction -->function [z]=conique2(x,y) , z=2*x^2 -y^2-3*y-20, endfunction On trace les coniques en dessinant les deux contours de niveau 0 de conique1 et conique2 -->help fcontour2d -->x=-2:10; -->y=-10:10; -->xbasc(); -->fcontour2d(x,y,conique1,[0,0],style=[9,9]) // on trace conique1(x,y)=0 // on est oblig e de poser [0,0], et non pas 0 qui pourrait e ^tre confondu // avec lentier d esignant le nombre de courbes de niveau a ` tracer -->fcontour2d(x,y,conique2,[0,0],style=[12,12],strf="000") // on superpose le deuxi` eme contour 2

Recherche dun point dintersection -->function [Y]=coniques(X) , Y=[conique1(X(1),X(2)),... conique2(X(1),X(2))], endfunction -->rep=fsolve([-1,1],coniques) -->coniques(rep) // on v erifie le calcul On rajoute le point sur le dessin -->xpolys(rep(1),rep(2),-1) Question 1 Choisir une fonction de R2 dans R2 , la programmer, chercher un z ero, puis repr esenter ses courbes de niveau.

Int egration d equations di erentielles avec ode


dy = f (t, y ) , dt y (t0 ) = y0 Rn

-->help ode

2.1

Equations di erentielles scalaires autonomes


dy = f (y ) , dt y ( t 0 ) = y0 R

dy = sin(y ) dt -->function [ydot]=f(t,y) , ydot=sin(y), endfunction //attention ! on ecrit f(t,y) m^ eme si f ne d epend pas de t -->y0=0.2;t0=0;t=0:0.1:15; -->y=ode(y0,t0,t,f); -->xbasc(); plot2d(t,y) dy = y 2 dt -->function [ydot]=f(t,y) , ydot=-y^2, endfunction -->y0=0.2;t0=0;t=0:0.1:30; -->y=ode(y0,t0,t,f); -->xbasc(); plot2d(t,y) dy = y2 dt -->function [ydot]=f(t,y) , ydot=y^2, endfunction -->y0=0.2;t0=0;t=0:0.1:30; -->y=ode(y0,t0,t,f); -->xbasc(); plot2d(t,y) 3

Question 2 Que se passe-t-il dans ce dernier cas ? Quel est le rapport avec la solution de = y2 ? l equation di erentielle dy dt

2.2

Equation di erentielle scalaire non autonome


dy = f (t, y ) , dt y ( t 0 ) = y0 R

dy = sin(t y ) dt -->function [ydot]=f(t,y) , ydot=sin(t*y), endfunction -->y0=0.2;t0=0;t=0:0.1:15; -->y=ode(y0,t0,t,f); -->xbasc(); plot2d(t,y)

2.3

Syst` eme di erentiel


dy1 dt = f1 (t, y1 , y2 ) dy2 = f2 (t, y1 , y2 ) , dt

(y1 (t0 ), y2 (t0 )) = y0 R2

d2 y = sin(y ) dt2 -->function [z]=fct1(y1,y2) , z=y2, endfunction -->function [z]=fct2(y1,y2) , z=-sin(y1), endfunction -->function [Z]=fct(t,Y) , Z=[fct1(Y(1),Y(2)),fct2(Y(1),Y(2))], endfunction -->y0=[0.3,0.2];t0=0;t=0:0.1:30; -->y=ode(y0,t0,t,fct); -->xbasc(); plot2d(t,y(1,:))

Question 3 Programmer le syst` eme di erentiel


x2 x 1 = 1+ x Dx1 x2 1 x2 x Dx2 + Dx2in x 2 = k 1+ x2 1

(1)

Choisir des valeurs positives pour D et x2in . R esoudre num eriquement et tracer des trajectoires.

Optimisation avec optim

-->help optim

3.1

Minimum dune fonction de deux variables, sans contraintes


min J (x, y )
x,y

Un exemple simple : optimiser x2 + y 2 sur R2 . -->function [f,g,ind]=cost(x,ind) f=x(1)^2+x(2)^2, g=[2*x(1);2*x(2)] endfunction // g est le gradient de f // ici, ind est un param` etre non utilis e mais qui doit e ^tre pr esent -->[f,xopt]=optim(cost,[1;2]) // le co^ ut est quasi nul

3.2

Minimum dune fonction de deux variables, avec contraintes


xmin xxmax ,ymin y ymax

min

J (x, y )

Le m eme probl` eme que dans la section pr ec edente mais sous contraintes : x [2, 10] et y [10, 10]. Noter que le minimum est atteint sur un bord. -->function [z]=C(x,y) , z=x^2+y^2, endfunction -->x=2:10;y=-10:10; -->z=feval(x,y,C); -->xbasc(); -->plot3d(x,y,z); -->[f,xopt,gopt]=optim(cost,b,[2;-10],[10;10],[5;5]); // f nest pas nul // le gradient en xopt est perpendiculaire au bord Question 4 Choisir une fonction de R2 dans R qui soit born ee sup erieurement, la programmer, chercher un maximum.

Hypermatrices

-->A= hypermat([2,2,2,2],rand(16,1)); -->B = A(1,:,2,:) B = (:,:,1,1) ! 0.3076091 (:,:,1,2) ! 0.3321719 0.2146008 !

0.5015342 !

-->B.entries ans = ! ! ! ! 0.3076091 0.2146008 0.3321719 0.5015342 ! ! ! !

-->matrix(B.entries,2,2) ans = ! ! 0.3076091 0.2146008 0.3321719 ! 0.5015342 !

You might also like