Comment générer une fonction de deux variables sans utiliser la boucle?
-
21-09-2019 - |
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
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.
Ceux pourraient être utiles:
http://www.mathworks.com/access/helpdesk/ Aide / Techdoc / ref / meshgrid.html
http://www.mathworks.com/company/newsletters /digest/sept00/meshgrid.html
Bonne chance.