彭的書有現成的程序。包括用sgl繪圖,函數可以自己變成多項式形式,可以參考:
模塊插值_實用程序
使用sgl
隱式無
打字點
真實的x,y
結束類型
實數,參數::PI=3.14159
實數,參數::xmin = 0.0,xmax = PI*3.0
整數,參數::N = 10,NP = 100
類型(點),保存::數據(N)
類型(點),保存::插值(NP)
real,save :: table(N,N),寬度
包含
!生成序列
子程序generated data(func)
實數,外部::func
實數r
整數I
寬度= (xmax-xmin)/(N-1)
r = 0
do i=1,N
數據(i)%x = r
數據(i)%y =函數(r)
r = r+寬度
結束do
結束子程序
!創建差異表
子程序BuildTable()
整數行,列,I
!實表(N,N)
表格= 0
do i=1,N
table(i,1) = datas(i)%y
結束do
do col=2,N
do row=1,N-col+1
表(行,列)=表(行+1,列-1) -表(行,列-1)
結束do
結束do
結束子程序
實函數牛頓(x,th,num)
真實x
整數th,num
實數、總和、系數
整數f,I,j
if(th+num-1 & gt;n)然後
寫(*,*)“數據點不足”
返回
如果…就會結束
牛頓=表(th,1)
s =(x-數據(th)% x)/寬度
f = 1
系數= 1.0
do i=1,num-1
f = f*i
coeff = coeff*(s-i+1)
牛頓=牛頓+系數*表(th,I+1)/實數(f)
結束do
結束功能
!繪圖功能
子程序顯示()
real,parameter :: size = 0.1
整數I
調用sglClearBuffer()
致電sglColor3i(255,255,255)
!用線段連接所有插值點。
do i=1,NP-1
調用sglLineV( interpolate(i)%x,interpolate(i)%y,& amp
插值(i+1)%x,插值(i+1)%y
結束do
調用sglColor3i(255,0,0)
!畫出n個數據點的位置
do i=1,N
調用sglLineV( datas(i)%x-size,datas(I)% y-size & amp;
數據(I)% x+大小,數據(I)% y+大小)
調用sglLineV( datas(i)%x+size,datas(I)% y-size & amp;
數據(i)%x大小,數據(I)% y+大小)
結束do
調用sglUpdateBuffer()
結束子程序
末端模塊
程序主
使用插值工具
隱式無
真實的、內在的::罪惡
真實xinc,x
整數I
調用GenerateData(sin)!生成數據點
調用BuildTable()
x=0
xinc = (xmax-xmin)/(NP-1)
do i=1,NP
插值(i)%x = x
插值(i)%y =牛頓(x,1,N)!插值f(x)的值
x = x+xinc
結束do
調用sglDisplaySub(顯示)
調用sglSetVirtual(xmin,2.0,xmax,-2.0)
致電sglCreateWindow(100,100,400,400,1)
調用sglMainLoop()
停止
結束程序