<<課題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 (参考値) |
| 分点 | 補間値 | 関数値 | 誤差 |
| 0.3 | 0.078691 | 0.104972 | 0.026281 |
| 0.9 | 0.035571 | -0.758745 | 0.794316 |
