渐进矩阵算法

标签 algorithm matrix fortran

我想像这样构造一个矩阵:

[ 0 1 2 3 4 5 ....
  1 2 3 4 5 6 ....
  2 3 4 5 6 7 ....
  3 4 5 6 7 8 ....
  4 5 6 7 8 9 ....
  5 6 7 8 9 10 ... ] etc 

主要目标是使用该算法对现有矩阵的元素进行幂运算。

我正在用 Fortran 编程,我使用了以下代码但它不起作用:

do i = 1, m+1
  do j = 1, m+1
    do while ( w < 2*m )
      if ( i > j ) then
        ma(i,j) = 0
      else 
        w = i-1
        ma(i, j) = w
        w = w +1 
      end if
    end do
  end do
end do

最佳答案

我建议您在数组构造函数语法中使用隐含的 do,可能在同一声明中初始化:

integer, parameter :: n = 10, m = 5
integer :: i, j
integer :: ma(m,n) = reshape([((i+j, j=0, m-1), i=0, n-1)], [m,n])

[...] 语法在 Fortran 2003 或更高版本中是可行的。否则应使用 (/.../)。我对 gfortran v7.1.1 的结果是:

do i = 1, m
  print *, ma(i, :)
end do

$gfortran test.f90 -o main
$main
           0           1           2           3           4           5           6           7           8           9
           1           2           3           4           5           6           7           8           9          10
           2           3           4           5           6           7           8           9          10          11
           3           4           5           6           7           8           9          10          11          12
           4           5           6           7           8           9          10          11          12          13

注意:只有当nm 是常量(参数)时,声明中的初始化才有可能。您可以在程序主体中正常初始化它,否则,使用相同的隐式语法。 如果您计划在运行时读取 mn 的值,您应该使 ma 成为可分配的数组。

关于渐进矩阵算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53549123/

相关文章:

c++ - Ubuntu 上的段错误(核心转储)与 C++ 上的矩阵函数

arrays - 为什么我的矩阵值在 C 中消失了?

matrix - Intel Extended Eigensolver(用于稀疏矩阵)极慢

fortran - gfortran 不编译实变量

algorithm - 如何计算大哦符号

algorithm - 填充路径是如何渲染的?

algorithm - 像旅行商一样的问题

python - numpy中一维数组的乘法

algorithm - 数据结构中的卫星信息是什么?

c - 手动将代码从一种语言翻译成另一种语言