2023年10月1日日曜日

231001

Ruby


Rational function

f, g を多項式とする。
f/g の計算は、1/gと大差がない。 

def I(ary, n)
  a = [1]
  i = 0
  while i < n
    a << -(0..i).inject(0){|s, j| s + ary[1 + i - j] * a[j]}
    i += 1
  end
  a
end

def Rational_function(ary0, ary, n)
  a = ary0.clone
  i = 0
  while i < n
    a[i + 1] -= (0..i).inject(0){|s, j| s + ary[1 + i - j] * a[j]}
    i += 1
  end
  a
end

a = [1, -2] + [0] * 9

p I(a, 10)

# a/a = 1
p Rational_function(a, a, 10)
p a

b = [0, 0, 1] + [0] * 8
p Rational_function(b, a, 10)
p b

出力結果
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 2, 4, 8, 16, 32, 64, 128, 256]
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]