如何在不使用任何循环的情况下生成两个变量的函数?
假设我有一个函数 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
Suppose I have a function y(t,x) = exp(-t)*sin(x)
In Matlab, I define
t = [0: 0.5: 5];
x = [0: 0.1: 10*2*pi];
y = zeros(length(t), length(x)); % empty matrix init
Now, how do I define matrix y without using any loop, such that each element y(i,j) contains the value of desired function y at (t(i), x(j))
? Below is how I did it using a for loop.
for i = 1:length(t)
y(i,:) = exp(-t(i)) .* sin(x);
end
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的输入向量
x
为1xN
,t
为1xM
,输出矩阵y
为MxN
。要对代码进行矢量化,x
和t
必须具有与y
相同的维度。您的示例是一个简单的 2D 案例。函数
meshgrid()
也适用于 3D。有时您无法避免循环,在这种情况下,当您的循环可以是 1:N 或 1:M 时,请选择最短的一个。我用来为向量化方程(向量 x 矩阵乘法)准备向量的另一个函数是 diag()。Your input vectors
x
is1xN
andt
is1xM
, output matrixy
isMxN
. To vectorize the code bothx
andt
must have the same dimension asy
.Your example is a simple 2D case. Function
meshgrid()
works also 3D. Sometimes you can not avoid the loop, in such cases, when your loop can go either 1:N or 1:M, choose the shortest one. Another function I use to prepare vector for vectorized equation (vector x matrix multiplication) isdiag()
.不需要
meshgrid
;只需使用:there is no need for
meshgrid
; simply use:这些可能会有所帮助:
http://www.mathworks.com/access/helpdesk/ help/techdoc/ref/meshgrid.html
http:// /www.mathworks.com/company/newsletters/digest/sept00/meshgrid.html
祝你好运。
Those might be helpful:
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/meshgrid.html
http://www.mathworks.com/company/newsletters/digest/sept00/meshgrid.html
Good Luck.