Cette page appartient aux archives web de l'EPFL et n'est plus tenue à jour.
This page belongs to EPFL's web archive and is no longer updated.

Remarques pour Matlab

Bonjour à tous !

Quelques remarques pour Matlab :

1) Quand une fonction préexistante dans Matlab demande une fonction comme argument (par exemple "feval" ou "fminsearch"), la manière dont est implémentée la fonction détermine la syntaxe, à savoir :

a) pour une fonction inline (f = inline('x.^2 + 3*y.^2','x','y')), la syntaxe se fait sans guillemetes : feval(f,2,3), qui évalue f au point x=2, y=3.

b) pour la fonction impémentée dans "f.m", les guillemets sont nécessaires, et on écrira feval('f',2,3).


2) Pour utiliser "mesh" ou "surf", il vous faut deux vecteurs X et Y de taille n et m respectivement, et une matrice Z de taille [nxm] où Z(i,j) = f(X(i),Y(j)).
Pour ce faire, il y a deux solutions, la première étant de calculer chaque élément indépendemment avec un boucle "for" sur i=1,...,n puis j=1,...,m:

for i = 1:n
for j=1:m
Z(i,j) = f(X(i),Y(j));
end
end


L'autre possibilité est de créer une matrice en utilisant "meshgrid", créant deux matrices M1 et M2 de tailles [nxm]. La commande "M1.*M2" effectue "M1(i,j) * M2(i,j)" pour chaque i=1,...,n et j=1,...,m. Donc, "Z = M1.^2 + 3*M2.^2" évalue la fonction sur tous les points voulus.

Si j'ai implémenté ma fonction dans "f.m" comme "f(x,y) = x.^2 + 3*y.^2", alors poser "Z = f(M1,M2)" marche. En revanche, si on a défini "f(x) = x(1).^2 + 3*x(2).^2", la syntaxe précédente ne peut pas marcher, car l'élément x(1) du vecteur ne peut pas être une matrice. Dans ce cas, on doit utiliser la méthode "évaluer en toutes les combinaisons de points"....

Pour résumer, attention aux guillemets ! Et aussi, il y a toujours plusieurs façons de résoudre un même problème en programmation, l'essentiel pour ce cours est d'en trouver une qui marche, l'efficacité du code n'étant pas l'objectif premier !
Posted by Niklaus Eggenberg on Friday 28 September 2007 at 13:43