Ruby で(1変数の)多項式の展開を行いたくなって、とりあえず
「0次から順に係数を取り出した配列を用いて計算する」
コードを書いてみました。
Ruby
1def add(f_ary, b_ary) 2 s1, s2 = f_ary.size, b_ary.size 3 if s1 >= s2 4 ary = f_ary.clone 5 (0..s2 - 1).each{|i| 6 ary[i] += b_ary[i] 7 } 8 else 9 ary = b_ary.clone 10 (0..s1 - 1).each{|i| 11 ary[i] += f_ary[i] 12 } 13 end 14 ary 15end 16 17def sub(f_ary, b_ary) 18 s1, s2 = f_ary.size, b_ary.size 19 if s1 >= s2 20 ary = f_ary.clone 21 (0..s2 - 1).each{|i| 22 ary[i] -= b_ary[i] 23 } 24 else 25 ary = b_ary.clone.map{|i| -i} 26 (0..s1 - 1).each{|i| 27 ary[i] += f_ary[i] 28 } 29 end 30 ary 31end 32 33def mul(f_ary, b_ary) 34 s1, s2 = f_ary.size, b_ary.size 35 ary = Array.new(s1 + s2 - 1, 0) 36 (0..s1 - 1).each{|i| 37 (0..s2 - 1).each{|j| 38 ary[i + j] += f_ary[i] * b_ary[j] 39 } 40 } 41 ary 42end 43 44def power(ary, n) 45 return [1] if n == 0 46 mul(ary, power(ary, n - 1)) 47end 48 49a = [3, 0, 1] 50b = [2, 3] 51c = [1, 1] 52p add(a, b) 53p add(b, a) 54p sub(a, b) 55p sub(b, a) 56p mul(a, b) 57p mul(b, a) 58p power(c, 1) 59p power(c, 2) 60p power(c, 3)
もっと数式処理システムのように便利な方法があれば教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。