Question

Supposons que j'ai une fonction y (t, x) = exp (-t) * sin (x)

Dans Matlab, je définis

t = [0: 0.5: 5];
x = [0: 0.1: 10*2*pi];
y = zeros(length(t), length(x)); % empty matrix init

Maintenant, comment définir la matrice y sans utiliser de boucle , de sorte que chaque élément y (i, j) contient la valeur de la fonction souhaitée à y (t(i), x(j))? Ci-dessous, comment je l'ai fait en utilisant une boucle.

for i = 1:length(t)
    y(i,:) =  exp(-t(i)) .* sin(x);
end
Était-ce utile?

La solution

Votre vecteurs d'entrée x est 1xN et t est 1xM, la matrice de sortie est y MxN. Pour vectoriser le code à la fois x et t doit avoir la même dimension que y.

[x_,t_] = meshgrid(x,t);
y_ =  exp(-t_) .* sin(x_);

Votre exemple est un simple cas 2D. Fonction meshgrid() fonctionne également en 3D. Parfois, vous ne pouvez pas éviter la boucle, dans de tels cas, lorsque votre boucle peut aller soit 1: N ou 1: M, choisir le plus court. Une autre fonction Je l'utilise pour préparer vecteur pour l'équation vectorisé (vecteur x de multiplication de la matrice) est diag().

Autres conseils

il n'y a pas besoin de meshgrid; il suffit d'utiliser:

y = exp(-t(:)) * sin(x(:)');    %multiplies a column vector times a row vector.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top