如何在Matlab上实现(N×N)×M矩阵?

时间:2017-07-21 16:36:23

标签: matlab loops math matrix grid-layout

假设我们有一个带有N个点的2D网格网格(即N = N x * N y ,其中N x 是数字网格中的网格点和N y 是网格上y网格点的数量,我们在网格网格中嵌入了一维域,我们将其分为M点。

现在,让A = F (ij) m 为系统矩阵(对于某些函数F,带有二维参数),其中i索引为1到N x ,j索引从1到N y ,m索引从1到M.

A是M×N矩阵。所以它有M列和N行。显然,实现M列并不是非常困难,但我无法设想我们如何实现N行。

特别是,我们会有像

这样的东西
[F^(11)_1 , F^(11)_2 - F^(11)_1 , .... , F^(11) _M - F^(11) _(M-1)]
[F^(12)_1 , F^(12)_2 - F^(12)_1 , .... , F^(12) _M - F^(12) _(M-1)]
                                  ....
[F^(1Ny)_1 , F^(1Ny)_2 - F^(1Ny)_1 , .... , F^(1Ny) _M - F^(1Ny) _(M-1)]
[F^(21)_1 , F^(21)_2 - F^(21)_1 , .... , F^(21) _M - F^(21) _(M-1)]
                                  ....
[F^(NxNy)_1 , F^(NxNy)_2 - F^(NxNy)_1 , .... , F^(NxNy) _M - F^(NxNy) _(M-1)]

因此M列和N = N x * N y 行。

我正在尝试在Matlab上实现这一点,我想它应该开始像:

x = 1:.5:10;
y = 1:.5:10;
[X Y] = meshgrid(x,y); % create mesh grid
Nx = length(x);
Ny = length(y);
N = Nx*Ny; % number of points in our mesh grid
M = 20; % arbitrary choice
Y0 = 5; % fixed y vector
F = besselh(0,2,norm([X Y]-[X(:,m),Y0])); % a 2D function we want to sum over the loop
A = zeros(M,N); % preallocate the memory
for i = 1:Nx
    for j = 1:Ny
        for m =1:M
        A = F(i,j,m);    
        ...

但我真的没有太多想法。也许一个循环甚至没有方法

请注意,对于那些评论可读性的人,我提供了我正在处理的数学问题的片段(当然,并非所有细节都很重要):

enter image description here

注意,rho是欧几里德平面上的向量,i和j下标分别代表x和y分量。 rho_ {x_s,y_s}只是欧几里德平面中的一个固定点,而λ<> 0是常数。

1 个答案:

答案 0 :(得分:1)

这是一个例子。你的F不是有效的matlab代码,所以我在这里用'玩具'功能替换它,只是为了向你展示方法。

% Parameters
x = 1:.5:10; y = 1:.5:10; [X Y] = meshgrid(x,y); % create mesh grid
Nx = length(x); Ny = length(y); N = Nx * Ny;
M = 20; % arbitrary choice

% Example 'F' Function (here in the form of an 'anonymous function' handle);
F = @(i,j,m) (10*i - 5*j) * m;

% Evaluate F at each i,j,m index and collect as a 3D array.
A = zeros(M, Nx, Ny); % preallocation
for i = 1:Nx, for j = 1:Ny, for m =1:M
  A(m, i, j) = F(i, j, m);
end, end, end

A = reshape(A, [M, N]);
A = A.' % transpose to place 'M' dimension as columns and rest as rows.