import numpy as np
import matplotlib.pyplot as plt
01wk-2: 파이썬은 좋은 계산기다 (1)
1. 강의영상
2. Imports
3. 파이썬은 좋은 계산기이다.
-
아주 어려운 연산도 척척해줌.
# 삼각함수의 값 계산 np.cos(np.pi)
-1.0
1,0,1])) # 평균을 계산 np.mean(np.array([
0.6666666666666666
-
변수저장 가능
\(x\)에 따라 아래의 값을 계산하고 싶다면?
- \(y=2x-5\)
- \(\frac{e^y}{1+e^y}\)
= 2
x = 2*x -5
y / (1+np.exp(y)) np.exp(y)
0.2689414213699951
-
그림도 그려줌..
= np.array([1,2,3,4,5])
x = x**2 - 2*x + 1
y 'o') plt.plot(x,y,
4. 2024 수능 – 1,2,4,6,23
(풀이)
24)**(1/3) * 3**(2/3) (
6.0
(풀이)
= 0.0000001
h def f(x):
return 2*x**3 - 5*x**2 + 3
2+h)-f(2))/h (f(
4.000000721759989
(풀이)
= 1
a 3*2-a, 2**2 + a
(5, 5)
(풀이)
= 0.5
r = np.array([(3/4)/(r**4),(3/4)/(r**3),(3/4)/(r**2),(3/4)/r,3/4])
an = np.cumsum(an)
Sn 3] - Sn[1], 3*an[3] Sn[
(4.5, 4.5)
an
array([12. , 6. , 3. , 1.5 , 0.75])
12+6
18
(풀이)
= 0.0001
x 1+3*x)/np.log(1+5*x) np.log(
0.600059983005448
5. 2024 수능 - 3,7,24
(풀이)
= np.linspace(3/2*np.pi, 2*np.pi, 100)
theta -theta),label=r"$y=\sin(-\theta)$")
plt.plot(theta,np.sin(-theta)*0+1/3,'.',label=r"$y=\frac{1}{3}$")
plt.plot(theta,np.sin( plt.legend()
-theta),label=r"$y=\sin(-\theta)$")
plt.plot(np.sin(-theta)*0+1/3,'.',label=r"$y=\frac{1}{3}$")
plt.plot(np.sin( plt.legend()
-theta)[70:80],'o')
plt.plot(np.sin(-theta)[70:80]*0+1/3,'o') plt.plot(np.sin(
-theta)[70:80] # 이중에서 0.33333... 에 가장 가까운것은 끝에서 두번째 np.sin(
array([0.44406661, 0.42979491, 0.41541501, 0.40093054, 0.38634513,
0.37166246, 0.35688622, 0.34202014, 0.32706796, 0.31203345])
-theta)[78] # 이 값이 0.3333에 가장 가까움 np.sin(
0.32706796331742194
78] # 이것이 theta 값 theta[
5.949986086344305
5.949986086344305) # 이게 답이다 np.tan(
-0.34610336503441297
-np.sqrt(2)/2, -np.sqrt(2)/4, -1/4, 1/4, np.sqrt(2)/4 # 보기와 비교하면???
(-0.7071067811865476, -0.3535533905932738, -0.25, 0.25, 0.3535533905932738)
(풀이)
=0
x#def f(x):
# return (1/3)*x**3 - 2*x**2 -12*x +4
= lambda x: (1/3)*x**3 - 2*x**2 -12*x +4 f
= np.linspace(-5,8,101)
x '.') plt.plot(x,f(x),
= np.array([1,2,33,-3,2,44])
arr np.argmax(arr)
5
np.argmax(f(x)), np.argmin(f(x))
(23, 85)
85]- x[23] x[
8.06
(풀이)
= np.linspace(1/100,1,100)
t = np.log(t**3+1)
x = np.sin(np.pi*t) y
'.') plt.plot(x,y,
-1],y[-1] # 마지막점 x[
(0.6931471805599453, 1.2246467991473532e-16)
-2],y[-2] # 마지막에서 두번째점 x[
(0.6781853078827329, 0.031410759078128236)
-2]-y[-1])/(x[-2]-x[-1]) (y[
-2.0993868719367015
-1/3*np.pi, -2/3*np.pi, -np.pi, - 4/3*np.pi, -5/3*np.pi # 따라서 답은 2번
(-1.0471975511965976,
-2.0943951023931953,
-3.141592653589793,
-4.1887902047863905,
-5.235987755982989)
6. 파이썬 문법복습
A. 함수를 선언하는 두 가지 방법
-
방법1: def
를 이용하는 방법
def f(x):
return x+1
3) f(
4
-
방법2: lambda
를 사용하는 방법
= lambda x: x+1 f
3) f(
4
B. list
와 np.array
의 차이점
-
리스트는 수학친화적이지 않다.
= [1,2,3]
lst1 = [-1, -2, -3] lst2
+lst2 lst1
[1, 2, 3, -1, -2, -3]
-
넘파이는 수학친화적이다.
= np.array([1,2,3])
arr1 = np.array([-1, -2, -3]) arr2
+arr2 arr1
array([0, 0, 0])
C. 인덱스로 벡터의 원소를 뽑는 방법
= [11,22,33,-22,-33,-44] x
-
첫번째 원소를 뽑고 싶다면?
0] x[
11
-
두번째 원소를 뽑고 싶다면?
1] x[
22
-
마지막 원소를 뽑고 싶다면?
5] x[
-44
-1] x[
-44
-
마지막에서 두번째 원소를 뽑고 싶다면?
4] x[
-33
-2] x[
-33
-
index = 0,1,2 에 해당하는 원소만 추출
0:3] # 마지막 인덱스 3은 포함되지 않음 x[
[11, 22, 33]
-
index = 2,3,4 에 해당하는 원소만 추출
2:5] # 2,3,4에 해당하는 인덱스만 추출 x[
[33, -22, -33]
-
x[0:3]
와 같이 처음 시작점이 0인 경우 생략가능
3] x[:
[11, 22, 33]
-
x[k:]
와 같은 코드는 index=k에서 끝까지 뽑는다는 의미이다.
3:6] #3,4,5 x[
[-22, -33, -44]
3:] x[
[-22, -33, -44]
D. np.cumsum()
, np.cumprod()
-
누적합
= np.array([1,-1,1,-1,1,-1])
arr arr
array([ 1, -1, 1, -1, 1, -1])
np.cumsum(arr)
array([1, 0, 1, 0, 1, 0])
-
누적곱
= np.array([1,2,3,4])
arr arr
array([1, 2, 3, 4])
np.cumprod(arr)
array([ 1, 2, 6, 24])
E. plt.plot()
-
예시1: \(x\)없이 그리기 (라인)
=[2,3,5,2]
y plt.plot(y)
-
예시2: \(x\)없이 그리기 (점)
=[2,3,5,2]
y'o') plt.plot(y,
-
예시3: \((x,y)\)를 전달하여 그리기(점)
=[20,21,22,23]
x=[2,3,5,2]
y'o') plt.plot(x,y,
-
예시4: 겹쳐서 그리기
=[20,21,22,23]
x=[2,3,5,-2]
y1=[2.5 ,3.5 ,5.5 , -2.5]
y2'--o')
plt.plot(x,y1,'--o') plt.plot(x,y2,
-
예시5: 겹쳐서 그리기 + 라벨
=[20,21,22,23]
x=[2,3,5,-2]
y1=[2.5 ,3.5 ,5.5 , -2.5]
y2'--o',label="y1")
plt.plot(x,y1,'--o',label="y2")
plt.plot(x,y2, plt.legend()
-
예시5: 겹쳐서 그리기 + latex 라벨
=[20,21,22,23]
x=[2,3,5,-2]
y1=[2.5 ,3.5 ,5.5 , -2.5]
y2'--o',label=r"$y_1$")
plt.plot(x,y1,'--o',label=r"$y_2$")
plt.plot(x,y2, plt.legend()
- latex수식은 이 수업에서 필수사항은 아님
- latex수식을 사용할 수 없어도 시험점수를 획득할때 아무런 불이익이 없음.
F. np.argmax
, np.argmin
-
예시1
= np.array([1,2,3,2,1,0])
arr arr
array([1, 2, 3, 2, 1, 0])
np.argmax(arr),np.argmin(arr)
(2, 5)
# 예제
– 두 함수의 교점
\(-1 \leq x \leq 3\) 에서
- \(f(x)=(x-1)^2\) 와
- \(g(x)=-2x+5\)
의 교점의 좌표를 구하여라.
(풀이)
= np.linspace(-1,3,101)
x = (x-1)**2
f = -2*x+5
g =r"$f(x)=(x-1)^2$")
plt.plot(x,f,label=r"$g(x)=-2x+5$")
plt.plot(x,g,label plt.legend()
abs(f-g))] x[np.argmin(
2.0
2,(2-1)**2
(2, 1)
- 이것이 교점의 좌표
7. 숙제
-
\(x=3\)일때
\[\frac{e^x}{1+e^x}\]
값을 계산하는 코드를 작성하고 LMS에 제출하라.
.ipynb
파일형태로 LMS에 제출할 것. (Quiz제출 연습용임. 제출방법이 익숙하지 않은 학생은 꼭 질문할것. 이 숙제는 제출하지 않아도 감점없음)