#***************************/
# 補間法(ラグランジュ) */
# coded by Y.Suganuma */
#***************************/
#*********************************/
# ラグランジュ補間法 */
# n : 次数(n=1は線形補間) */
# x, y : (n+1)個の点の座標 */
# x1 : 補間したい点のx座標 */
# return : 補間結果 */
#*********************************/
def Lagrange(n, x, y, x1)
y1 = 0.0
for i1 in 0 ... n+1
s1 = 1.0
s2 = 1.0
for i2 in 0 ... n+1
if i2 != i1
s1 *= (x1 - x[i2])
s2 *= (x[i1] - x[i2])
end
end
y1 += y[i1] * s1 / s2
end
return y1
end
x = Array.new(3)
y = Array.new(3)
# 線形補間
n = 1
x[0] = 0.0
x[1] = 2.0
y[0] = 0.0
y[1] = 4.0
printf("線形補間\n")
x1 = 0.0
for i1 in 0 ... 9
y1 = Lagrange(n, x, y, x1)
printf(" x %f y %f\n", x1, y1)
x1 += 0.25
end
# 2次補間
n = 2
x[0] = 0.0
x[1] = 1.0
x[2] = 2.0
y[0] = 0.0
y[1] = 1.0
y[2] = 4.0
printf("2次補間\n")
x1 = 0.0
for i1 in 0 ... 9
y1 = Lagrange(n, x, y, x1)
printf(" x %f y %f\n", x1, y1)
x1 += 0.25
end