<<課題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 |