Skip to content

Commit 6cd54d5

Browse files
authored
Update ch05-06-intrinsic.md
1 parent b90bdb4 commit 6cd54d5

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

src/ch05-06-intrinsic.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,28 @@ Fortran中提供了大量的内置函数,熟练使用这些内置函数,可
2121
`minloc(array,dim=1)`这样写可以返回一个数。
2222
- `dot_product(a,b)`这个函数用于计算两个一维数组的内积,需要注意的是,当传入的是`complex`类型的时候,它实际上计算的是\\(a^{H}b\\)而不是\\(a^{T}b\\)
2323
- `reshape,mamtul`这些返回数组的内置函数,在`ifort/ifx`中优化很差,会造成栈溢出`stack overflow`,需要谨慎使用。
24+
- `reduce`,`reduce`接收一个数组,并对数组元素做相对应的规约操作(目前仅`ifx/ifort`支持)
25+
26+
规约操作是指对于矩阵`a`和运算`f(x,y)`,假设有初始值`id`
27+
``` fortran
28+
do i=1,n
29+
id = f(id,a(i))
30+
end do
31+
```
32+
例如计算一个数组的模
33+
``` fortran
34+
program main
35+
implicit none
36+
write(*,*)reduce([real::1,2,3],add_pow)
37+
contains
38+
pure real function add_pow(x,y)result(f)
39+
real,intent(in)::x,y
40+
f=sqrt(x**2+y**2)
41+
end function add_pow
42+
end program main
43+
```
44+
- 练习:查询相关函数的文档,思考如何计算一个数组的模平方
45+
- 练习:使用reduce计算数组的最大公约数,最小公倍数
46+
47+
2448

0 commit comments

Comments
 (0)