어웨이
바이리니어 인터폴레이션
메서드
직사각형의 네 꼭짓점을 $i, j = 1, 2$ 에 대해 $P_{ij} = \left( x_{i} , y_{j} \right)$ 라 하고, 이에 대응되는 네 개의 값 $\left\{ z_{ij} \right\} \subset \mathbb{R}$ 이라 하자. 네 개의 점 $\left\{ \left( x_{i}, y_{j} , z_{ij} \right) \right\} \subset \mathbb{R}^{3}$ 과, 인접한 두 점마다 생겨나는 네 개의 선분 모두 지나는 곡면을 다음과 같은 함수로 나타내는 인터폴레이션을 바이리니어 인터폴레이션bilinear interpolation이라 한다. $$ z(x, y) = c + c_{x} x + c_{y} y + c_{xy} x y $$
설명 1
설명이 좀 어려운데, 풀어서 말해보면 다음과 같다:
- $P_{11}$ 과 $P_{12}$ 사이를 선분으로 잇는다.
- $P_{12}$ 과 $P_{22}$ 사이를 선분으로 잇는다.
- $P_{22}$ 과 $P_{21}$ 사이를 선분으로 잇는다.
- $P_{21}$ 과 $P_{11}$ 사이를 선분으로 잇는다.
- 각 선분의 모든 점마다, 대변에 놓인 마주보는 점과 선분을 잇는다.
메서드의 이름 그대로 두 방향으로 선을 그어서 채워넣는 것이다. 곡면은 선분의 변화와 함께 연속적으로 휠테지만, 직사각형의 선분에 평행한 어떤 직선으로든 그 단면을 보면 선분이어야 한다.
결과적으로 직사각형의 형태를 이끌어낼 수만 있다면 점은 더 많아도 상관 없다. 간격이 균등하지 않더라도, 모든 점을 포함하는 가장 작은 직사각형을 만든 후 직사각형으로 파티션을 줘버리면 되기 때문이다.
$$ \begin{bmatrix} 1 & x_{1} & y_{1} & x_{1} y_{1} \\ 1 & x_{1} & y_{2} & x_{1} y_{2} \\ 1 & x_{2} & y_{1} & x_{2} y_{1} \\ 1 & x_{2} & y_{2} & x_{2} y_{2} \end{bmatrix} \begin{bmatrix} c \\ c_{x} \\ c_{y} \\ c_{xy} \end{bmatrix} = \begin{bmatrix} z_{11} \\ z_{12} \\ z_{21} \\ z_{22} \end{bmatrix} $$
곡면 $z(x, y)$ 의 계수 $c, c_{x}, c_{y}, c_{xy}$ 는 위와 같은 행렬방정식을 푸는 것으로 간단히 얻을 수 있다. 위키피디아에 따르면 그 구체적인 공식은 다음과 같다2.
$$ \begin{bmatrix} c \\ c_{x} \\ c_{y} \\ c_{xy} \end{bmatrix} = \frac{1}{\left( x_{2} - x_{1} \right) \left( y_{2} - y_{1} \right)} \begin{bmatrix} x_{2} y_{2} & -x_{2} y_{1} & -x_{1} y_{2} & x_{1} y_{1} \\ -y_{2} & y_{1} & y_{2} & -y_{1} \\ -x_{2} & x_{2} & x_{1} & -x_{1} \\ 1 & -1 & -1 & 1 \end{bmatrix} \begin{bmatrix} z_{11} \\ z_{12} \\ z_{21} \\ z_{22} \end{bmatrix} $$
쉬운 구현을 위해서는 수치적으로 그냥 역행렬을 곱해도 되겠지만, 당연히 빠른 계산을 위해서는 공식 그대로 쓰는 게 낫다.
줄리아에서 쌍선형 보간법 쓰는 법
줄리아 미분방정식 풀이 후 미분계수 얻는 법
sol = solve(ODEProblem(sys, ic, (0, last(saveat)), [K]), RK4(), dt = saveat.step.hi, adaptive=false, maxiters = Inf)
dsol = [sol.k[2][1] stack([solk[2] for solk in sol.k[2:end]])]
레이텍 폰트 크기 조절하는 법
\small, \footnotesize, \scriptsize, \tiny\normalsize, \large, \Large, \LARGE, \huge, \Huge
레이텍 내용 가로로 눕히는 법 \usepackage{landscape}
줄리아 데이터프레임에서 기초통계량을 간단히 확인하는 법
describe(input[:, [“Ra”,“Ha”,“Da”,“L”,“b1”,“cr”,“jb1”,“jb2”,“usize”,“Q”,“gamma”,“sf”]], :min, :max, :std)

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

