Académique Documents
Professionnel Documents
Culture Documents
1
%Petit script d’exemple d’criture en mode texte
fich=fopen(’data2.txt’,’wt’); %le w c’est pour pouvoir y crire et t pour texte
x=[-2:0.1:2];
y=exp(-x.^2);
m=length(x);
fprintf(fich, ’[x(k) exp(-x^2(k))], pour k=1,...,%d\n’, m);
for k=1:m
fprintf(fich,’%1.4f %1.8f\n’,x(k),y(k) ); %\n c’est passer la ligne
end
fclose(fich);
Tester les!
Contrairement à un script, une fonction ne modifie pas vos variables et
détruit les variables qu’elle a crée après son exécution.
Une fonction doit être dans un fichier .m dont la première ligne commence
toujours par le mot
function
Un exemple: copier celle ci-dessous et sauver là sous le nom moncarre.m
function y=moncarre(x)
% Cette fonction est
% l’inverse de racine carree
x=(x+abs(x))/2;
disp(’Vos variables ne changent pas’)
y=x.*x;
2
En tapant help moncarre,
les 2 lignes de commentaires, ici la 2 et la 3, sont affichées.
Tester celle-ci
function y=moncarreB(x)
% Cette fonction est
% l’inverse de racine carree
x=(x+abs(x))/2;
%disp(’Vos variables ne changent pas’);
y=x.*x;
mafoncI=inline(’(x.^n)./(x.*x+1)’,’x’,’n’);
ou plus simple:
mafonc2I=inline(’(x.^2)./(x.*x+1)’);
f2I=@(x) (x.^2)./(x.*x+1);
En tapant
M=1+mafoncI(A); ou M=1+f2I(A); (M devient ones(A))
Pour récapituler, soit prog1.m est un programme et fonct.m une fonction.
prog1 (exécute prog1.m),
a=fonct(x,y,z) ;
(appelle la fonction fonct.m, la première ligne du programme de la fonction doit
être de la forme
function b=fonct(u,v,w), ou function [c]=fonct(s,t,d) )
[a1, a2]=fonct(x,y,z) ;
(appelle la fonction fonct.m, la première ligne du programme de la fonction doit
être de la forme
function [b, c]=fonct(u,v,w))
Quelques exemples.
function f=mafonc1(x,c,n)
% y=mafonc(x,c,n)
% y est de meme type que x
% c peut etre du meme type que x, ou un scalaire
% n est un entier
f=x;
for i=1:n,
f=f.^2+c;
end % pour for
3
La valeur donnée par la fonction est en general une matrice.
Une fonction peut donner plusiers valeurs.
function [f,m]=mafonc2(x,c,n)
% commentaires...
f=x;
for i=1:n,
f=moncarreB(f)+c;
end % pour for
m=1;
for i=1:n
m=round(m^2+c);
end % pour for
Une fonction peut appeler une autre fonction fichier. Pour celà, on peut
écrire la deuxieme après la première. Cette deuxième peut être déclarée inline
dans le corps de la fonction.
function [f,m]=mafonc3(a,b,n)
% [M,y]=mafonc3(a,b,n)
% M est l’integrale de g sur a,b (a<b), g dfini ci-bas
%par la methode des points milieux,
% et y l’erreur
if nargin != 3
error(’Cette fonction n’’ecessite 4 variables’);
return;
else
h=(b-a)/n;
f=h*g(a+h/2);
for i=1:(n-1),
f=f+h*g(a+i*h+h/2);
end % pour le for
end % pour if
y=quadv(@g,a,b);
m=abs(y-f);
Exemples d’utisation:
[V,r]=mafonc3(0,1,100);
Autres exemples où la deuxieme fonction n’est pas dans un fichier
function [f,m]=mafonc3B(a,b,n)
% [M,y]=mafonc3B(a,b,n)
% M est l’integrale sur a,b (a<b), de la fonction g ci-dessous
4
% par la methode des points milieux,
% et y l’erreur
g=@(x) ((x+abs(x))/2).^2;
h=(b-a)/n;
f=h*g(a+h/2);
for i=1:(n-1),
f=f+h*g(a+i*h+h/2);
end % pour le for
y=quad(g,a,b);
m=abs(y-f);
function [f,m]=mafonc3C(a,b,n)
% [M,y]=mafonc3C(a,b,n)
% M est l’integrale sur a,b (a<b), de la fonction g ci-dessous
% par la methode des points milieux,
% et y l’erreur
g=inline(’((x+abs(x))/2).^2’);
h=(b-a)/n;
f=h*g(a+h/2);
for i=1:(n-1),
f=f+h*g(a+i*h+h/2);
end % pour le for
y=quad(g,a,b);
m=abs(y-f);
Une fonction peut avoir comme argument une autre le nom, (un mot),d’une
fonction.
Exemple
function f=mafonc4(g,a,b,n)
% Commentaires
h=(b-a)/n; f=h*feval(g,a+h/2);
for i=1:(n-1),
f=f+h*feval(g,a+i*h+h/2);
end % pour for
r=mafonc4(@sin,0,pi,100);
dans ce cas g(x)=sin(x). On peut faire aussi
r=mafonc4(’sin’,0,pi,100);
Dans le cas d’une fonction dans un fichier, comme moncarreB.m, on fait
r=mafonc4(’moncarreB’,0,1,10); dans ce cas g(x)=moncarreB(x), si moncar-
reB.m est une fonction à une variable, qui existe dans le répertoir courant.
La fonction précédente est équivalente à celle-ci
function f=mafonc4B(g,a,b,n)
% Commentaires
mot1=[g,’(’];
5
h=(b-a)/n; f=h*eval([mot1,’a+h/2)’]);
for i=1:(n-1),
f=f+h*eval([mot1,’a+i*h+h/2)’]);
end % pour for
Autres alternatives
function f=mafonc5(g,a,b,n))
% Commentaires
h=(b-a)/n;
try
f=h*feval(g,a+h/2);
for i=1:(n-1),
f=f+h*feval(g,a+i*h+h/2);
end % pour for
catch
f=h*feval(@g,a+h/2);
for i=1:(n-1),
f=f+h*feval(@g,a+i*h+h/2);
end % pour for
end % pour try
%%Resolution numerique de
%%y"=-sin(y); y(0)=0 et y’(0)=0.5
F=inline(’[v(2);-sin(v(1))]’,’t’,’v’);
v0=[0;0.5];
[X,Y]=ode23(F,[0,10],v0);
plot(X,Y(:,1))