Fortran Coder

查看: 2777|回复: 6
打印 上一主题 下一主题

[求助] 老哥们能不能看一下我的代码为什么运行速度这么慢

[复制链接]

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
11 点
跳转到指定楼层
楼主
发表于 2023-2-21 17:19:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
积分区间一大结果就跑不出来,而且精度还差的很远,答案里的代码精度很高运行速度也快,不过看不懂他这个算法
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
11 点
沙发
 楼主| 发表于 2023-2-21 17:20:59 | 只看该作者
这个是我的
program main
    implicit none
    real(kind=4),parameter :: x=1000000000
    real(kind=4) i,pi,F,y,s
    F=0
    i=0
    s=1_4/x
    do while(i<x)
        y=1_4/(1_4+i*i)
        F=F+y*s
        i=i+s
    end do
    pi=4_4*F
    write(*,*) pi
    end program

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
11 点
板凳
 楼主| 发表于 2023-2-21 17:22:29 | 只看该作者
这个是答案里的
program pi_approx
implicit none
integer, parameter :: lk = selected_int_kind(12)
integer, parameter :: dk = selected_real_kind(13,100)
integer(lk), parameter :: nsteps = 1000000000_lk
integer(lk) :: i
real(dk) :: pi, step, sum, x

step = 1.0_dk / real(nsteps,dk)
sum = 0.0_dk
do i = 1, nsteps
  x = (i - 0.5_dk) * step
  sum = sum + 1.0_dk / (1.0_dk + x*x)
enddo
write(*,*) sum
pi = 4.0_dk * step * sum
write(*, '(a,f20.17)') 'approximation of pi is ', pi
end program

159

帖子

2

主题

1

精华

大师

Vim

F 币
961 元
贡献
469 点

规矩勋章

地板
发表于 2023-2-21 18:02:37 | 只看该作者
do while(i<x)
这里应该是i<1.0,如果 i<x 计算量翻了10亿倍

你这里用的单精度,可能在很大的x的时候会损失精度(i=i+s这一步,当i和s的比值大于10**7的时候,一般加法就会损失精度)
另外他这里用的是梯形法,你这算是矩形法,按理说精度差一点

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
11 点
5#
 楼主| 发表于 2023-2-21 18:44:27 | 只看该作者

他这里好像也不是梯形法,应该是被积函数中值,但是比较费解的是,原题积分上下限是0-无穷,可是这里答案x乘了一个step,他积分区间最后应该变成了0-1,还是求出了答案,我就理解不了了,恳请大佬指点

159

帖子

2

主题

1

精华

大师

Vim

F 币
961 元
贡献
469 点

规矩勋章

6#
发表于 2023-2-21 19:01:33 | 只看该作者
本帖最后由 Transpose 于 2023-2-21 19:03 编辑

取中间值就是梯形法

原函数是 atan(x),x=1就是pi/4,x=无穷 就是pi/2
另外这个积分区间[0,1)积分值是pi/4,最后乘以4就是pi了,没问题
如果积分区间是[0,无穷],那么积分值是pi/2,最后就需要乘以2,但是用数值的办法比较难精确算出来

你可以做一个换元,在[1,无穷]的时候令 t=1/x ,换完之后也就变回[0,1]了



5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
11 点
7#
 楼主| 发表于 2023-2-21 20:10:55 | 只看该作者
Transpose 发表于 2023-2-21 19:01
取中间值就是梯形法

原函数是 atan(x),x=1就是pi/4,x=无穷 就是pi/2

哦哦对对对,我一直以为是算法上的问题没往积分上想,感激不尽
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-26 11:30

Powered by Tencent X3.4

© 2013-2024 Tencent

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