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

Matlab 如何在不使用任何循环的情况下生成两个变量的函数?,matlab,matrix,vectorization,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

假设我有一个函数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

您的输入向量
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()

这些函数可能有用:


祝你好运。

不需要
meshgrid
;只需使用:

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

不确定是否可以-循环需要很长时间才能运行,或者为什么要运行?在这个简单的示例中,循环不是问题。但我想学习的方法,没有真正的大向量循环!