Created
June 13, 2012 09:27
-
-
Save castaneai/2923055 to your computer and use it in GitHub Desktop.
グラム・シュミットの正規直交化法
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf8 -*- | |
import math | |
''' | |
ベクトルの内積を計算する | |
''' | |
def inner(vector1, vector2): | |
return sum([component1 * component2 for component1, component2 in zip(vector1, vector2)]) | |
''' | |
ベクトルのノルムを計算する | |
''' | |
def norm(vector): | |
return math.sqrt(sum([component * component for component in vector])) | |
''' | |
ベクトルに対してスカラー倍演算をする | |
''' | |
def scalar_multiplication(vector, scalar): | |
return tuple([scalar * component for component in vector]) | |
''' | |
ベクトルの足し算をする | |
''' | |
def vector_add(vector1, vector2): | |
return tuple([component1 + component2 for component1, component2 in zip(vector1, vector2)]) | |
''' | |
ベクトルの引き算をする | |
''' | |
def vector_sub(vector1, vector2): | |
vector2_temp = tuple([-1 * component for component in vector2]) | |
return vector_add(vector1, vector2_temp) | |
''' | |
単位ベクトルを求める | |
''' | |
def vector_unit(vector): | |
return scalar_multiplication(vector, 1 / norm(vector)) | |
''' | |
グラム・シュミットの正規直交化法を行う | |
''' | |
def orthonormalization(vector_list): | |
result_list = [] | |
for index, vector in enumerate(vector_list): | |
if index == 0: | |
result = vector_unit(vector) | |
else: | |
unit_vector = vector_unit(vector_list[index - 1]) | |
projection_vector = scalar_multiplication(unit_vector, inner(vector, unit_vector)) | |
temp_vector = vector_sub(vector, projection_vector) | |
result = vector_unit(temp_vector) | |
result_list.append(result) | |
return result_list | |
if __name__ == '__main__': | |
vector_list = [ | |
(1,1,0), | |
(0,-1,1), | |
(1,1,1) | |
] | |
print orthonormalization(vector_list) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment