【问题标题】:How to create this matrix in matlab efficiently? Without for loop?如何在matlab中有效地创建这个矩阵?没有for循环?
【发布时间】:2015-07-29 00:20:30
【问题描述】:

我想通过这个函数创建一个 N*N 矩阵 A:

其中 x 和 y 是 N-d 个向量。我可以只创建 4 个嵌套的 for 循环,但如何更有效地实现呢?有没有没有for循环的方法?

非常感谢。

【问题讨论】:

  • 我认为是cos(k*y_j) 而不是n
  • MK 是什么?
  • 如果你知道 M 和 K 是什么,你可以用矩阵形式做所有事情,这样你就可以避免循环。

标签: matlab vectorization


【解决方案1】:

使用元素级 .* 操作将比 4 个嵌套的 for 循环快得多。我想你想要这样的东西:

M = 100;
K = 100;
N = 40;
x = linspace(0,1,N);
y = linspace(0,1,N);

%order reversed matches i,j notation in question
[Y,X] = meshgrid(y,x);
A = zeros(size(X));

for m = 1:M
    for k = 1:K

        A = A + sqrt(m^2 + k^2)*sin(m*X).*cos(k*Y);

    end 
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多