반응형
선형대수 Python 과제3 풀이
벡터 u,v 가 span하는 영역 그려보기.
세 번째 과제는 벡터 u, v가 span하는 영역을 파이썬을 이용하여 이미지를 그려보는(플라팅) 것입니다.
1번
이번 과제에 필요한 라이브러리를 import 하세요.
a) numpy 라이브러리
b) matplotlib의 pyplot 라이브러리
1
2
3
4
5
6
7
|
# 01
import numpy as np
from mpl_toolkits import mplot3d
%matplotlib inline
import random
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
|
cs |
2번
이어서 u, v row 벡터(3x1)를 정의하세요.
1
2
3
|
# 02
v = [2,6,5]
u = [6,3,1]
|
cs |
3번
이어서 fig와 ax를 정의하고 3차원 공간을 plot를 하세요. 이 때 아무것도 없는 빈 공간 (empty space)이 출력됩니다.
파이썬 스크립트 (Python Script) 를 사용하여 plot하려면 코드 마지막에 plt.show() 를 추가해주세요.
1
2
3
|
# 03
fig = plt.figure()
ax = plt.axes(projection='3d')
|
cs |
4번
이어서 자신의 학번과 영어이름으로 제목을 달고 각 축(axis)의 범위(range)를 0~8로 지정하고 각 축에 X, Y, Z 이름을 붙이세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 04
fig = plt.figure()
ax = plt.axes(projection='3d')
plt.title('12345678 Lee Park Choi')
# Labelling X-Axis
ax.set_xlabel('X')
ax.set_xlim([0,8])
ax.set_ylabel('Y')
ax.set_ylim([0,8])
ax.set_zlabel('Z')
ax.set_zlim([0,8])
plt.show()
|
cs |
5번
이어서 아래 조건에 맞게 두 벡터를 그리고 이름을 붙여주세요.
u벡터의 화살표는 빨갛게 (red)
v벡터의 화살표는 파랗게 (blue)
arrow_length_ratio는 0.1 (=.1)
글자 크기 (font size)는 15으로
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 05
fig = plt.figure()
ax = plt.axes(projection='3d')
plt.title('12345678 Mayweather')
ax.set_xlabel('X');ax.set_xlim([0,8]);ax.set_ylabel('Y');
ax.set_ylim([0,8]);ax.set_zlabel('Z');ax.set_zlim([0,8])
start = [0,0,0]
ax.quiver(start[0], start[1], start[2], v[0], v[1], v[2], arrow_length_ratio=.1, color='blue')
ax.quiver(start[0], start[1], start[2], u[0], u[1], u[2], arrow_length_ratio=.1, color='red')
ax.text(v[0], v[1], v[2], "v", zdir=None, size=15)
ax.text(u[0], u[1], u[2], "u", zdir=None, size=15)
plt.show()
|
cs |
6번
x, y, z에 대해 x, y는 미지수입니다. 외적을 이용하여 벡터 u, v가 span하는 평면의 법선벡터를 구하고 이를 바탕으로 원점을 지나고 법선벡터에 수직인 평면의 방정식을 z에 대해 표현하세요.
이어서, 아래 코드를 이용하여 표현한 식을 코드에 그대로 대입하세요.
1
2
3
4
5
|
x, y = np.meshgrid(np.arange(9), np.arange(9)) # x, y는 미지수라고 생각하세요. (0~8 범위의 정수)
# ======= u, v의 법선벡터를 찾으세요. (np.cross를 찾아보고, 사용하세요) ========
z = # ======== 법선 벡터의 성분과, x, y를 이용하여 평면의 방정식을 적으세요. =========
ax.plot_surface(x, y, z, alpha=0.5) # 평면을 plot합니다. alpha는 불투명도
ax.view_init(elev=15., azim=-120) # 보이는 각도를 조절합니다.
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# 06
fig = plt.figure()
ax = plt.axes(projection='3d')
plt.title('12345678 Word Master Choi')
ax.set_xlabel('X');ax.set_xlim([0,8]);ax.set_ylabel('Y');ax.set_ylim([0,8]);ax.set_zlabel('Z');ax.set_zlim([0,8])
v = [2,6,5]
u = [6,3,1]
start = [0,0,0]
ax.quiver(start[0], start[1], start[2], v[0], v[1], v[2], arrow_length_ratio=.1, color='blue')
ax.quiver(start[0], start[1], start[2], u[0], u[1], u[2], arrow_length_ratio=.1, color='red')
ax.text(v[0], v[1], v[2], "v", zdir=None, size=15)
ax.text(u[0], u[1], u[2], "u", zdir=None, size=15)
point = np.array([2, 6, 5])
normal = np.cross(u,v)
# a plane is a*x+b*y+c*z+d=0
# [a,b,c] is the normal. Thus, we have to calculate
# d and we're set
d = -point.dot(normal)
# create x,y
xx, yy = np.meshgrid(range(9), range(9))
# calculate corresponding z
z = (-normal[0] * xx - normal[1] * yy - d) * 1. /normal[2]
# plot the surface
fig.gca(projection='3d').plot_surface(xx, yy, z, alpha=0.5)
ax.plot_surface(xx, yy, z, alpha=0.5) # 평면을 plot합니다. alpha는 불투명도
ax.view_init(elev=15., azim=-120) # 보이는 각도를 조절합니다.
plt.show()
|
cs |
반응형
'공부 > 파이썬 Python' 카테고리의 다른 글
sympy 심파이 튜토리얼 (0) | 2022.05.21 |
---|---|
ipywidgets 인터랙션 함수 작성 (Python ipywidgets) (0) | 2022.05.21 |
파이썬으로 문장을 모스 코드 mp3로 변환하기 (0) | 2022.04.29 |
광클하는 로봇 만들기 (파이썬 매크로, pynut mouse keyboard) (0) | 2022.04.22 |
파이썬으로 가짜 데이터 셋 만들기 (Faker) (0) | 2022.04.21 |
댓글