Fortran Coder

查看: 10610|回复: 11
打印 上一主题 下一主题

[微积分] 【添加新的自适应程序】这个简单的辛普森算法对吗?

[复制链接]

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

楼主
发表于 2014-11-18 22:47:47 | 显示全部楼层
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

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-11-19 08:32:11 | 显示全部楼层
fun1 也可以作为外部函数,不一定非在 module 里。

你说的每次,是指每次使用,还是每次编译??换一个函数的时候,你是不想重新编译?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-3 01:15

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表