Scilab champ de vecteur 2D

Bonjour à tous,
J'essaye de tracer le champ vectoriel
champ.jpg
Voici mon code
= [1   0   0   1; 2   2  -2   2;   3   0   0   3;   0   1  -1   0]
x=m(:,1)
y=m(:,2)
fx=m(:,3)
fy=m(:,4)
champ(x,y,fx,fy)
La réponse de scilab est "champ : Dimension erronée des arguments d'entrée : Dimensions incompatibles."
Or voici ce que dit l'aide
"On peut également tracer un champ de vecteurs, sous la forme de flèches. Pour cela, il faut un vecteur colonne vx ayant les composantes selon x du champ de vecteur, un vecteur colonne vy ayant les composantes selon y de ce champ, et utiliser la fonction
champ(x, y, vx, vy)
J'ai sans doute mal compris les vecteurs vx et vy ?
Merci de m'avoir consacré de votre temps

Réponses

  • Je crois que ce n'est pas possible à faire avec la commande `champ` (sans doute pas possible du tout avec scilab !)

    En effet, elle ne permet que de représenter des champs de vecteurs définis sur une grille.
    fx(i,j) is the x component of the vector field at point (x(i),y(j)).
    

    https://help.scilab.org/docs/6.0.1/en_US/champ.html

    Sinon, pour mémoire, un exemple de champ de vecteurs avec scilab, en utilisant meshgrid :
    // using meshgrid to get fx and fy
    clf()
    x = linspace(-1,1,30);
    y = linspace(-1,1,30);
    [X,Y] = meshgrid(x,y);
    fy = 2.*Y;
    fx = 2.*X;
    champ(x,y,fx',fy'); //here we have transposed fx and fy
    

    Avec pgfplots, c'est facile en adaptant l'exemple page 92 du manuel
    \documentclass[12pt,tikz]{standalone}
    \usepackage{pgfplots}
    \begin{document}
    \begin{tikzpicture}
      \begin{axis}[title=Quiver and plot table]
        \addplot 
          [
            blue,
            quiver={u=\thisrow{u},v=\thisrow{v}},
            -stealth,
          ] 
          table 
          {
            x y  u v
            1 0  0 1
            2 2 -2 2
            3 0  0 3
            0 1 -1 0
          };
      \end{axis}
    \end{tikzpicture}
    \end{document}
    
    82160
  • Merci beaucoup
    Mais j'avoue que je ne comprends pas très bien l'expression "des champs de vecteurs définis sur une grille".
    Voici un code qui donne un champ (mais pas le mien)
    clf
    x = [2 ; 3 ; 4]
    y = [5 ; 6 ; 7 ; 8 ; 9]
     
    fx = rand(3, 5)
    fy = rand(3, 5)
    champ(x,y,fx,fy)
    
    Je ne vois pas ce qui lie (x,y ) à (fx,fy) dans ce programme plus que dans le mien.
    En tous les cas merci
  • Eh bien, tes $15=3\times 5$ vecteurs aléatoires sont placés aux $15=3\times 5$ points de coordonnées $(x_i,y_j)\in X\times Y$.

    Ça forme donc une grille.
  • C'est clair.
    Merci pour votre patience
Connectez-vous ou Inscrivez-vous pour répondre.