首页 > 解决方案 > 从 sum 构造向量

问题描述

我正在尝试构建一个数组,该数组具有两个向量的点积之和作为元素。像这样:

向量

我使用了以下代码,但我认为它不正确,所以请帮助。

do j = 0, m
do i = 1, N
temp(i) = (x(i)**j)*y(i)
b(j) = vectorsum(temp)
end do
end do 

其中 x 是向量 Xi,y 是函数 f,j 是幂 m,temp 是包含对当前元素的操作的临时向量,

谢谢你。

标签: fortranfortran90

解决方案


您应该使用内部函数sum,它接受一个数组并通过加法来减少它。Intrinsic 非常优化,因此通常在可能适用时推荐它们。

有很多句法方法可以完成它,其中许多都带有内在的sum. 这里有一些(我使用与您的图像相同的符号,而不是来自您的示例):

  implicit none
  integer, parameter :: m=5,n=3
  integer :: i, j, x(0:n), f(0:n), b(0:m)

  x = [0,1,2,3]
  f = [0,1,2,3]

  ! using array implied-do construction inside sum
  do i = 0,m
    b(i) = sum([(x(j)**i * f(j), j=0,n)])
  end do
  print *, b  ! output: 6 14 36 98 276 794


  ! using Fortran's whole array operations
  do i = 0,m
    b(i) = sum(x**i * f)
  end do
  print *, b  ! output: 6 14 36 98 276 794

  ! using implied-do constructor outside, without explicit do    
  b = [(sum(x**i * f), i=0,m)]
  print *, b  ! output: 6 14 36 98 276 794

end

推荐阅读