附録二 累裁招差之法
著者:梅谷 武
附録二 累裁招差之法のプログラム一覧。
作成:2013-09-04
更新:2013-09-04
更新:2013-09-04
# coding: utf-8 require 'mathn' require './poly1' def 一次相乗之法( 限数, 定積 ) len = 限数.length # 引数検査 if 限数.kind_of?(Array) if len < 2 raise ArgumentError, "一次相乗之法: 限数長不正" end else raise TypeError, "一次相乗之法: 限数型不正" end if 定積.kind_of?(Array) if len != 定積.length raise ArgumentError, "一次相乗之法: 定積長不正" end else raise TypeError, "一次相乗之法: 定積型不正" end 平積法 = Array.new for i in 1..(len - 1) 平積法.push( 限数[i] - 限数[i-1] ) end 平積実 = Array.new for i in 1..(len - 1) 平積実.push( 定積[i] - 定積[i-1] ) end 平積 = Array.new for i in 0..(平積法.length - 1) 平積.push( 平積実[i] / 平積法[i] ) end # 平積恒等性判定 flag = 1 if 平積.length > 1 for i in 1..(平積.length - 1) if 平積[0] != 平積[i] then flag = 0 end end end # 数表出力 p 限数; p 定積; p 平積法; p 平積実; p 平積 # 結果 if flag > 0 return [ 定積[0] - 平積[0] * 限数[0], 平積[0] ] else return 0 end end p Poly1( 一次相乗之法( [ 7, 11 ], [ 637/7, 957/11 ] ) ) p Poly1( 一次相乗之法( [ 5, 7, 16, 20 ], [ 15/5, 28/7, 136/16, 210/20 ] ) )
sampA01.rbの実行結果
[7, 11] [91, 87] [4] [-4] [-1] -X + 98 [5, 7, 16, 20] [3, 4, (17/2), (21/2)] [2, 9, 4] [1, (9/2), 2] [(1/2), (1/2), (1/2)] 1/2X + 1/2
# coding: utf-8 require 'mathn' require './poly1' def 二次相乗之法( 限数, 定積 ) len = 限数.length # 引数検査 if 限数.kind_of?(Array) if len < 3 raise ArgumentError, "二次相乗之法: 限数長不正" end else raise TypeError, "二次相乗之法: 限数型不正" end if 定積.kind_of?(Array) if len != 定積.length raise ArgumentError, "二次相乗之法: 定積長不正" end else raise TypeError, "二次相乗之法: 定積型不正" end 平積法 = Array.new for i in 1..(len - 1) 平積法.push( 限数[i] - 限数[i-1] ) end 平積実 = Array.new for i in 1..(len - 1) 平積実.push( 定積[i] - 定積[i-1] ) end 平積 = Array.new for i in 0..(平積法.length - 1) 平積.push( 平積実[i] / 平積法[i] ) end # 平積の恒等性判定 flag = 1 for i in 1..(平積.length - 1) if 平積[0] != 平積[i] then flag = 0 end end # 数表出力 p 限数; p 定積; p 平積法; p 平積実; p 平積 # 平積が恒等である場合 if flag > 0 return [ 定積[0] - 平積[0] * 限数[0], 平積[0] ] end # 平積が恒等でない場合 立積法 = Array.new for i in 2..(len - 1) 立積法.push( 限数[i] - 限数[i-2] ) end 立積実 = Array.new for i in 1..(平積.length - 1) 立積実.push( 平積[i] - 平積[i-1] ) end 立積 = Array.new for i in 0..(立積法.length - 1) 立積.push( 立積実[i] / 立積法[i] ) end # 立積の恒等性判定 flag = 1 if 立積.length > 1 for i in 1..(立積.length - 1) if 立積[0] != 立積[i] then flag = 0 end end end # 数表出力 p 立積法; p 立積実; p 立積 # 立積が恒等である場合 if flag > 0 y = Array.new for i in 0..(len - 1) y.push( 定積[i] - 立積[0] * 限数[i] * 限数[i] ) end l = 一次相乗之法( 限数, y ) l << 立積[0] return l else return 0 end end p Poly1( 二次相乗之法( [ 10, 20, 30, 40, 50 ], [ 48841000/10, 92576000/20, 131019000/30, 163984000/40, 191285000/50 ] ) ) p Poly1( 二次相乗之法( [ 3, 8, 11 ], [ 14/3, 204/8, 506/11 ] ) )
sampA02.rbの実行結果
[10, 20, 30, 40, 50] [4884100, 4628800, 4367300, 4099600, 3825700] [10, 10, 10, 10] [-255300, -261500, -267700, -273900] [-25530, -26150, -26770, -27390] [20, 20, 20] [-620, -620, -620] [-31, -31, -31] [10, 20, 30, 40, 50] [4887200, 4641200, 4395200, 4149200, 3903200] [10, 10, 10, 10] [-246000, -246000, -246000, -246000] [-24600, -24600, -24600, -24600] -31X^2 - 24600X + 5133200 [3, 8, 11] [(14/3), (51/2), 46] [5, 3] [(125/6), (41/2)] [(25/6), (41/6)] [8] [(8/3)] [(1/3)] [3, 8, 11] [(5/3), (25/6), (17/3)] [5, 3] [(5/2), (3/2)] [(1/2), (1/2)] 1/3X^2 + 1/2X + 1/6
# coding: utf-8 require 'mathn' require './poly1' def 三次相乗之法( 限数, 定積 ) len = 限数.length # 引数検査 if 限数.kind_of?(Array) if len < 4 raise ArgumentError, "三次相乗之法: 限数長不正" end else raise TypeError, "三次相乗之法: 限数型不正" end if 定積.kind_of?(Array) if len != 定積.length raise ArgumentError, "三次相乗之法: 定積長不正" end else raise TypeError, "三次相乗之法: 定積型不正" end 平積法 = Array.new for i in 1..(len - 1) 平積法.push( 限数[i] - 限数[i-1] ) end 平積実 = Array.new for i in 1..(len - 1) 平積実.push( 定積[i] - 定積[i-1] ) end 平積 = Array.new for i in 0..(平積法.length - 1) 平積.push( 平積実[i] / 平積法[i] ) end # 平積の恒等性判定 flag = 1 for i in 1..(平積.length - 1) if 平積[0] != 平積[i] then flag = 0 end end # 数表出力 p 限数; p 定積; p 平積法; p 平積実; p 平積 # 平積が恒等である場合 if flag > 0 return [ 定積[0] - 平積[0] * 限数[0], 平積[0] ] end # 平積が恒等でない場合 立積法 = Array.new for i in 2..(len - 1) 立積法.push( 限数[i] - 限数[i-2] ) end 立積実 = Array.new for i in 1..(平積.length - 1) 立積実.push( 平積[i] - 平積[i-1] ) end 立積 = Array.new for i in 0..(立積法.length - 1) 立積.push( 立積実[i] / 立積法[i] ) end # 立積の恒等性判定 flag = 1 if 立積.length > 1 for i in 1..(立積.length - 1) if 立積[0] != 立積[i] then flag = 0 end end end # 数表出力 p 立積法; p 立積実; p 立積 # 立積が恒等である場合 if flag > 0 y = Array.new for i in 0..(len - 1) y.push( 定積[i] - 立積[0] * 限数[i] * 限数[i] ) end l = 一次相乗之法( 限数, y ) l << 立積[0] return l end # 立積が恒等でない場合 三乗積法 = Array.new for i in 3..(len - 1) 三乗積法.push( 限数[i] - 限数[i-3] ) end 三乗積実 = Array.new for i in 1..(立積.length - 1) 三乗積実.push( 立積[i] - 立積[i-1] ) end 三乗積 = Array.new for i in 0..(三乗積法.length - 1) 三乗積.push( 三乗積実[i] / 三乗積法[i] ) end # 三乗積の恒等性判定 flag = 1 if 三乗積.length > 1 for i in 1..(三乗積.length - 1) if 三乗積[0] != 三乗積[i] then flag = 0 end end end # 数表出力 p 三乗積法; p 三乗積実; p 三乗積 # 三乗積が恒等である場合 if flag > 0 y = Array.new for i in 0..(len - 1) y.push( 定積[i] - 三乗積[0] * 限数[i] * 限数[i] * 限数[i] ) end l = 二次相乗之法( 限数, y ) l << 三乗積[0] return l end end p Poly1( 三次相乗之法( [ 5, 11, 16, 18 ], [ 57100/5, 44374/11, 183424/16, 345024/18 ] ) )
sampA03.rbの実行結果
[5, 11, 16, 18] [11420, 4034, 11464, 19168] [6, 5, 2] [-7386, 7430, 7704] [-1231, 1486, 3852] [11, 7] [2717, 2366] [247, 338] [13] [91] [7] [5, 11, 16, 18] [10545, -5283, -17208, -21656] [6, 5, 2] [-15828, -11925, -4448] [-2638, -2385, -2224] [11, 7] [253, 161] [23, 23] [5, 11, 16, 18] [9970, -8066, -23096, -29108] [6, 5, 2] [-18036, -15030, -6012] [-3006, -3006, -3006] 7X^3 + 23X^2 - 3006X + 25000
Published by SANENSYA Co.,Ltd.