24小时热门版块排行榜    

查看: 3641  |  回复: 2

weivichen

铁虫 (初入文坛)

[求助] sin函数的傅里叶变换

我想做sin函数的傅里叶变换 可是程序没有error,但是运行就说那个exe文件停止工作,程序如下,好像很多问题的样子,新手求指教!
program main
use textgraphlib
implicit none
real,parameter::endx=3.1,startx=0.0,xinc=0.1
integer,parameter::maxx=32,maxy=20
real ::x,px=0.0,py=0.0
integer i,num,fx,fy,xx
real,allocatable::datax(,datay(
x=startx

do i=1,maxx
x=px
py=sin(x)
datax(i)=px
datay(i)=py
px=px+xinc
end do

call four1(datay,16,1)
call setscreen(maxx,maxy)


  do xx=1,maxx
    fy=datay(xx)
    call putchar(xx,fy)
  end do
  
  call updatescreen()
   stop
   end program

subroutine four1(data1,nn,isign)
integer isign,nn
real data1(2*nn)
integer i,istep,j,m,mmax,n
real tempi,tempr
double precision theta,wi,wpi,wpr,wr,wtemp
n=2*nn
j=1
do  i=1,n,2
    if(j.gt.i)then
        tempr=data1(j)
        tempi=data1(j+1)
        data1(j)=data1(i)
        data1(j+1)=data1(i+1)
        data1(i)=tempr
        data1(i+1)=tempi
        end if
        m=n/2
1        if((m.ge.2).and.(j.gt.m)) then
           j=j-m
           m=m/2
           goto 1
           end if
           j=j+m
           end do
           mmax=2
2    if(n.gt.mmax) then
      istep=2*mmax
          theta=6.28318530717959d0/(isign*mmax)
          wpr=-2.d0*sin(0.5d0*theta)**2
          wpi=sin(theta)
          wr=1.d0
          wi=0.d0
          do  m=1,mmax,2
          do  i=m,n,istep
              j=i+mmax
                  tempr=sngl(wr)*data1(j)-sngl(wi)*data1(j+1)
                  tempi=sngl(wr)*data1(j+1)+sngl(wi)*data1(j)
                  data1(j)=data1(i)-tempr
                  data1(j+1)=data1(i+1)-tempi
                  data1(i)=data1(i)+tempr
                  data1(i+1)=data1(i+1)+tempi
                  end do
                  wtemp=wr
                  wr=wr*wpr-wi*wpi+wr
                  wi=wi*wpr+wtemp*wpi+wi
                  end do
                  mmax=istep
  goto 2
  end if
  return
  end
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

virtualzx

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
没看你的程序,不过sin的傅立叶变换直接是两个delta函数之差,为啥要写代码算呢

如果你计算的话在delta函数的原点上都是无穷大,恐怕反而会出问题。
2楼2012-11-03 05:03:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

weivichen

铁虫 (初入文坛)

引用回帖:
2楼: Originally posted by virtualzx at 2012-11-03 05:03:53
没看你的程序,不过sin的傅立叶变换直接是两个delta函数之差,为啥要写代码算呢

如果你计算的话在delta函数的原点上都是无穷大,恐怕反而会出问题。

sin函数是来做实验用的,然后取一小段出来看看对不对,那应该是怎么写呢
3楼2012-11-03 18:45:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 weivichen 的主题更新
信息提示
请填处理意见