Vectors

Vectors

how lattices appear in crypto 떠들어보신다고 함(운동 갔다가 카공 하려니까 기운 빠져서 날카로움)

linear algebra에 대해 짚고 넘어가야 하는데(선형대수학이라 함)

벡터 V는 필드 F에서 이진수 연산으로 구성된 set(집합)이다.
v∈V 그리고 a(스칼라) ∈ F일 때, 두 벡터 간의 덧셈은 다른 벡터를 생성한다: v+w=z
v,w,z ∈V 그리고 vectorscalar 곱셈은 벡터를 생성한다: av=w와 a∈ F

두 평면 벡터가 있을 때, v∈V는 숫자들의 쌍으로 표현 가능하다(좌표 말하는듯) v=(a,b) (a,b는 R에 속함)
이때 덧셈과 곱셈은 다음과 같이 표현이 가능하다.
v+w=(a,b)+(c,d)=(a+c,b+d)
cv=c(a,b)=(ac, bc)
그리고 inner product(요소 말하는 건가내적, 두 벡터를 가지고 scalar를 뱉는) 다음과 같이 표현 가능
v
w=a (v,w ∈V, a∈ F)
근데 요렇게도 가능함 -> vw=(a,b)(c,d)=ac+bd

Q. 3차원에서도 생각해보라 함
v=(2,6,3), w=(1,0,0), u=(7,7,2)일 때, 3(2v-w)2u 계산하기
풀어서 써보면.. 2u(6v-3w) 다 풀진 않았네 암튼암튼 괄호 안 먼저 계산
6v-3w=(12,36,18)+(-3,0,0)=(9,36,18)
(14,14,4)(9,36,18)=(126,504,72)
안되는데..

  • 라업 내용
    내적이 되니까 vw=(a,b)(c,d)=ac+bd 이 식 가져와서 126+504+72=702
    그리고 참고한 라업은 python으로 풀었더라고.. 나도 파이썬으로 풀어야겟드아..
def scalar(a,v):
    #곱셈 경우만 생각 
    for i in range(len(v)):
        v[i]=a*v[i]
    return v

def twovecmul(v,w):
    for i in range(len(v)):
        v[i]=v[i]*w[i]
    return v

def twovecadd(v,w):
    for i in range(len(v)):
        v[i]=v[i]+w[i]
    return v

def innerproduct(v):
    ans=0
    for i in v:
        ans=ans+i
    return ans 

'''
3*(2v-w)*2u를 av 꼴로 나타내면...
6u(2v-w)
'''
v=[2,6,3]
w=[1,0,0]
u=[7,7,2]

print(innerproduct(twovecmul(scalar(6,u),twovecadd(scalar(2,v),scalar(-1,w)))))