Fortran Coder

查看: 6154|回复: 4
打印 上一主题 下一主题

[通用算法] 求助检查傅里叶变换程序

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2017-12-13 10:50:33 | 显示全部楼层
看起来,似乎有2个问题。
1. 数组越界。你的数组是从 1:1001,但是循环从 0 开始到 1000,会越界。你使用的编译器没有检查出这个问题,你可以考虑换一个编译器。
2. 很奇怪的是,我觉得你的结果似乎没什么问题。但是你需要理解实序列的DFT,结果只有一半的频率是有效的。你可以把 X 换做频率,而非数据序数。与 orgin 的结果对比,就会差不多一致了。

另外,给你一个建议。如果你的代码里大量出现 1000 这个数字,对于将来修改,会是很困难的。建议你用一个整形常量表示,比如 Integer , parameter :: N = 1000
这样,将来容易修改,如下代码:
[Fortran] 纯文本查看 复制代码
program fourier
  implicit none
  real(4)::dt,t,fct
  character::u
  integer::i,w
  Integer , parameter :: N = 1000
  real(4),dimension(0:N)::ct
  open(12,file='vacfhi.txt')
  open(13,file='ft.txt')
  do i=0,N
    read(12,*)u,ct(i)
  enddo
  do w=0,N
    dt=0.012
    t=0
    fct=0
    do i=0,N
      !if ( t <(N+1) ) then
        fct=fct+2*(ct(i)*cos(w*t)*dt)
        t=t+dt
      !endif
    enddo
    write(13,*)w/(0.012/N)*33,fct
  enddo
  close(12)
  close(13)
end
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-16 15:05

Powered by Tencent X3.4

© 2013-2024 Tencent

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