假设我们有一个带有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);
...
但我真的没有太多想法。也许一个循环甚至没有方法
请注意,对于那些评论可读性的人,我提供了我正在处理的数学问题的片段(当然,并非所有细节都很重要):
注意,rho是欧几里德平面上的向量,i和j下标分别代表x和y分量。 rho_ {x_s,y_s}只是欧几里德平面中的一个固定点,而λ<> 0是常数。
答案 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.