C/C++ 전산수학 - 테일러 급수로 알아보는 삼각함수

이미지
여기서는 테일러 급수 전개를 통해 삼각함수들의 값을 구하는 방법에 대해서 알아보고, C언어 및 C++ 프로그램을 통해서 이를 구현해보도록 하겠습니다. 특정 지점에서의 함수의 미분값들을 알면, 무한한 차수의 다항식을 통해 함수의 형태를 파악할 수 있다는 것이 테일러 급수 전개의 요점입니다. 주어진 함수의 미분들을 통해 테일러 급수 전개를 방법에 대한 기본적인 내용들은 다음 포스팅에 더 자세하게 소개되어 있습니다. 수학 상식 : 테일러 급수 전개 사인 (sine) 함수의 미분은 코사인 (cosine) 함수에 따라 그 형태가 결정되고, 코사인 함수의 미분은 사인 함수와 연결됩니다. 이 점을 이용해서 삼각함수를 반복적으로 미분하면 어떻게 되는지를 쉽게 파악할 수 있겠죠. 먼저 사인 함수의 테일러 급수 전개에 대해서 알아봅시다. \[ \begin{array}{rl} \sin{x} = & \displaystyle \sum_{k = 0}^{\infty} \frac{1}{k!} \left( \left. \frac{d^k}{dx^k} \sin{x} \right|_{x = n\pi} \right) (x - n\pi)^k \\ = & \displaystyle  (-1)^n \sum_{k = 0}^{\infty} \frac{1}{k!} \mathcal{A}_{\textrm{sin},k} (x - n\pi)^k \\ \mathcal{A}_{\textrm{sin},k} = & \displaystyle \left\{ \begin{array}{ll} 1 & \textrm{if} \quad k \mod 4 = 1 \\ -1 & \textrm{if} \quad k \mod 4 = 3 \\ 0 & \textrm{otherwise} \end{array} \right. \end{array} \] 사인 함수와 코사인 함수의 테일러 급수 전개는 무한대의 수렴반경을 가지고 있기 때문에 기준점을 어디에 잡아도 테일러 급수는 수렴하게 됩니다. 다만 더 빠른 계산을

서브노티카 번외편 : 레비아탄 아쿠아리움

이미지
 지난 포스팅에서 외계 바다행성에서 생존하고 탈출하는 게임인 서브노티카에 대해서 이야기한 바 있죠. 서브노티카 : 불시착한 바다행성에서 살아남기 처음 플레이할 당시에는 방해가 되는 생물들은 밀어버리고 간다는 컨셉으로 공격적인 레비아탄들을 죽이는 일이 있었습니다만, 이번에는 현지 생태계와의 공존을 추구해 보기로 했습니다. 생존용 칼 이외에는 게임에서 만들 수 있는 살상무기가 없는데, 이 역시 토착생물들과의 공존을 지향하는 개발진들의 생각이 반영되어 있는 결과라고 합니다. 제가 동물들을 해칠 일이 없어지기 위해서는 동물들이 저를 위협하지 못하도록 하는것이 좋겠죠. 그래서 사신 레비아탄을 위한 거대한 집을 만들어 봤습니다. 이런식으로 레비아탄을 반려동물로 만들기 위해서는 그들의 서식지 주변에 기지를 지어야 되기 때문에, 위치선정에 제약이 좀 있습니다. 사신 레비아탄의 덩치가 워낙 크기 때문에 기지도 그에 걸맞게 크게 지어야 합니다. 기지 기반을 가로, 세로 5개씩 지어서 바닥을 만들고, 복도와 기둥을 사용해서 거대한 케이지를 만들었는데요. 4면중에 3면을 먼저 만들고 사신 레비아탄을 유인한 다음, 정지장 소총으로 세워둔 상태로 나머지 1면과 천장을 만들어 줬습니다. 레비아탄이 기지에서 너무 멀리 떨어진 곳으로 가서 배회하면 꼬셔서 데려오기가 어렵기 때문에, 세이브와 로드 역시 적당히 활용하면 좋습니다. 이런 기지를 짓는 과정에서 엄청난 양의 자원이 소모되기 때문에, 자원 수집을 위한 노가다가 필요합니다. 건축에 소요되는 시간 중 상당부분은 자원을 수집하기 위해 사이클롭스를 운전하며 이동하는 시간이었다고 해도 과언이 아닙니다. 사이클롭스에 이온결합 파워셀 6개를 장착하고 열발전 (thermal reactor) 모듈까지 달아주면 편리하게 진행할 수 있습니다. 티타늄과 석영이 1000개 단위로 소모되고, 보강판을 만드는데 필요한 리튬 역시 100개 단위로 소모됩니다. 안전한 여울과 해초숲 뿐만 아니라 오로라호 추락지역과 모래언덕 (Dunes) 및 전구지대 (Bulb zo

서브노티카 (Subnautica) : 불시착한 바다행성에서 살아남기

이미지
새 컴퓨터를 구입한 김에 플레이해 본 해양생존게임 서브노티카 이야기입니다. 알테라 (Alterra)라는 거대 기업에서 제작한 우주선 오로라 호 (Aurora)는 의문의 에너지 빔을 맞고 바다행성 4546B 에 추락합니다. 유일한 생존자인 주인공이 수렵 및 채집을 통해 생존하고, 잔해와 외계 선구자들로부터 획득한 기술들을 바탕으로 로켓을 만들어 탈출하는것이 이 게임의 스토리입니다. 서기 27세기라는 시간적 배경으로 인해 인류는 기술적으로 상당히 발전되어 있다는 설정 덕분에, 제작기와 건축기 등을 통해 재료가 되는 물질을 원자 단위로 재배치해서 물건과 건물을 만들 수 있다고 합니다. 다만 이를 위해서는 청사진 (blueprint)들이 필요한데요. 오로라 호 추락의 여파로 데이터가 상당수 손상되어 파편을 스캔하거나 데이터 박스 등을 통해 청사진을 확보해야 합니다. 주인공이 탑승한 5번 구명포드 는 안전한 여울 (safe shallow)이라는 지역에 떨어졌는데, 적대적이고 위험한 생명체가 거의 없고 수심도 얕아서 초반을 보내기에는 좋은 곳입니다. 행성 4546B는 표면의 대부분이 수심 8km를 넘는 바다로 덮여 있지만, 화산활동으로 인해 크기가 4km 가량 되는 분화구가 형성되었고 태양광이 도달할 정도로 수심이 얕아져 다양한 생태계가 형성될 수 있었다고 합니다. 이 분화구 지역이 게임의 무대이며, 오로라 호가 분화구 가장자리에 떨어진 것은 불행 중 다행이죠. 게임을 진행할수록 수심이 깊은 곳으로 내려가야 하는 관계로, 규모가 좀 되는 본거지는 수심 100m 가량 되는 평야지역에 만들었습니다. 더 깊고 위험한 지역으로 진출하기 위한 교두보 역할도 되고, 유사시에는 수면으로 급부상하는데도 문제가 없으므로 입지 선정은 나름 잘 된 것 같네요. 엔딩까지 스토리를 진행해보고 느끼는건데, 처음 건설하는 기지는 분화구 외곽같은 뜬금없는 곳이 아닌 이상 어디에 지어도 별로 상관없지 싶습니다. 각종 장비와 업그레이드를 위해서 파편과 잔해를 찾아다니다 보면 결국 모든 지역을 탐험하

미국 J-1 비자의 212(e) 웨이버 - No Objection

이미지
여기서는 미국 J-1 비자의 2년 본국거주의무 212(e)가 부여된 경우 No Objection Statement (NOS)에 따라 면제 ( waiver ) 신청을 하는 과정에 대해서 짚어보겠습니다. 2년 본국거주의무로 인한 제약과, 적용되는지의 유무를 확인하는 방법에 대해서는 다음 포스팅에 더 자세하게 소개되어 있습니다. https://swstar77x.blogspot.com/2023/01/j-1-2-212e.html No Objection Statement라는 것은 J-1 비자를 소지한 사람이 본국 (home country)에 귀국하지 않고 미국에 계속 남는것에 대해 본국 정부에서 반대하지 않는다는 입장을 공식적으로 표명하는 것입니다. 일반적으로 J-1 비자 소지자가 미국 소재 본국의 대사관을 통해 신청을 하면, 심사를 거친 후에 대사관에서 미국 국무부로 NOS를 전달하게 됩니다. 한국 국적을 가진 사람이 NOS를 통해 웨이버를 신청하는 경우 주미 한국대사관이 아닌 관할 영사관을 통해 신청을 하라고 안내되어 있는데요. J-1 프로그램을 통해 학업이나 연구를 하는동안 소속된 학교나 연구소의 소재지를 기준으로 관할 영사관이 어디인지 정해집니다. DS-2019 의 Primary Site of Activity 항목에서 소재지의 주소를 확인할 수 있습니다. 저는 포닥을 미시간 (MI) 주에 있는 학교에서 한 관계로 시카고 총영사관을 통해 접수했습니다. 만약 여러 학교에서 J-1비자로 학업이나 연구를 한 경우에도 웨이버 신청은 한번에 해야 합니다. DS-2019 가 여러개 있을 경우는 주미 한국대사관이나 총영사관에 문의해서 어디로 접수할지 확인하는 것이 좋습니다. 신청서를 접수하기에 앞서서 J-1 프로그램이 NOS를 통해 웨이버를 신청하기에 적합한지 알아볼 필요가 있습니다. 다른 포스팅에서도 언급했듯이 2년 본국거주의무가 부여된 이유에 따라서 웨이버의 난이도가 달라지기 때문인데요. 미국 국무부에 advisory opinion을 신청하면 finding letter이