数値計算法 課題2 プログラム例


<<課題2.1>>

ラグランジュの補間のプログラムを作りなさい.

プログラム例

使用言語 F-BASIC

print "Lagrange interpolation"
MAX_DATA%=100
dim X(MAX_DATA%),Y(MAX_DATA%) 'x:補間点 y:関数値
read M%
print "次数";M%
if M%-1>MAX_DATA% then
  print "次数が大きすぎます"
  stop
  end
else if M%< 0 then
  print "次数の指定が負の値です"
  stop
  end
endif
MIN=1E38
MAX=-1E38
for I=0 to M%
   read X(I),Y(I)
   if X(I)>MAX then MAX=X(I)
   if X(I)<MIN then MIN=X(I)
next I
print "補間する点 X(";MIN;"〜";MAX;")=";
input XI
if  XI<MIN then
   print "補間する点の位置が小さすぎます"
   stop
   end
else if XI>MAX then
   print "補間する点の位置が大きすぎます"
   stop
   end
endif
YI=0
for I=0 to M%
  NK=1
  for J=0 to M%
    if J<>I then 
       if X(I)=X(J) then
         print "同じ位置の補間点があります"
         stop
         end
       endif
       NK=NK*(XI-X(J))/(X(I)-X(J))
    endif
  next J
  YI=YI+Y(I)*NK
next I
print "補間値 Y(";XI;")="; YI
stop
end
'
'多項式の次数
data 10
'補間点,関数値 F=2/(1+9*XI*XI)-1
data -1.0, -0.80000000000000
data -0.8, -0.70414201183432
data -0.6, -0.52830188679245
data -0.4, -0.18032786885246
data -0.2,  0.47058823529412
data  0.0,  1.00000000000000
data  0.2,  0.47058823529412
data  0.4, -0.18032786885246
data  0.6, -0.52830188679245
data  0.8, -0.70414201183432
data  1.0, -0.80000000000000


<<課題2.2>>

次の関数についてm=10 (xi=-1.0,-0.8,...,0.8,1.0)とし x=0.3, 0.9 での補間値,関数値,誤差を求めなさい.

(1) f(x)=2exp(x-1)-1

分点 補間値 関数値 誤差
0.3 -0.006829 -0.006829 -2.72e-12 (参考値)
0.9 0.809674 0.809674 1.32e-10 (参考値)

関数 2exp(x-1)-1 と補間多項式のグラフ

図1 関数 2exp(x-1)-1 と補間多項式のグラフ

(2) f(x)=2/(1+9x^2)-1

分点 補間値 関数値 誤差
0.3 0.078691 0.104972 0.026281
0.9 0.035571 -0.758745 0.794316

関数 2/(1+9x^2)-1 と補間多項式のグラフ

図2 関数 2/(1+9x^2)-1 と補間多項式のグラフ


数値計算法に戻る