학교 수업을 듣는데 교수님께서 과제를 내주셨는데 과제의 내용이 다소 황당했다. 어렵진 않지만 정말 귀찮은 계산을 시키신 것인데, 동기들의 말로는 하다가 손가락이 부러지는 줄 알았다고 하여 나는 애초에 계산기 두들겨 가면서 푸는 건 포기해버렸다. 대신 주피터랩을 켜서 파이썬 코드를 작성하여 10분만에 풀 수 있었다. 어려운 작업은 아니었지만, 코드를 공유해보고자 한다.
(본 포스팅에서 사용한 자료는 학교에서 배운 수업자료이고, 수업자료의 출처는 다음과 같습니다.
R. L. Francis and J. A. White, 1974, Facility Layout and Location: An Analytical Approach, Prentice-Hall
S. Chopra and P. Meindl, 2001, Supply Chain Management: Strategy, Planning, and Operation, Prentice Hall. )
문제 상황
공식을 보면 루트와 제곱, 분수가 굉장히 많아서 계산기를 두들겨가며 풀기 아주 까다로운 것을 확인할 수 있다. 그런데 내가 해야하는 것은 문제에서 생략된 Iteration 2 부터 9 까지 풀이과정을 다 작성해야 한다는 것이었다.
작성한 파이썬 코드
1
2
3
|
x = 4.25
y= 4.0
|
cs |
우선 초기 시작점을 선언해주고, 이후에 함수를 작성했다. x와 y를 계속해서 업데이트해줘야 하는 상황이었기 때문에 초기화되는 문제를 피하기 위함이다.
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
|
import numpy as np
import math
def g1(x,y) :
result = (x-0)**2 + (y-0)**2
result = math.sqrt(result)
result = 1/result
return result
def g2(x,y) :
result = (x-0)**2 + (y-10)**2
result = math.sqrt(result)
result = 1/result
return result
def g3(x,y):
result = (x-5)**2 + (y-0)**2
result = math.sqrt(result)
result = 1/result
return result
def g4(x,y):
result = (x-12)**2 + (y-6)**2
result = math.sqrt(result)
result = 1/result
return result
print(g1(x,y))
print(g2(x,y))
print(g3(x,y))
print(g4(x,y))
|
cs |
g1 부터 g4 까지 def 함수를 이용해 사용자 지정 함수를 생성했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def update(x,y):
gravitysum = g1(x,y) + g2(x,y) + g3(x,y) + g4(x,y)
print(gravitysum)
x_result = 5*g3(x,y) + 12*g4(x,y)
print(x_result)
x_result = x_result/gravitysum
y_result = 10*g2(x,y) + 6*g4(x,y)
print(y_result)
y_result = y_result/gravitysum
return x_result,y_result
x,y = update(x,y)
print(x)
print(y)
|
cs |
그리고 update 함수를 선언, g1 ~ g4 함수를 다시 사용해줌으로써 원하는 방식대로 x와 y를 업데이트해갈 수 있었다.
1
2
3
4
5
6
7
|
arr = []
for _ in range(10):
arr.append(update(x,y))
x,y = update(x,y)
arr
|
cs |
일일이 엔터를 눌러가면서 정답을 확인하기 싫다면 이런식으로 리스트 하나를 생성하고 반복문을 사용해서 결과값들을 한 번에 확인할 수도 있다.
문제 자체가 과제로 나온 내용이기도 하고, 배경 지식까지 설명하기엔 너무 내용이 길어질 것 같아서 간단하게 코드를 공유한다는 것에 의미를 두어보았다.
'파이썬' 카테고리의 다른 글
파이썬 - 텍스트 데이터 전처리 파이프라인 (1) : 한국어 텍스트 전처리 (0) | 2023.08.19 |
---|---|
파이썬 오류 기록 - LGBM, Python, Dask 관련 AttributeError (0) | 2023.06.04 |
파이썬 - 유용한 함수 scipy의 optimize, minimize 활용해보기 (0) | 2023.05.05 |
파이썬 - KBO 선수 기록 크롤링해서 엑셀로 저장하기 (0) | 2023.02.20 |
파이썬 - ARIMA predict 함수 오류 기록 (0) | 2023.02.08 |