Cómo generar una función de dos variables sin utilizar ningún bucle?
-
21-09-2019 - |
Pregunta
Supongamos que tengo una función y (t, x) = exp (-t) * sin (x)
En Matlab, defino
t = [0: 0.5: 5];
x = [0: 0.1: 10*2*pi];
y = zeros(length(t), length(x)); % empty matrix init
Ahora, ¿Cómo defino matriz y sin utilizar ningún bucle , de manera que cada elemento y (i, j) contiene el valor de la función deseada y en (t(i), x(j))
? A continuación se muestra cómo lo hice utilizando un bucle.
for i = 1:length(t)
y(i,:) = exp(-t(i)) .* sin(x);
end
Solución
Su vectores de entrada x
es 1xN
y t
es 1xM
, y
matriz de salida es MxN
. Vectorizar el código tanto x
y t
debe tener la misma dimensión que y
.
[x_,t_] = meshgrid(x,t);
y_ = exp(-t_) .* sin(x_);
Su ejemplo es un caso sencillo 2D. meshgrid()
función trabaja también en 3D. A veces no se puede evitar el bucle, en tales casos, cuando el bucle se puede ir en cualquier 1: N o 1: M, elegir la más corta. Otra función que utilizo para preparar vector para la ecuación vectorizada (vector x de multiplicación de matrices) es diag()
.
Otros consejos
no hay necesidad de meshgrid
; sólo tiene que utilizar:
y = exp(-t(:)) * sin(x(:)'); %multiplies a column vector times a row vector.
Esas podrían ser útiles:
http://www.mathworks.com/access/helpdesk/ Ayuda / TechDoc / ref / meshgrid.html
http://www.mathworks.com/company/newsletters /digest/sept00/meshgrid.html
Buena suerte.