Span, Vector Projection

형준·2021년 1월 17일
0

Linear Algebra

목록 보기
2/6

출처 : https://www.youtube.com/watch?v=9F4PZ_1orF0

xy좌표계의 basis vector : i^,j^\hat{i} , \hat j 기저벡터.

스칼라를 달리함으로써 다른 2차원벡터를 다 얻을 수 있어.

여기서 스칼라를 달리하면서 다른벡터를 얻는 과정을 두 벡터의 선형결합이라고 부른다.

두 basis vector가 같은 직선상에 위치한다면, 결과벡터의 끝점이 원점을 지나는 한 직선으로 제한되어버린다.

두 벡터가 영벡터인경우 → 원점에 갇힘

span

The set of all possible vectors that you can reach with a linear combination of a given pair of vectors called the span of those two vectors

주어진 벡터 쌍의 선형결합으로 다다를 수 있는 모든 결과벡터의 집합을 두 벡터의 생성(선형생성, span)이라고 한다.

두 벡터가 일직선위에 있다면 그들의 span은 단지 직선이다.

Linearly dependent 선형 종속

u=av+bw\vec{u} = a\vec{v} + b\vec{w}
벡터들 중 span의 축소 없이 하나를 제거해도 되는경우

벡터 중 하나가 다른 벡터들의 선형결합으로 표현될 수 있다는 말 (그 벡터는 이미 다른 벡터들의 span에 속하므로)

Linearly independent 선형 독립

uav\vec{u} \neq a\vec{v} (모든 a에 대하여)
uav+bw\vec{u} \neq a\vec{v} + b\vec{w} (모든 a, b에 대하여)

출처 : [Linear Algebra] Lecture 9 선형 독립(Linear independence), Span, 기저(Basis) 그리고 차원(Dimension)

Vector Projection

두개의 벡터에서 둘 중 하나로 전사시키는것!

Vector Projection

(R2\mathbb{R}^{2} 공간에서의) Linear Projections
임의의 두 벡터 a,b\vec a, \vec b 가 있을 때, b\vec b에 Projection된 벡터의 길이를 μ\vec \mu 라고하자.
이 둘 사이의 각도를 θ\theta라고 하면, 코사인법칙에 의하여
cosθ=아래길이빗변=μa\cos{\theta} ={{아래길이}\over {빗변} } ={|\vec \mu| \over {|\vec a|} } =abab\vec {a}\cdot{\vec b}\over{|\vec a|\cdot|\vec{b}|} 이다.
이때, μ|\vec \mu|에 대하여 정리하면, μ=abb|\vec \mu| = {\vec a \cdot \vec b \over |\vec b|} 이다.
일단 이 상황에서, b\vec b방향의 단위벡터 b^\hat b 를 구하면, b^=μ^=1bb{\hat b} = {\hat \mu} = {{1\over{|\vec b|}}\cdot{\vec b}} 이므로, 최종 !!
μ=abb2b{\vec \mu }= {{\vec {a} \cdot \vec {b} \over {|\vec b|^2} }\cdot{\vec b}} 이다.
여기서 앞부분의 abb2{{\vec a \cdot \vec b \over {|\vec{ b}|^2} }}스칼라값이다.!

2차원 벡터 프로젝션해보기

y=xy=x 라는 벡터에 projection한다.

v = [7, 4]

def vecmul(w,v):
    try: return np.array(list(map(lambda x : x[0]*x[1], zip(w,v))))
    except:
        if type(w)!=list: return list(map(lambda x :w*x , v))
        else: return list(map(lambda x : v*x, w))

def vecdot(w,v):
    try: return sum(list(map(lambda x : x[0]*x[1], zip(w,v))))
    except:
        if type(w)!=list: return sum(list(map(lambda x: w*x, v)))
        elif type(v)!=list: return sum(list(map(lambda x: v*x, w)))

def vecdiv(w,v):
    return np.array(list(map(lambda x : x[0]/x[1], zip(w,v))))

def myProjection(w , v=[1,1] ) :
    # 채우세요.
    w_prime = vecmul( vecdot(w,v) / vecdot(v,v) ,  v )

    return w_prime

# myProjection([7,4])
vprime = myProjection(v)
vprime

v=(7,4)\vec v = (7,4)(5,5)(5,5)가 되었다


plt.figure(figsize=(10,10))

x_minus_proj = list(map(lambda x : x[1]-x[0], zip(v,vprime)))

plt.plot(x_vals,y_vals,'--',color='r')
plt.xlim(-1,10)
plt.ylim(-1,10)
plt.arrow(0,0,v[0],v[1], head_width=.2, linewidth=3,head_length=.2, color='b')

plt.arrow(0,0,vprime[0],vprime[1], ls='--', head_width=.2, head_length=.2, color='g',linewidth=3)

plt.arrow(v[0],v[1],x_minus_proj[0],x_minus_proj[1], head_width=.2 , head_length=.2, color='y',linewidth=2)
plt.grid()
# axes.figure.figsize=(20,20)

profile
소프트웨어에 관심이 많은 학생입니다. 반갑습니다.

0개의 댓글

관련 채용 정보