第一周:结合李录的计算物理学学习FORTRAN语言,这周的任务是插值函数,大致编写了四个小时,编写了一个双层循环的插值函数,进行了六次插值计算例题。
例题如下:
编写代码如下:
program main
implicit none
integer (8)::n,res
open(unit=10,file="data.txt",status="old")
read(10,*)n
call haha(n,res)
open(unit=11,file="result.txt",status="new")
write(11,*)res
stop
end program main
!******************************
recursive subroutine haha(n,res)
implicit none
integer(8),intent(in)::n
integer(8),intent(out)::res
integer(8)::temp
if(n<=1)then
res=1
else
call haha(n-1,temp)
res=n*temp
end if
return
end subroutine
!******************************
subroutine interpolyb(x1,x,n,yy)
integer k,j
integer,intent(in)::n
real,intent(in)::x1(n+1)
real,intent(in)::x
real,intent(out)::yy
real::yy(n+1)
yy(1)=1;
do k=2,n+1
yy(1)=yy(1)*(x-x1(k))/(x1(1)-x1(k))
end do
yy(n+1)=1;
do k=1,n
yy(n+1)=yy(n+1)*(x-x1(k))/(x1(n+1)-x1(k));
end do
do j=2:n
yy(j)=1
do k=1,n+1
yy(j)=yy(j)*(x-x1(k))/(x1(j)-x1(k))
end do
end do
return
end subroutine interpolyb
subroutine interp6(x1,y1,x,n,y)
real,intent(out)::y
real yy
integer,intent(in)::n
real,intent(in)::x1(n+1)
real,intent(in)::y1(n+1)
real,intent(in)::x
call interpolyb(x1,x,n,yy)
y=y1*yy
end subroutine interp6
呈现结果:利用origin绘制了简单的折线图