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

发布于 2024-08-16 05:55:54 字数 388 浏览 4 评论 0原文

假设我有一个函数 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

赠我空喜 2024-08-23 05:55:54

您的输入向量 x1xNt1xM,输出矩阵 yMxN。要对代码进行矢量化,xt 必须具有与 y 相同的维度。

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

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

Your input vectors x is 1xN and t is 1xM, output matrix y is MxN. To vectorize the code both x and t must have the same dimension as y.

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

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) is diag().

凉墨 2024-08-23 05:55:54

不需要meshgrid;只需使用:

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

there is no need for meshgrid; simply use:

y = exp(-t(:)) * sin(x(:)');    %multiplies a column vector times a row vector.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文