module VectorCalc #●加える def self.add(v1 , v2) tarray = [] v1.each_index do |i| tarray.push(v1[i] + v2[i]) end return tarray end #●加える def self.add2(array) array.inject {|result , v| add(result ,v)} end #●加える def self.add3(array,array2) subtract(add2(array) , add2(array2)) end #●引く def self.subtract(v1 , v2) tarray = [] v1.each_index do |i| tarray.push(v1[i] - v2[i]) end return tarray end #●スカラーの作用 def self.scalar_action(c , array) array.collect{|v| c * v} end #●L2ノルム def self.norm2(array) Math.sqrt(array.inject(0) {|result , v| result + v ** 2}) end #●正規化 def self.normalize(v) self.scalar_action((1 / self.norm2(v)) , v) end #●内積 def self.inner_product(v1 ,v2) sum = 0 v1.each_index do |i| sum += v1[i] * v2[i] end return sum end #●ベクトルへの射影 def self.projection1(base_vector ,vector) nbase = normalize(base_vector) return scalar_action(inner_product(vector ,nbase) , nbase) end end