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

时间:2009-12-25 21:19:01

标签: 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

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

for i = 1:length(t)
    y(i,:) =  exp(-t(i)) .* sin(x);
end

3 个答案:

答案 0 :(得分:12)

您的输入向量x1xNt1xM,输出矩阵yMxN。要对代码进行矢量化,xt必须与y具有相同的维度。

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

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

答案 1 :(得分:6)

不需要meshgrid;只需使用:

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

答案 2 :(得分:2)