假设我有一个函数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
答案 0 :(得分:12)
您的输入向量x
为1xN
,t
为1xM
,输出矩阵y
为MxN
。要对代码进行矢量化,x
和t
必须与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)