Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/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
Fortran等效的MATLAB网格函数?_Matlab_Fortran - Fatal编程技术网

Fortran等效的MATLAB网格函数?

Fortran等效的MATLAB网格函数?,matlab,fortran,Matlab,Fortran,Fortran中是否有一个meshgrid等价物 这是我试图用Fortran重新编写的Matlab代码: n = a; %same in fortran m = n*(n-1)/2; %same in fortran offdiags = dec2bin(0:2^m-1,m)-48; % found a subroutine online A = zeros(n,n,2^m); %multi-dimensional array same concept in fortran [ind_i,

Fortran中是否有一个
meshgrid
等价物

这是我试图用Fortran重新编写的Matlab代码:

n = a;  %same in fortran
m = n*(n-1)/2; %same in fortran 
offdiags = dec2bin(0:2^m-1,m)-48; % found a subroutine online
A = zeros(n,n,2^m); %multi-dimensional array same concept in fortran

[ind_i,ind_j,ind_k] = meshgrid(1:n,1:n,1:2^m); % ?
A(ind_i>ind_j) = offdiags.'; 

A = A + permute(A,[2 1 3]); 
此代码旨在生成所有可能的带有$n$顶点的邻接矩阵(或具有无向边的图形配置)。这种配置的数量正好是$2^{n(n-1)/2}$。它们可以在循环中“手动”生成,也可以简单地使用stackoverflow上建议的上述代码生成

对于n=3,此代码中使用meshgrid生成三维坐标阵列ind_i、ind_j和ind_z,它们有3行(长度(1:3))、3列(长度(1:3))和8页(长度(1:1:2^m)),并且它们包含网格中指定向量的副本。在我的例子中,让$L=[1,2,3]$。然后我得到从1到8,$ind_I(:,:,I)=[L;L;L]$,$ind_j(:,:,I)=[one(1,3);2*one(1,3);3*one(1,3)]$和$ind_k(:,:,I)=I*one(3)$

从他们的站点复制的Matlab描述:[X,Y,Z]=meshgrid(xgv,ygv,zgv)生成三维坐标阵列。输出坐标阵列X、Y和Z分别包含栅格向量xgv、ygv和zgv的副本。输出阵列的大小由网格向量的长度决定。对于长度分别为M、N和P的网格向量xgv、ygv和zgv,X、Y和Z将有N行、M列和P页


不,Fortran没有
meshgrid
内部版本。 但是,下面是一个简单的3D
meshgrid
实现,它使用了固有的

subroutine meshgrid(xgv, ygv, zgv, X, Y, Z)
  implicit none
  real,intent(in)   :: xgv(:), ygv(:), zgv(:)
  real,intent(out)  :: X(:,:,:), Y(:,:,:), Z(:,:,:)
  integer           :: sX, sY, sZ, i

  sX = size(xgv) ; sY = size(ygv) ; sZ = size(zgv)

  do i=1,sZ
    X(:,:,i) = spread( xgv, 1, sY )
    Y(:,:,i) = spread( ygv, 2, sX )
  enddo ! i
  do i=1,sX
    Z(i,:,:) = spread( zgv, 1, sY)
  enddo ! i
end subroutine
测试了倍频程(我没有可用的Matlab)


Y
Z
的操作可以写成一行:

  Y = reshape( spread( ygv, 2, sX*sZ ), [sX,sY,sZ] )
  Z = reshape( spread( zgv, 1, sX*sY ), [sX,sY,sZ] )

不,Fortran没有
meshgrid
内部版本。 但是,下面是一个简单的3D
meshgrid
实现,它使用了固有的

subroutine meshgrid(xgv, ygv, zgv, X, Y, Z)
  implicit none
  real,intent(in)   :: xgv(:), ygv(:), zgv(:)
  real,intent(out)  :: X(:,:,:), Y(:,:,:), Z(:,:,:)
  integer           :: sX, sY, sZ, i

  sX = size(xgv) ; sY = size(ygv) ; sZ = size(zgv)

  do i=1,sZ
    X(:,:,i) = spread( xgv, 1, sY )
    Y(:,:,i) = spread( ygv, 2, sX )
  enddo ! i
  do i=1,sX
    Z(i,:,:) = spread( zgv, 1, sY)
  enddo ! i
end subroutine
测试了倍频程(我没有可用的Matlab)


Y
Z
的操作可以写成一行:

  Y = reshape( spread( ygv, 2, sX*sZ ), [sX,sY,sZ] )
  Z = reshape( spread( zgv, 1, sX*sY ), [sX,sY,sZ] )

至少有一句关于函数实际作用的话是正确的。谢谢,我刚刚编辑了我的post@AlexanderVogt是的,这就是我引用文本的原因,但我可以更改它。谢谢。至少有一句关于函数实际作用的话是正确的。谢谢我刚刚编辑了我的post@AlexanderVogt是的,这就是我引用文本的原因,但我可以更改它。谢谢。我在编译时遇到一个错误-它说错误:符号“sy”在(1)没有隐式类型-其他参数也是如此。可能是什么(我完全是Fortran的初学者)?另外,您可以为2D网格编写代码吗?(我只需要xgv和ygv)。编译此文件时,我收到一个错误,它表示错误:(1)处的符号“sy”没有隐式类型,其他参数也是如此。可能是什么(我完全是Fortran的初学者)?另外,您可以为2D网格编写代码吗?(我只需要xgv和ygv)。