Fermer X

Introduction à Scilab
Zéros de fonctions,
équations différentielles, optimisation, hypermatrices

Jean-Philippe Chancelier & Michel de Lara
cermics, École des Ponts ParisTech
(last modification date: October 13, 2016)
Version pdf de ce document
Version sans bandeaux

Contents

1 Zéros avec fsolve

-->help fsolve

1.1 Zéros de fonction scalaire

  • zéro de polynôme
    -->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éro de polynôme, 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éfinition 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é de poser [0,0], et non pas 0 qui pourrait être confondu  
    // avec l'entier désignant le nombre de courbes de niveau à tracer  
    -->fcontour2d(x,y,conique2,[0,0],style=[12,12],strf="000")  
    // on superpose le deuxième contour

  • Recherche d'un point d'intersection
    -->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érifie le calcul

  • On rajoute le point sur le dessin
    -->xpolys(rep(1),rep(2),-1)

Question 1 Choisir une fonction de ℝ2   dans ℝ2   , la programmer, chercher un zéro, puis représenter ses courbes de niveau.

2 Intégration d'équations différentielles avec ode

dy
---= f (t,y),   y(t0) = y0 ∈ ℝn
dt

-->help ode

2.1 Équations différentielles scalaires autonomes

dy-=  f(y),  y(t0) = y0 ∈ ℝ
dt

  • dy-
dt =  sin (y)
    -->function [ydot]=f(t,y) , ydot=sin(y), endfunction  
    //attention ! on écrit f(t,y) même si f ne dépend pas de t  
    -->y0=0.2;t0=0;t=0:0.1:15;  
    -->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)

  • dy     2
---=  y
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)

Question 2 Que se passe-t-il dans ce dernier cas ? Quel est le rapport avec la solution de l'équation différentielle ddyt = y2   ?

2.2 Équation différentielle scalaire non autonome

dy-=  f(t,y),  y(t ) = y ∈  ℝ
dt                0     0

  • 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ème différentiel

(|  dy1
|{  -dt-  =  f1(t,y1,y2)

||(  dy2-                                          2
    dt   =  f2(t,y1,y2),  (y1(t0),y2(t0)) = y0 ∈ ℝ

  •  2
d-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ème différentiel

{
  x˙1 =  1x+2x2x1 − Dx1
  x˙2 = − k -x2-x1 − Dx2 +  Dx2in
           1+x2
(1)

Choisir des valeurs positives pour D  et x2in   . Résoudre numériquement et tracer des trajectoires.

3 Optimisation avec optim

-->help optim

3.1 Minimum d'une fonction de deux variables, sans contraintes

mixn,y J (x,y)

Un exemple simple : optimiser  2    2
x  + y   sur   2
ℝ   .

-->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ètre non utilisé mais qui doit être présent  
-->[f,xopt]=optim(cost,[1;2])  
// le coût est quasi nul

3.2 Minimum d'une fonction de deux variables, avec contraintes

         min          J (x,y)
xmin≤x≤xmax,ymin≤y≤ymax

Le même problème que dans la section précédente 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 n'est pas nul  
// le gradient en xopt est perpendiculaire au bord

Question 4 Choisir une fonction de  2
ℝ   dans ℝ  qui soit bornée supérieurement, la programmer, chercher un maximum.

4 Hypermatrices

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

L'École des Ponts ParisTech est membre fondateur de

L'École des Ponts ParisTech est certifiée 

ParisTech ParisEst ParisTech

 

Copyright 2014
École des Ponts ParisTech
All rights reserved