fun1 是需要重写的,fortran 是编译型语言,所有代码都需要编译。而 matlab 是解释型的。
封装在 module 里应该更容易使用才对。
http://fcode.cn/code_gen-25-1.html 这个模块或许是你想要的。
PS:你提到的精度问题,应该是受单精度影响。把常数都改成双精度会提供到 E-11 级
[Fortran] 纯文本查看 复制代码 program main
!use mkl95_blas
integer,parameter :: M=100
real(kind=8)::N,f(M),d(M),res,s
s=sin(0.0D0)!计算在a处的值
N=M/1.0D0 !用于计算步长(步长之倒数)
f= 1.0D0*(/(i,i=1,M,1)/)/N !计算节点
d=sin(f) !节点处的函数值
do counter=1,M,2 ! 计算奇数节点的累加值(0算第0个点)
s=s+d(counter)*4.0D0/6.0D0
end do
do counter=2,M-2,2 ! 将计算偶数节点的值累加(不包括最后一个节点)
s=s+d(counter)*2.0D0/6.0D0
end do
s=s+d(M)/6.0D0 !将最后一个节点加上去。。。就是这里忘了除以6
s=2.D0*s/N
res=s-(cos(0.0D0)-cos(1.0D0)) !计算误差
write(*,*) res
read(*,*)
end |