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
¿Fue útil?

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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top