7

假设我有一个函数 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) 都包含所需函数 y at 的值(t(i), x(j))?下面是我如何使用 for 循环。

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

3 回答 3

12

您的输入向量x1xN并且t1xM,输出矩阵yMxN。要将代码向量化,x并且t必须具有与 相同的维度y

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

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

于 2009-12-25T22:23:10.993 回答
6

没有必要meshgrid;只需使用:

y = exp(-t(:)) * sin(x(:)');    %multiplies a column vector times a row vector.
于 2009-12-28T20:10:34.267 回答
2

这些可能会有所帮助: http:
//www.mathworks.com/access/helpdesk/help/techdoc/ref/meshgrid.html

http://www.mathworks.com/company/newsletters/digest/sept00/meshgrid.html

祝你好运。

于 2009-12-26T09:40:04.517 回答