Skip to content

Latest commit

ย 

History

History
54 lines (35 loc) ยท 3.29 KB

4.3.1.-interpolation.md

File metadata and controls

54 lines (35 loc) ยท 3.29 KB

4.3.1. Interpolation

๋ณด๊ฐ„๋ฒ•(interpolation)์ด๋ž€ ํ†ต๊ณ„์  ํ˜น์€ ์‹คํ—˜์ ์œผ๋กœ ๊ตฌํ•ด์ง„ ๋ฐ์ดํ„ฐ๋“ค(xi)๋กœ๋ถ€ํ„ฐ, ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ทผ์‚ฌ ํ•จ์ˆ˜(f(x))๋ฅผ ๊ตฌํ•˜๊ณ , ์ด ์‹์„ ์ด์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํ•จ์ˆ˜ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, (0, 0), (1, 10), (2, 20)์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋“ค์— ๋Œ€ํ•œ ๊ทผ์‚ฌ ํ•จ์ˆ˜๋ฅผ f(x) = 10x๋กœ ๊ตฌํ•˜๊ณ , 1.5์— ๋Œ€ํ•œ ํ•จ์ˆ˜ ๊ฐ’์œผ๋กœ 15๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์ธ(sine) ํ•จ์ˆ˜์— ๊ฐ€๊นŒ์šด ์‹คํ—˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ๋Š” NumPy, Matplotlib, SciPy๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 import numpy as np
 from scipy.interpolate import interp1d
 from matplotlib import pyplot as plt

 # Cosine ํ•จ์ˆ˜๋ฅผ 0๋ถ€ํ„ฐ 10pi๊นŒ์ง€ 20๊ฐœ ๋งŒ๋“ ๋‹ค.
 x = np.linspace(0,10*np.pi, 20)
 y = np.cos(x)

 #interoperate ํ•จ์ˆ˜๋กœ ๋ณด๊ฐ„๋ฒ•์„ ์ ์šฉํ•˜์—ฌ linear(์„ ํ˜•๋ณด์ •) quadratic(๋ถ€๋“œ๋Ÿฌ์šด ๋ณด์ •) ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋งŒ๋“ ๋‹ค
 fl = interp1d(x,y,kind = 'linear')
 fq = interp1d(x,y,kind = 'quadratic')

 xint = np.linspace(x.min(), x.max(), 1000)
 yintl = fl(xint)
 yintq = fq(xint)

 # Plot the data and the interpolation
 plt.plot(xint, yintl, color = 'green', linewidth=2)
 plt.plot(xint, yintq, color = 'red', linewidth=2)
 plt.legend(['Linear','Quadratic'])
 plt.plot(x,y,'o')    #๊ฐ’์˜ ์œ„์น˜๋ฅผ ์ ์œผ๋กœ ํ‘œํ˜„
 plt.ylim(-2,2)

 plt.title('Interoperate')
 plt.show()

6ํ–‰์˜ ์ฝ”๋“œ๋Š” ์‹œ์ž‘์  0๋ถ€ํ„ฐ 10*np.pi ๊นŒ์ง€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋‰˜์–ด์ง„ 20๊ฐœ ๊ฐ’์„ ๋งŒ๋“ค์–ด ๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’์ด ๋งŒ๋“ค์–ด ์ง‘๋‹ˆ๋‹ค.

[ 0. 1.65346982 3.30693964 4.96040945 6.61387927 8.26734909 9.92081891 11.57428872 13.22775854 14.88122836 16.53469818 18.18816799 19.84163781 21.49510763 23.14857745 24.80204727 26.45551708 28.1089869 29.76245672 31.41592654]

7ํ–‰์˜ cosine ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’์ด ๊ตฌํ•ด ์ง‘๋‹ˆ๋‹ค.

[ 1. -0.08257935 -0.9863613 0.24548549 0.94581724 -0.40169542 -0.87947375 0.54694816 0.78914051 -0.67728157 -0.67728157 0.78914051 0.54694816 -0.87947375 -0.40169542 0.94581724 0.24548549 -0.9863613 -0.08257935 1. ]

10ํ–‰๊ณผ 11ํ–‰์€ SciPy interpolation(๋ณด๊ฐ„๋ฒ•)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. scipy.interpolate์˜ interp1d ํด๋ž˜์Šค๋Š” ์„ ํ˜• ๋ณด๊ฐ„๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋กœ ์ •์˜๋œ ๋„๋ฉ”์ธ ๋‚ด ์–ด๋””์—์„œ๋‚˜ ํ‰๊ฐ€ํ•  ์ˆ˜์žˆ๋Š” ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” 1-d ๋ฒกํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. interp1d ์—์„œ ์ง€์›ํ•˜๋Š” ๋ณด๊ฐ„๋ฒ•์˜ ์ข…๋ฅ˜๋Š” โ€˜linearโ€™, โ€˜nearestโ€™, โ€˜zeroโ€™, โ€˜slinearโ€™, โ€˜quadraticโ€™, โ€˜cubicโ€™, โ€˜previousโ€™, โ€˜nextโ€™, where โ€˜zeroโ€™, โ€˜slinearโ€™, โ€˜quadraticโ€™, โ€˜cubicโ€™ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

13ํ–‰, 14ํ–‰์€ xint ๋ฅผ x์˜ ์ตœ์†Œ๊ฐ’ ๋ถ€ํ„ฐ x์˜ ์ตœ๋Œ€๊ฐ’๊นŒ์ง€ 1000๊ฐœ๋กœ ์„ธ๋ถ„ํ™” ํ•˜๊ณ  linear, quadratic ๋ณด๊ฐ„๋ฒ•์œผ๋กœ yint ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

18ํ–‰ ๋ถ€ํ„ฐ๋Š” matplotlib๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋กฏํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ถœ๋ ฅ ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ ์ ๋“ค์„ ๊ฐ€์ง€๊ณ  ๋ถ‰์€์ƒ‰์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค. X์ถ•์˜ ์–ด๋– ํ•œ ์œ„์น˜์—์„œ๋„ Y๊ฐ’์„ ์˜ˆ์ƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.