如何在不使用任何循环的情况下生成两个变量的函数?

Aam*_*mir 7 matlab matrix vectorization

假设我有一个函数y(t,x)= exp(-t)*sin(x)

在Matlab中,我定义

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

现在,如何在不使用任何循环的情况下定义矩阵y ,这样每个元素y(i,j)都包含所需函数y的值(t(i), x(j))?以下是我使用for循环的方法.

for i = 1:length(t)
    y(i,:) =  exp(-t(i)) .* sin(x);
end
Run Code Online (Sandbox Code Playgroud)

Mik*_*ail 12

您的输入向量x1xNt1xM,输出矩阵yMxN.要对代码进行矢量化,x并且t必须具有相同的维度y.

[x_,t_] = meshgrid(x,t);
y_ =  exp(-t_) .* sin(x_);
Run Code Online (Sandbox Code Playgroud)

您的示例是一个简单的2D案例.功能meshgrid()也适用于3D.有时你无法避免循环,在这种情况下,当你的循环可以是1:N或1:M时,选择最短的循环.我用来为矢量化方程(矢量x矩阵乘法)准备矢量的另一个函数是diag().


sha*_*hef 6

没有必要meshgrid; 只需使用:

y = exp(-t(:)) * sin(x(:)');    %multiplies a column vector times a row vector.
Run Code Online (Sandbox Code Playgroud)