Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab上实现(nxn)xm矩阵?_Matlab_Loops_Math_Matrix_Grid Layout - Fatal编程技术网

如何在Matlab上实现(nxn)xm矩阵?

如何在Matlab上实现(nxn)xm矩阵?,matlab,loops,math,matrix,grid-layout,Matlab,Loops,Math,Matrix,Grid Layout,假设我们有一个二维网格,网格上有N个点(即N=Nx*Ny,其中Nx是x轴上网格点的数量,Ny是y轴上网格点的数量),我们在网格中嵌入了一个1D域,我们将其离散为M个点 现在,假设A=F(ij)m是一个系统矩阵(对于某些函数F,具有一个二维参数),其中i索引从1到Nx,j索引从1到Ny,m索引从1到m A是一个M×N矩阵。所以它有M列和N行。显然,实现M列应该不是很困难,但是我很难想象如何实现N行 特别是,我们会有 [F^(11)_1 , F^(11)_2 - F^(11)_1 , .... ,

假设我们有一个二维网格,网格上有N个点(即N=Nx*Ny,其中Nx是x轴上网格点的数量,Ny是y轴上网格点的数量),我们在网格中嵌入了一个1D域,我们将其离散为M个点

现在,假设A=F(ij)m是一个系统矩阵(对于某些函数F,具有一个二维参数),其中i索引从1到Nx,j索引从1到Ny,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=Nx*Ny行

我正试图在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分量。ρ{x_s,y_s}只是欧几里德平面上的一个不动点,λ>0是一个常数。

下面是一个例子。您的
F
不是有效的matlab代码,因此我在这里用“toy”函数替换它,只是为了向您展示该方法

%参数
x=1:5:10;y=1:5:10;[xy]=网格(X,Y);%创建网格
Nx=长度(x);Ny=长度(y);N=Nx*Ny;
M=20;%随意的选择
%示例“F”函数(此处为“匿名函数”句柄形式);
F=@(i,j,m)(10*i-5*j)*m;
%在每个i、j、m索引处计算F,并收集为3D数组。
A=零(M,Nx,Ny);%预分配
对于i=1:Nx,对于j=1:Ny,对于m=1:m
A(m,i,j)=F(i,j,m);
结束,结束,结束
A=重塑(A[M,N]);
A=A.。%将“M”维度转换为列,其余部分转换为行。

这是一个3D阵列,对吗?问题是什么?@duffymo它不是3D数组,因为a应该属于具有M列和N行的复杂矩阵。N恰好是Nx和Ny的乘积。你可以在括号里观察矩阵的尺寸,我用F项做了一个矩阵,显示了A应该是什么样子。什么是
m
,它的尺寸是什么?@LeanderMoesinger对不起,
m=1:m
,我在我的代码中犯了一个错误,改为写了
k
(我现在就纠正这个错误)@TasosPapastylianou I提供了Latex代码的图片(尽管其中的所有细节都不一定重要)。我选择的名字与你的乳胶中的名字不一致,但是,无论如何,你明白了一点:)事实上,我知道我会用
F
来切换
A
,反之亦然,但我有点困惑,我是坚持
A(:,:,1)
还是写
A(:,:,I)
和循环
i=1:Nx
,以及我将编写什么来代替
magic
magic+1
?请原谅我的天真。啊,对不起,我是在回答一般技巧。好的,关于你的代码有两件事,第一件是,F不是一个真正的“函数”。但是,如果是这样,那么对于每个
i,j,m
三元组,它会产生一个标量,那么你可以在迭代的每一步将其收集为a(i,j,m)=F(i,j,m),以产生三维矩阵a。好的,我已经编辑了答案,以显示一个更完整的示例。我还使用了
重塑
而不是线性索引。。。现在对你来说应该更有意义了。