Génération des points de maillage : meshgrid

Pour définir une surface, il faut un ensemble de triplets \((x, y, z)\). En général les points \((x, y)\) forment dans le plan un maillage régulier, mais ce n'est pas une obligation. La seule contrainte est que le nombre de points soit le produit de deux entiers \(m \times n\).

Si l'on a \(m \times n\) points, cela signifie que l'on a \(m \times n\) valeurs de \(x\), \(m \times n\) valeurs de \(y\) et \(m \times n\) valeurs de \(z\) . Il apparaît donc que les abscisses, les ordonnées et les cotes des points de la surface peuvent être stockées dans des tableaux de taille \(m \times n\).

Syntaxe

Toutes les instructions de tracé du surface, par exemple surf respecteront donc la syntaxe générale

surf(Mx, My, Mz)

\(M_x\) est la matrice d'abscisses, et \(M_y\) la matrice d'ordonnées, et \(M_z\) la matrice des cotes.

\[ M_x = \left[ \begin{array}{ccc} x_{11} & \dots & x_{1n} \\ x_{21} & \dots & x_{2n} \\ \vdots & \dots & \vdots \\ x_{m1} & \dots & x_{mn} \\ \end{array} \right] \quad M_y = \left[ \begin{array}{ccc} y_{11} & \dots & y_{1n} \\ y_{21} & \dots & y_{2n} \\ \vdots & \dots & \vdots \\ y_{m1} & \dots & y_{mn} \\ \end{array} \right] \quad M_z = \left[ \begin{array}{ccc} z_{11} & \dots & z_{1n} \\ z_{21} & \dots & z_{2n} \\ \vdots & \dots & \vdots \\ z_{m1} & \dots & z_{mn} \\ \end{array} \right]\]

Il reste maintenant à construire ces tableaux. Prenons tout d'abord le cas de la surface définie par :

\[z = y^2 - x^2\]

dont on veut tracer la surface représentative sur \([-1, 1] \times [-2, 2]\). Pour définir un quadrillage de ce rectangle, il faut définir une suite de valeurs \(x_1, ~\dots, ~x_m\) pour \(x\) et une suite de valeurs \(y_1, ~\dots, ~y_n\) pour \(y\), par exemple :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>> x = -1:0.2:1
  
x =
    Columns 1 through 7
    -1.0000 -0.8000 -0.6000 -0.4000 -0.2000 0 0.2000
    Columns 8 through 11
    0.4000 0.6000 0.8000 1.0000
>> y = -2:0.2:2
  
y =
    Columns 1 through 7
    -2.0000 -1.8000 -1.6000 -1.4000 -1.2000 -1.0000 -0.8000
    Columns 8 through 14
    -0.6000 -0.4000 -0.2000 0 0.2000 0.4000 0.6000
    Columns 15 through 21
    0.8000 1.0000 1.2000 1.4000 1.6000 1.8000 2.0000

En combinant toutes ces valeurs de \(x\) et \(y\), on obtient \(m \times n\) points dans le plan \((x, y)\). Il faut maintenant construire deux tableaux, l'un contenant les \(m \times n\) abscisses de ces points l'autre les \(m \times n\) ordonnées, soit :

\[X = \left[ \begin{array}{cccc} x_1 & x_2 & \dots & x_m \\ x_1 & x_2 & \dots & x_m \\ \vdots & \vdots & & \vdots \\ x_1 & x_2 & \dots & x_m \end{array} \right] \qquad Y = \left[ \begin{array}{cccc} y_1 & y_1 & \dots & y_1 \\ y_2 & y_2 & \dots & y_2 \\ \vdots & \vdots & & \vdots \\ y_n & y_n & \dots & y_n \end{array} \right]\]

Rassurez-vous, la fonction meshgrid construit automatiquement ce type de tableaux :

1
[X,Y] = meshgrid(x,y);

Il reste maintenant à calculer les \(z = y^2 - x^2\) correspondants. C'est là que les calculs terme à terme sur les matrices montrent leur efficacité : on applique directement la formule aux tableaux X et Y, sans oublier de mettre un point devant les opérateurs *, / et ^

1
Z = Y.^2 - X.^2;