Matlab 如何在不使用任何循环的情况下生成两个变量的函数?
假设我有一个函数y(t,x)=exp(-t)*sin(x) 在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
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.
不确定是否可以-循环需要很长时间才能运行,或者为什么要运行?在这个简单的示例中,循环不是问题。但我想学习的方法,没有真正的大向量循环!