! put code to test here
call cpu_time(finish)
print '("Time = ",f6.3," seconds.")',finish-start
end program test_cpu_time
也可以使用system_time,但用法不一样.
在fortran中利用cpu_time子程序来测试代码运行时间# 在fortran中利用cpu_time子程序来测试代码运行时间program test_cpu_timereal :: start, finishcall cpu_time(start) ! put code to test herecall cpu_time(finish)print '("Time = ",f6
某些数组以及变量值要重复用到,比如有多个
子程序
需要调用,存在两种情况:
(1)值已知,这种情况下单个变量值较常见,比如圆周率π,就用parameter声明在Module
中
;
real,parameter::pi=3.1415926...
call date_and_time(charecter_date(len=8),charecter_time(len=10))
call cpu_time(real_time)
注意,如果是多线程运行,得到的结果是所以线程时间的和
call system_clock(int_time)
单位是毫秒
program main
implicit non...
在优化程序的过程
中
发现其
中
存在大量的派生类型变量(type),同时发现
Fortran
子程序
可以接受type类型数组
中
元素,即将type类型
中
元素当作独立的数组传递。传递过程如下所示:...
为了测试派生类型数组传递的速度,编写如下程序进行对比module 更改不同的num值可以得到程序
耗时
结果,从表格
中
可以看出传递type数组
中
元素所
耗时
间是直接传递数组所需时间的3倍,当然两种数组的大小应该在10...
MPI_Gather:收集相同长度的数据块。
MPI_Gatherv:收集不同长度的数据块。与MPI_Gather类似,但允许
每个
进程发送的数据块长度不同,并且根进程可以任意排放数据块在recvbuf
中
的位置。
MPI_Gather
MPI_Gather(
void* sendbuf,
int sendcnt,
MPI_Datatype sendtype,
void* recvbuf,
int recvcnts,
MPI_Datatype r
IMSL是一款非常强大的数学和统计分析软件,它提供了许多常用的数值优化算法,包括非线性最小二乘问题的求解算法UNLSF。下面是在
Fortran
中
利用IMSL算法库实现UNLSF算法的示例代码:
```
fortran
PROGRAM unlsf_example
IMPLICIT NONE
INTEGER :: n, m, i, j, info
REAL :: x(100), y(100), tol, fnorm
REAL, DIMENSION(100, 10) :: fjac
REAL, DIMENSION(10) :: x0, fvec, diag, qtf
CHARACTER(LEN=12) :: errmsg
EXTERNAL :: fcn
! 初始化数据
n = 10
m = 100
tol = 1E-6
x0 = 0.0
x0(1) = 1.0
DO i = 1, m
x(i) = REAL(i, KIND=4)
DO j = 1, n-1
fjac(i,j) = x(i)**(REAL(j, KIND=4))
END DO
END DO
y = 2.0 * x + 1.0 + 0.1 * RAND(0)
! 调用UNLSF算法求解非线性最小二乘问题
CALL UNLSF(fcn, m, n, x0, fvec, fjac, tol, diag, qtf, info, errmsg)
! 输出结果
IF (info .EQ. 1) THEN
WRITE(*,*) "UNLSF converged successfully!"
WRITE(*,*) "The solution is:"
WRITE(*,*) x0
WRITE(*,*) "UNLSF failed to converge:"
WRITE(*,*) errmsg
END IF
! 定义目标函数
FUNCTION fcn(m, n, x, fvec, fjac)
INTEGER, INTENT(IN) :: m, n
REAL, INTENT(IN) :: x(n)
REAL, INTENT(OUT) :: fvec(m)
REAL, INTENT(INOUT) :: fjac(m,n)
INTEGER :: i, j
DO i = 1, m
fvec(i) = 0.0
DO j = 1, n-1
fvec(i) = fvec(i) + fjac(i,j) * x(j)
END DO
fvec(i) = fvec(i) - y(i)
END DO
RETURN
END FUNCTION fcn
END PROGRAM unlsf_example
在这个示例代码
中
,我们首先定义了一组数据,并且构造了目标函数fcn。然后调用IMSL算法库
中
的UNLSF函数求解非线性最小二乘问题。最后根据算法的返回值判断求解是否成功,并输出结果。