program graph2 implicit none call init call viewport(0.2,0.2,0.8,0.8) call xyworld(0.0,-1.0,1.0,1.0) call frame call plotd call fin stop end real function f(x) implicit none real(4) x,pi pi=atan(1.0)*4.0 f=exp(-x)*sin(4.0*pi*x) return end subroutine plotd implicit none real(4),dimension(0:20)::x1,y1 integer i integer,parameter::n=20 real(4) f do i=0,n x1(i)=real(i)/real(n) y1(i)=f(x1(i)) end do call linewidth(1.5) call linety(1) call setgray(0.0) call plot(x1(0),y1(0),3) do i=1,n-2 call spline(x1(i-1),y1(i-1),x1(i),y1(i),x1(i+1),y1(i+1),x1(i+2),y1(i+2),-1) end do call spline(x1(n-3),y1(n-3),x1(n-2),y1(n-2),x1(n-1),y1(n-1),x1(n),y1(n),0) call spline(x1(n-3),y1(n-3),x1(n-2),y1(n-2),x1(n-1),y1(n-1),x1(n),y1(n),1) call stroke return end subroutine frame implicit none real(4) x,y,dx,dy integer,parameter::nx=2,ny=2 integer ix,iy call linewidth(1.0) call rect(0.0,-1.0,1.0,1.0) call stroke do ix=1,nx*10-1 x=real(ix)/real(nx*10) dy=1.0 if(ix/10*10==ix)then call setgray(0.5) else call setgray(0.8) end if call plot(x,-dy,3) call plot(x,dy,2) call stroke end do do iy=1,ny*10-1 y=real(iy)/real(ny*10)*2.0-1.0 dx=1.0 if(iy/10*10==iy)then call setgray(0.5) else call setgray(0.8) end if call plot(0.0,y,3) call plot(dx,y,2) call stroke end do call setgray(0.0) call textx(0.75,0.0,'x') call textx(0.05,0.02,'0') call textx(0.55,0.02,'0.5') call textx(0.95,0.02,'1') call texty(-0.01,0.5,'y') call texty(0.0,-1.0,'-1') call texty(0.0,0.0,'0') call texty(0.0,1.0,'1') return end