Latex로 수식에 대한 표현 정리

덧셈, 뺄셈, 곱, 나누기

$$A + B - C \times D \div E$$

    $$A + B - C \times D \div E$$

분수

$$\frac{A}{B}$$

    $$\frac{A}{B}$$

$$\sum_{i=0}^{n}{log{(i)}}$$

    $$\sum_{i=0}^{n}{log{(i)}}$$

미분

$$\frac{df(x)}{dx} = \lim_{x\to0} \frac{f(x+h)-f(x)}{h}$$

    $$\frac{df(x)}{dx} = \lim_{x\to0} \frac{f(x+h)-f(x)}{h}$$

적분

$$\int_{0}^{1}{f(x)dx}$$

    $$\int_{0}^{1}{f(x)dx}$$

행렬

$$A=\begin{bmatrix}
0 & 1 & 2\\
3 & 4 & 5\\
6 & 7 & 8
\end{bmatrix}
$$

    $$A=\begin{bmatrix} 0 & 1 & 2\\  3 & 4 & 5\\  6 & 7 & 8 \end{bmatrix} $$

로그

$$x=a^{y} \Longleftrightarrow y=log_{a}{x}$$

    $$x=a^{y} \Longleftrightarrow y=log_{a}{x}$$

참고 URL

GeoService-Xr의 특장점, “Geocoding 기능”

GIS 시스템은 Location, 즉 위치를 기반으로 운영되는 시스템입니다. 위치를 나타내는 가장 중요하고, 가장 많이 활용되는 것은 무엇일까요? 좌표일까요? 아닙니다. 바로 주소입니다. 이미 컴퓨터, GPS가 발명되기 전부터, 그리고 좌표라는 개념이 존재하기 이전부터 주소는 사용되어 왔습니다.

즉, 사용자는 주소를 통해 자신이 원하는 위치를 빠르게 찾고, 그 위치를 중심으로 GIS의 여러가지 기능을 실행해 사용자가 원하는 원하는 결과를 얻습니다. 이처럼 주소는 사용자에게 있어 위치에 대한 매우 중요한 지표가 되어 줍니다.

그런데 주소는 자주 변경됩니다. 새로운 건물이나 택지가 생기고 사라지거나 신도시의 출현과 기존 행정구역들이 통폐합 등의 상황에서 말입니다. 또한 우리나라는 도로명주소와 지번 주소가 혼재되어 있습니다. 그리고 주소는 제법 긴 글자들로 구성되는데 이 긴 글자를 입력할 때 사용자마다 다르게 입력하는 경우가 많습니다.

예를 들어 저희 회사의 주소인 “서울특별시 성동구 아차산로7나길 18″의 경우 서울특별시 대신 그냥 서울시라고 하여 “서울시 성동구 아차산로7나길 18″라고 하기도 하고 성동구는 서울시에만 있으므로 서울시조차 생략하여 “성동구 아차산로7나길 18″라고 하거나 아차산로7나길은 성동구라는 곳에만 있으므로 성동구도 생략해 “아차산로7나길 18″이라고 입력합니다. 이러한 변칙으로 인해 GIS 시스템에 주소와 관련된 기능을 매우 융통성 있게 담아내 활용하기가 어려운 것이 사실입니다.

주소는 최신 데이터로 자주 업데이트하는 것이 좋습니다. 주소 DB는 SHP 파일 형태인데, 이 SHP 파일이 있다고 해서 주소를 좌표로, 또 좌표를 주소로 변경하는 지오코딩이나 리버스 지오코딩 기능을 바로 사용할 수 있는 것은 아닙니다. 이 기능을 주소 DB를 기반으로 직접 개발을 하거나 서비스 형태로 제공되는 OpenAPI를 Key를 발급받아 사용해야 합니다. OpenAPI 형태로 제공하는 서비스는 구글, 네이버, 카카오, VWorld 등이 있습니다. 모두 그 기능이 뛰어납니다. 그런데 문제는 이들 모두가 사용건수 제약이 있습니다. 대부분 하루에 최대 OO건만 사용할 수 있습니다. 또한 인터넷 환경이 아니면 용할 수 없습니다. 결국 Key 발급이라는 번거로운 작업과 하루당 사용할 수 있는 최대 건수 제한을 고민할 필요없이, 인터넷이 되지 않는 환경에서도 사용할 수 있는 주소와 좌표간의 변환 서비스를 위해서는 Geocoding 서비스를 직접 개발해야 합니다. 그런데, 이 Geocoing 서비스를 개발하는 것이 그렇게 간단한 것은 아닙니다. 전국 범위의 주소 데이터는 도로명주소의 경우 천만건이 넘고 지번주소의 경우에는 이보다 훨씬 더 많습니다. 즉, 이 둘을 합하면 수천만 건입니다. 또한 도로명주소와 지번주소 간의 상호 변환 기능이 필요하기도 합니다. 그리고 생략된 주소 문자열에 대해서도 좌표를 획득할 수 있어야 함과 동시에 생략된 주소에 대한 완전한 주소 문자열로 얻을 수 있어야 합니다.

이러한 지오코딩 서비스는 GIS 개발을 전문으로 하는 몇몇 회사에서 하나의 독립적인 솔루션으로 판매하고 있습니다. 반면 GeoService-Xr의 경우에는 하나의 솔루션이 아닌 하나의 기능으로 제공합니다. 전국의 도로명주소와 지번주소를 대상으로, 주소와 좌표간의 상호변환과 지번주소와 도로명주소간의 상호변환이 가능합니다. 또한 생략된 주소에 대한 좌표 및 해당하는 완전한 주소 문자열을 획득할 수 있습니다. 주소 DB에 대한 최신성 유지는 고객이 원하는 기간에 정확이 맞출 수 있습니다.

아래는 GeoService-Xr의 지오코딩 기능을 활용하여 개발된 넥스젠의 스타쿼리 기능에 대한 소개입니다.

넥스젠(NexGen)의 스타쿼리(* Query) 기능

항상 최신 주소와 위치를 원하는 사용자라면 한달에 한번 주소 DB를 업데이트하고, 최신 주소는 아니더래도 정기적으로 업데이트하고자 하는 고객분들에게는 3개월 또는 4개월에 한번씩 업데이트가 가능합니다. 또한 자체적인 주소 DB와 지오코딩 서비스를 고객의 서버에 설치한 것이므로 사용 건수나 인터넷이 되어야만 한다 등의 제약은 전혀 없습니다. 이러한 편리함과 유연함은 GeoService-Xr의 지오코딩 기능을 통해 쉽게 활용하실 수 있습니다.

GeoService-Xr은 공간 데이터를 서비스하고 여러가지 위치 데이터 기반의 기능을 기본으로 제공합니다. 지오코딩 역시 위치 기반의 기능이므로 하나의 기능으로써 제공하고 있는 것입니다. GIS 시스템의 구축을 위해 공간서버를 도입하면서 별도의 지오코딩 솔루션을 도입은 GeoService-Xr에서는 불필요합니다. Geocoding 기능은 GeoService-Xr에서는 하나의 기본 기능입니다.

대한민국 최신 행정구역 Geometry OpenAPI

대한민국의 행정구역에 대한 Geometry를 얻을 수 있는 OpenAPI 서비스를 지오서비스에서 제공합니다. 이미 오래전부터 아래의 웹페이지를 통해 매년 최신 행정구역에 대한 SHP 파일을 제공해 드리고 있습니다.

대한민국 최신 행정구역(SHP) 다운로드

위 페이지에서 소개해 드리는 방식인 SHP 파일 형태가 아닌 REST OpenAPI 방식으로 행정구역도를 얻을 수 있는 서비스는 그 활용의 폭이 넓은데요. 특히 빅데이터의 처리 결과 등과 같은 통계 데이터에 대한 주제도 작성에 활용될 수 있습니다. 예를들어, 아래와 같은 Javascript 코드를 통해 원하는 행정구역의 지오메트리를 얻을 수 있습니다.

$.ajax({
    url: 'http://geoservice.co.kr:8080/Gp?command=ad2geom;tol=100',
    type: 'POST',
    crossDomain: true,
    data: '전주시 덕진구\n전주시 완산구',
    dataType: "text",
    success: function (response) {
        document.querySelector("#ta").textContent = response;
    },

    error: function (xhr, status) {
        alert("ERROR");
    }
});

위의 코드는 전주시 덕진구와 전주시 완산구에 대한 행정구역을 WKT 포맷으로, 100m 거리값 만큼 토폴로지를 유지한 형태로 단순화(Simplify)된 지오메트리로 그 결과를 아래처럼 JSON으로 받습니다. 실제 내용은 아래보다 훨씬 길어서 축약해 표시 했습니다.

{
    "_EPSG":5179,
    "전주시 덕진구":"POLYGON((957449 1766921, 958719 1763384, ...  , 957449 1766921))",
    "전주시 완산구":"POLYGON((957449 1766921, 958719 1766944, ... , 957449 1766921))"
}

서비스되는 행정구역의 명칭은 시도, 시군구, 읍면동, 리 전체입니다. 행정구역의 명칭은 요약이나 별칭도 가능합니다. 즉, 서울특별시 뿐만 아니라 서울, 서울시가 가능하고, 전라북도 뿐만 아니라 전북도 가능합니다. 이 서비스는 별도의 공지가 없는 한 자유롭게 사용하실 수 있습니다.

지오서비스는 위치기반 서비스와 관련된 또 다른 유용한 서비스로써 편리하게 사용할 수 있는 주소/좌표간의 변환툴(Geocoding Tool)을 무료로 제공하고 있는데요. 아래의 URL을 통해 자세한 내용을 살펴보실 수 있습니다.

주소 좌표 변환 툴, Geocoder-Xr

수치미분(접선)의 결과를 그래프로 표현하기

다음과 같은 함수가 있을 때.. 이 함수를 미분한 결과는 이 함수의 그래프에 대한 접선의 방정식이 됩니다.

위 함수에 대한 코드 정의는 다음과 같습니다.

def fx(x):
    return x**3 + x

미분은, 중앙차분 방식으로 정의하면 다음과 같구요.

def numerical_diff(f, x):
    h = 1e-4
    return (f(x+h) - f(x-h)) / (2*h)

미분 결과는 접선인데, 이 접선을 표현하는 함수를 반환하는 함수는 다음과 같습니다.

def tangent_line(f, x):
    d = numerical_diff(f, x)
    y = f(x) - d*x
    return lambda t: d*t + y

이제 x 절편의 범위를 0~20까지 잡고 함수의 그래프와 이 함수의 x = 11에서의 접선을 그리는 코드는 다음과 같습니다.

import numpy as np
import matplotlib.pylab as plt

# def numerical_diff(f, x):
# def tangent_line(f, x):
# def fx(x):

x = np.arange(0.0, 20.0, 0.1)
y = fx(x)
plt.plot(x,y)

tf = tangent_line(fx, 11)
y2 = tf(x)
plt.plot(x, y2)

plt.show()

결과 그래프는 다음과 같습니다.

이와 같은 미분에 대한 파이선 코드는 기계 학습이나 신경망 학습에서 가중치와 편향에 대한 최적의 값을 얻기 위해 활용되는 경사하강법(Gradient Descent Method)에서 사용됩니다.