2006년 5월 6일 토요일

MSN log analyzer

내 컴퓨터에 있는 log 중에 가장 쓸만한 게 뭐가 있나 생각해 봤다.
시스템 관련 로그들은 Network분야에서 수없이 연구하고 있으니
내가 따로 하지 않아도 된다.
좋은 분석기들이 이미 많이 있을 것이다.

그런데 MSN log analyzer는 하나도 찾을 수가 없다.
sourceforge에서 "msn log"라고 치면 하나도 안나온다.
freshmeat에서 "msn log"라고 치면 messanger sniffer(메시지를 훔쳐보는 일종의 해킹툴)나 monitor(network 관리자가 activity를 check하는 툴)만 나온다.

MSN log 정보는 상당히 가치있는 정보인데,
왜 분석툴은 하나도 없는 걸까?

내가 최근에 누구랑 말을 가장 많이 하는 지만 봐도
누구랑 친한지, 누구랑은 요즘 뜸해졌는 지, 쉽게 알텐데.

Log 분석에서 더 나아가 msn client에 직접 붙이면
친구들이 언제 on-off인지도 추적가능하다.
어떤 친구는 주중에 잘 들어오고 어떤 친구는 주말에 잘 들어오고
낮시간, 밤시간, 아침시간..
각자 잘 들어오는 시간들을 logging해두면
언제 대화를 걸기 적절한지 추정할 수도 있다.
사람들은 대개 규칙적으로 살기 마련이니까.
Off-line일 때 무작정 그 사람을 기다리는 것보다
과거의 history를 보고 언제쯤 on-line일 가능성이 높은 지 추정할 수 있다.
------------------------
내가 하나 만들어도 되지만, 역시 너무 귀찮다.

------------------------
MSN을 이용하는 프로그램의 종류

http://www.freedownloadscenter.com/Best/msn-log-history.html
. Sniffer
ShadowIMSniffer 4.01 
MSN Chat Monitor 2.8.1114 

. MSN 여러개 띄우기
MSN Polygamy 7.5 1.0

. Archive
msn archive decoder and viewer 1.0
Belkasoft Universal IM History Extractor Pro 2.01
Universal IM History decoder 1.2 

. Contents를 추가하는 프로그램
MSN Content Adder 2.0 
MSN Content Magic2.0 2.0
MSN CE/DP Stealer 2.0  - 다른 사람의 emoticon 빼돌리기
MSN Winks Installer 1.2.2 
Messenger Jump! MSN Content Installer 1.10 
MSN Emoticons Installer 1.2 
MSN Display Pictures Creator 1.1 

User Interface

언어학 개론 발표 준비를 하고 있다.
중간고사 대신 하는 발표인데,
우리는 한글 입력에 관한 부분을 발표할 예정이다.

준비하면서 드는 생각인데, 역시나 전산학의 화두는 interface가 될 것 같다.
네트웍 세상이 되면 processing power 같은 것은 별 문제가 되지 않는 다.

현재는 키보드로 입력하고 있지만 그것은 그렇다고 치고
모바일 장비에서 정보를 입력할 방법이 별로 없다.

주로 생각되는 방법들은 음성인식이나 필기인식, 카메라로 찍기(Vision).
모바일도 충분히 processing power가 되는 데, 크기가 워낙 작아서
user의 입력을 효과적으로 받을 수가 없다.

. 음성인식
사실 가장 좋은 방법인 듯 한데, 인식률이 잘 안 올라가는 것 같다.
완벽하게 되면 거의 키보드랑 같아질텐데.

. 필기인식
주로 필기인식이라고 하면 타블렛 같은 곳에 스타일러스 팬으로 적는 것들인데
그렇게 해서는 자연스러운 질감을 주지 못할 것 같다.
스크린은 최대한 종이 질감을 흉내내게 하고
입력은 차라리 타블렛으로 받기 보다는 펜에 자이로 센서를 이용하는 편이 낫지 않을 까?
(자이로 센서는 디바이스 크기의 제약이 없다.)
아니면 유저들이 허공에 글씨 쓰는 법을 연습하든지 말이다.
사실 일반적인 사람들이 종이에 글씨를 쓰기에도 수년간의 연습이 필요한 것처럼
허공에 글쓰는 방법도 잘 개발하고 거기에 맡는 언어나 동작, 폰트를 잘 개발하면 가능할 것 같기도 하다.

. 카메라로 찍기(vision)
주로 vision 분야에서 연구되고 있는 데, 뭐든 잘 찍어서 사진이나 동영상이 되면 거기와 관련된 정보를 잘 검색하는 식으로 해야 되지 않을 까?
요즘 디카도 많이 보급되는 데, 사실 문자 중심의 웹을 대체 한다기 보다는
사진, 동영상 자료가 위치, 시각 정보와 함께 수없이 많이 쌓이다보면
나름대로 유사도 검색 같은 방법을 통해서 나름대로 의미를 찾겠지.

동영상 검색, 이미지 검색 영역은 기존의 문자 중심의 검색 전문가들(IR, DB 전공자들)보다는
vision이나 CG 전문가들이 개척해야 할 영역인 것 같다.

. 자동완성 기능
입력을 돕는 기능들도 좋을 것 같다.
입력 속도를 빠르게 하기 위해 최소의 정보만 입력하면 추천단어를 주거나 자동완성을 시켜주는 거다.
주로 속기법 등에서 시작된 방법인데, 요즘 인기가 많다.
실시간으로 사전을 검색하면서 가장 그럴듯한만한 완성된 단어들을 보여주는 거다.

2006년 5월 3일 수요일

[PL]Ch.7 - block-structured language and stack storage

. Fortran
  . recursive call이 불가능하다.

. caller : 함수를 부르는 측
. callee : 불린 측

. In-line block
  . function, procedure와 달리 block내에 block이 있어서 자연스럽게 그 block이 수행됨.
  . most simple block(가장 단순한 형태의 block)

. Nested function declaration
  . function내에서 function을 선언하는 것
  . C, C++에서는 지원하지 않는 다.
  (C++에서 Nested class는 지원함)

. Block
  . begin, end marker로 표시되는 프로그램 조각(a region of program text)
  . block의 시작마다 variable declaration이 있다.
  Memory allocation도 한다.
  . block의 끝마다 local variable을 없애고 memory를 deallocation시켜 memory를 아낀다.
  . nesting되야하고 partially overlap은 안된다.
  (if, for 등 모든 것들이 그렇다.)
  . 각 block은 Activation Record를 가진다.

. block의 종류
  . In-line block
  . function
  . procedure

. scope : 변수가 visible한 영역
. lifetime : 변수의 수명(allocation에서 deallocation사이)
. scope와 lifetime은 약간 다르다.
. a hole in the scope
  . lifetime이 expire되지 않았지만 scope상에서 가려져서 visbiel하지 않음.

. variable
  . local variable : 현재 block내에 선언됨
  . global variable : 현재 block 바깥에 선언됨
  . global variable은 항상 어떤 block의 local variable이다.

. scoping
  . global variable의 위치를 결정하는 문제
  . static scoping
  . 가장 가까운 block의 variable을 이용
  . Access Link를 따라가서 변수를 찾음.
  . Access link를 몇 단계 따라갈지는 compiler가 정해줌.
  . 최근 언어들이 채택하고 있음.

  . dynamic scoping
  . 가장 가까운 AR의 variable을 이용.
  . runtime에 일일히 stack frame을 뒤져 variable이 있는 지 확인함.
  . LISP이 채택한 방식

. AR(Activation Record, Stack frame)의 구성요소
  . Control link(CL)
  . Access link(AL)
  . Return address(RA)
  . Return value address(RVA)
  . Parameter
  . local variable
  . Intermediate result(Temporary storage)

. 그 외의 구성요소
  . Program Counter(PC)
  . Environment Pointer(EP)
  . Stack Pointer(SP)

. Control Link = Dynamic link
  . stack frame의 previous frame을 가리킨다.

. Access Link = static link
  . parent block을 가리킨다.
  . parent가 recursive call이었을 때는 가장 최근의 parent를 가리킨다.
  . (lexical scope에 따라 가리킨다.)
  . C는 nested function declaration이 안되므로 AL이 필요없다.
  (AL이 모두 global scope을 가리킬 것이므로)
  . 예상 시험문제 : 다음 프로그램을 보고 CL, AL 등을 연결하세요.

. Return address
  . call이 끝나면 돌아갈 주소(caller의 주소)

. Return value address
  . return시 value을 넣어 줄 곳

. Parameter
  . caller로 부터 넘어온 value

. Intermediate result
  . compiler가 복잡한 expression의 중간 결과를 임의로 저장한 것.
  . temporary value를 저장한다.

. Program Counter(PC)
  . 현재 code상에서 어느 줄을 수행하고 있는 지 나타낸다.

. environment pointer(frame pointer, EP, FP)
  . current stack(run-time stack), 새 activation record(AR)을 가리킨다.
  . 항상 index register에 넣어두기로 약속했다.

. stack pointer(SP)
  . stack의 top을 가리킴

. 사실 stack은 linked list처럼 생겼다.
  . previous node에 해당하는 것을 control link가 가지고 있다.
  . 그럼 왜 linked list가 아닌 stack이라는 이름으로 부를까?
  . linked list는 중간 원소를 없애거나 추가하기도 하지만
  . stack은 항상 top에서만 추가, 삭제를 한다.(LIFO)
  . 따라서 우리의 경우에는 top만 바꾸므로 stack으로 구현한다.

. 새 stack을 allocation(push)하는 instruction
  . M(SP) <- EP
  . EP <- SP
  . SP <- SP + sizeof(AR)

. stack을 deallocation(pop)하는 instruction
  . SP <- EP
  . EP <- M(EP)

. Parameter passing
  . formal parameter
  . declaration시 자리를 차지하는 것(place holder)
  . actual parameter
  . function call시 쓰이는 expression
 
  . call-by-value
  . actual parameter를 evaluation 한 후 r-value(value, contents fo address)를 복사한다.
  . Object가 클 때 비효율(inefficient)적이다.

  . call-by-reference
  . variable의 l-value(memory address)를 넘긴다.
  . object가 아주 작을 때(fit directly on stack) 비효율적이다.
  . 문제점 - parameter가 constant이거나 expression이면 이상해 진다.
  . aliasing이 생겨서 분석이 어렵다.
  . 해결책
     1. call-by-reference를 안쓴다.
     2. 그냥 내버려둔다. (User의 책임이다.)
     3. PL을 잘 design하여 compiler시 error를 낸다.

. Aliasing
  . 2개 이상의 name이 같은 object나 location을 가리킬 때

. Compiler의 중요한 임무
  . variable의 위치를 알아야 함.
  . 위치 : 어느 block(which block)인가 + 몇 번째인가(dispx, displacement x)

. caller가 할 일(AR 만들기)
  1. EP를 새 AR로 set
  2. RA set(자신의 현재 PC)
  . callee의 RA 위치 : EP + sizeof(caller's AR) + 2
  3. Actual parameter set
  . Actual parameter와 formal parameter의 순서는 동일하다.
  4. callee로 jump

. EP + sizeof(AR) = SP

. AR의 위치가 고정적인 이유
  . 그렇게 해야 caller가 callee를 부르고 여러 값들을 정확하게 넘길 수 있다.
  . CL, AL, RA, RVA, parameter의 크기는 고정적이고 compiler가 알아낼 수 있다.
  (caller가 아는 것들, 알아야 되는 것들)
  . 그 다음에 local variable, temporary 등 caller가 몰라도 되는 것을 적는 다.

. function and procedure(공통점과 차이점)
  . function : value를 return한다.(expression이다.)
  . procedure : value를 return하지 않는 다.(statement이다.)
  . 공통점 : side effect가 있다.
  . 거의 비슷하므로 대충 쓰기로 한다.

. Tail call
  . Return시 부른 function의 값을 바꾸지 않고 return하는 것
  (without any further computation)

. Tail recursive call
  . 자기 자신을 tail call하는 것
  . Optimization
  . set return value address to that of caller
  . control link도 더 위로 돌리자.
  . 결국 caller는 자신의 AR을 pop하고 overwrite하면 된다.
  . conclusion : iteravion loop와 같아 진다.

. Recursive call은 iterative로 바꿀 수 있지만 쉽지 않다.
  하지만 tail recursive call의 경우는 automatic하게 할 수 있다.

. AL 결정하기
  . caller가 형제 block을 call할 때는 자신의 Al를 callee의 AL에도 적는 다.
  . in-line block일 때는 AL과 CL이 같다.
  . 삼촌을 부를 때는 아버지의 AL을 set한다.
  . 아버지, 할아버지, 삼촌 이런 정보는 static structure이므로 compiler가 모두 안다.

. first-class function
  . http://en.wikipedia.org/wiki/Closure_%28computer_science%29
  . declared within any scope
  . passed as arguments to other functions
  . stored in data structures
  . returned as the values of other functions

  . functional programming을 구현하기 위해 필요하다.
  . higher-order function을 구현하기 위해 필요하다.

. closure
  . http://en.wikipedia.org/wiki/Closure_%28computer_science%29
  . a function created by a program at run time
  . (env, code) : activation record와 function code를 가리킨다.
  . function을 넘길 때 closure로 넘긴다.
  . C언어에서는 nested function declaration이 안되므로 closure가 필요없다.

. downward funarg problem
  . function argument로 function을 넘길 때
  . closure로 해결된다.
  . 다행히도 가리키는 Access Link는 항상 stack의 윗쪽을 향하므로 별 문제가 안된다.

. upward funarg problem
  . = upward fun-result problem
  . function의 return value로 function을 넘길 때
  . closure를 써야하고 stack도 바꿔야 한다.
  . stack discipline fails

. Garbage collection
  . Stack discipline이 깨지면 explicit deallocation이 힘들다.
  . 쓰이는 지, 안 쓰이는 지 garbage collection으로 판단한다.
  . Lisp, Scheme은 nested function declaration, higher-order function 때문에 garbage colection이 거의 필수이지는 C는 그렇지 않다.

. Language feature와 implementation construct의 관계
  . Block - Activation record with local memory
  . Nested blocks - Control link
  . functions and procedures - return address, return-result address
  . function with static scope - access link
  . function as arguments and results - closures
  . functions returned from nested scope - failure of stack deallocation order for activation records


2006년 5월 2일 화요일

암환자

암환자의 심리상태를 describe하는 4단계가 있다.
1. 충격, 불안, 부정기
2. 반응성 우울기
3. 낙관기
4. 종교, 철학으로 귀의기

꼭 암환자만 그러는 건 아닌 것 같다.
나도 인생을 살면서 항상 심리상태가 저런 식이라고 생각한다.
금주의 토픽은 '유학'이었는 데,
어드미션 포스팅과 excel을 이용한 재수강시 내 학점 변화를 simulation해보니 결론은 "가능성 낮음"인 것 같다.
이리저리 머리 굴리니 괜히 불안하고 우울해하다가
방에서 좀 마음을 가다듬으니 차분해 지는 군.;
(철학적 귀의를...)

처음 회사에서 일을 시작할 때도 그렇고..
뭔가 낯선 환경이나 조건은 항상 불안하고 사람을 우울하게 만들 수도 있곤 한데, 뭐 익숙해지면 다 받아들일 수 있다.

100년도 못 사는 불치병 인생에 내가 할 수 없는 것 리스트에
한가지 항목이 추가된들 뭐가 다르랴.
(내가 할 수 있는 것 리스트와 내가 할 수 없는 것 리스트 모두 entry가 countable infinit 쯤 될텐데 뭘..;)

참고)
심리적 안정을 위한 방법
. 호흡조절법
. 점진적 근육이완법 - 근육에 긴장을 주고 10초간 유지한 후 서서히 이완
. 이미지 유도법
. 회상요법

오늘

오늘은 비몽사몽 전화를 받고 깼다.
문경이 형이 프린트 하고 싶은 게 있다고 해서.
대량 프린트는 주로 전산동 1층 텀실에 있는 빠르고 종이도 공짜인
레이저 프린터를 이용하지만 컬러로 몇장 뽑을 때는 내꺼 잉크젯을 쓴다.

전화 못 받았으면 큰일날 뻔했다.
헤롱헤롱 하고 있는 데, 아침 9시 수치해석 시험이었다.
지난번과 비슷한 난이도 였는 데,
첫번째 문제랑 마지막 문제가 생각보다 유도가 잘 안되서 좀 애먹다가,
뭐 아는 선에서 마무리 지었다.
그런데 나와서 생각해보니 더 쉬운 문제를 틀린 것 같다.
중학생 때 많이 실수하던, 상수 몇 개 빼먹기. 난이도도 중1수준이었다. 그 문제..

아무튼 그렇게 마쳐주고 텀실에서 뭔가 하면서 시간을 보냈다.
(가볍게 수치해석 복습과 반성을..)

그리고 4시에는 CG term project 발표
역시나 너무 오래된 논문을 고른 것 같다.
우리 조만 20년 넘은 주제로 골랐다.
"그거는 이미 상업화 된지 오래됐고 더 할 것도 없어."
너무 오래된 주제라서 연구할 것도 없고 앞으로는 그 주제는 빼기로 했다.

다른 분도 같은 주제로 골랐는 데, 교수님이 바꾸라고 하셨다.
주제가 겹치면 안된다고 해서 피본 사람들이 좀 있었다. 다들 TClab 사람들이 전문가적 입장에서 양보를 당했다.

다들 뭔가 심오하고 학구적이고 어려운 주제들을 골랐다.
TC, CG, GC, VR, AI랩 사람들이 가득해서 다들 자신들의 원래
연구분야와 비슷한 것들이라고들 한다.
(딴 조들도 다들 쉬운 거 고를 줄 알았는 데.)
대학원에서 그렇게 어려운 것을 해야 하다니 꽤 머리 아플 것 같다.
(겨울학기에 듣던 CG랩 세미나 주제들이랑 다들 똑같고, 더 어려워 보이는 것도 보인듯.)

늙은 나이에 학부생이라고 제일 쉬운 주제 잡았는 데,
다른 조들에게 미안하기도 하고 교수님도 별로 좋은 점수 주지 않을 것 같다.

[CG]CG Term project 발표정리 - 2006.5.2

. 조원 : (주한별, Linda), (김지혜, 이춘석 tclab)
. Color2gray : Salience-Preserving color removal
  . gray로 바꾸면 intensity만 남아 안 보이게 되는 것이 있다.
  (Intensity가 같고 chrominance만 다른 경우)
  . Intensity를 희생하더라도 차이가 구분되게 한다.
  . Chrominance difference -> luminance
  . f(g) = sigma((i,j) in k, ((gi - gj) - dij)^2)
  . d : chrominance difference
  . f(g)를 minimize하는 g를 찾으면 된다.(optimization)
  . 색, 인지과학이용.(human visual sensitivity)

. 조원 : (김윤영 tclab)
. Feature Preserving Regular Remeshing
  . surface remeshing : 3D mesh를 remesh해서 다시 3D로 만듬.
  . mesh : polygon으로 정의된 연결 집합
  . Regular remeshing
  . Regular remesh : 모든 vertex가 같은 valence를 가짐.
  . Valence : vertex에 연결된 edge의 수
  . Connectivity가 좋다. 압축률이 좋다.
  . Goal : feature를 잘 보존하면서 remesh
  . Segmentation : 3D를 자름
  . Parameterization : 3D를 2D에 펼침 => feature preserving
  . least square conformal Map => regular remeshing

  . Parameterization
  . 각도 보존(Conformal map, angle-preserving)
  . 경위도 보존
  . 넓이 보존
  . Contribution - 기존방법의 단접 - 삼각형이 매우 찌그러짐.

. 조원 : 공내진
. Fast bilateral filtering for the display of high-dynamic range
  . HDR : High-dynamic-range
  . device들보다 인간이 보는 contrast range가 훨씬 넓다.
  따라서 완벽하게 표현하지 못한다.
  . 선형으로 변환하면 대비가 분명하지 않다.
  . 영화가 너무 어두울 때
  . 밝은 것(오랜노출)부터 어두운 것(짧은 노출)순으로 16장을 찍고 합쳐서 만든다.
  . Tone reproduction problem : contrast를 잘 맞추기
  = Tone mapping operator 찾기
  . Anisotropic diffusion : 가까운 pixel의 영향을 더 많이 받음.
  . Bilateral filter : contrast를 잘 변환

  . bilateral : 쌍방의, 좌우 양측의
  . anisotropic : directionally dependent
  . have different characteristic in different direction
  . ex) polarising lens, polaroid sunglasses

  . isotropic : directionally independent
  . diffusion : spotaneous spreading of matter, heat or momentum

  . layes
  . base layer : operation을 함
  . Detail layer : 보존
  . Color layer : 안씀

  . Bilateral mask
  . f : 관심 pixel의 주변만 봄
  . g : edge에서는 intensity가 달라지는 속성을 이용,
         너무 intensity가 커지면 중단.

. 조원 : (최영남 AI, 김효실 GC), (양형진)
. A new voronoi based surface reconstruction algorithm
  . Laser scan으로 물체를 sampleing하여 point를 얻음.
  . Surface reconstruction : surface 위의 점을 sampling하고
  그것을 다시 construct해서 surface를 만듬.

  . Delaunay triangle : 점들을 이어 삼각형으로 만듬.
  . edge property : 어느 삼각형의 외접원도 그 세 점 외에 다른 점을 포함하지 않음.
  . http://www.ics.uci.edu/~eppstein/gina/delaunay.html

  . Mesh : simple element로 discretization

  . Voronoi diagram : R^d를 point로 cell로 나눔. (decomposition)
  . closest point에 의해 분할되는 공간

  . Medial Axis
  . voronoi diagram의 edge의 boundary
  . tree-like skeleton
  . continuous cousin of the Voronoi diagram
  . http://www.cs.utexas.edu/users/amenta/powercrust/tools.html#mat
 
  . Power crust
  . Medial axis transform을 이용한 3D surface reconstruction algorithm

  . Clakrson's hull
  . n-d Delaunay triangulation을 위한 Exact arighmetic을 해준다.

  . Geodesic distance와 euclidean distance가 다른 것을 구별하기 위해
  axis를 사용한다.

. Surface reconstruction algorithm
  . CGAL library 이용
  . Improve : handling sharp edge
  . Compression 해보기

. 조원 : 유상욱
. Realistic 3D face construction
  . Final fantasy : Model의 사진을 기반으로 만듬
  . 사진 + camera parameter
  . 3D face Model construction - 사용자가 feature point 추가가능
  . Image Texturing
  . Virtual Boundary
  . Matching
  . Embedding
  . Smoothing

. 조원 : 서원필(VR), 이용준
. Sequential Point trees
  . Point based rendering (삼각형이 아닌 point cloud를 이용하자.)
  . Inefficient when all vertices are rendered
  . Hole problem
  . Qsplat - Octree처럼 공간을 나눔
  . tree라서 array보다 느리다.
  . CPU + GPU를 모두 쓰므로 bottleneck이 있다.

. 조원 : 이지현
. Making paper craft toys from meshes using strip-based approximate unfolding
  . Paper craft
  . Unfolding : Mesh -> 전개도

  . 기존의 방법
  . Unrealistic to assemble
  . simplify-smoothness 보존
  . Triangle strip : 언제나 unfold가능, loop도 ㅣㅇㅆ을 수 있음.
  . Zonal region : 띠를 만듬.

. 조원 : (주현성, 이지원), (이정환 CG)
. Particle system
  . 20년이 넘어 이미 모두 상업화됨.
  . Research topic이 없음.
  . 최초의 motion blur 작품(streaks of lights)

. Digital Photography of flash and no-flash image pairs
  . flash : High-frequency, red-eye, harsh shadow
  . No-flash : Ambient illumination, noise
  . 동일한 카메라 위치에서 찍은 두 사진을 합성하고 장점만 취해 더 좋은 이미지를 얻는 다.

. Art-based rendering of fur, grass and trees

. Stanford computer Graphics Laboratory
http://www-graphics.stanford.edu/
-> Data archives
The digital michelangelo project의 일환으로 status scanner가 있어서
데이터가 많음 point set sample data를 얻을 수 있음.
Bunny, Lion, Happy Buddha, Dragon, Lucy 등이 있다.

[NA]Numerical Analysis, Ch.3.5 ~ 4

3.5. Parametric curves
. x(t), y(t)에 대해 각각 풀면 된다.
. Bezier curve : guide point 2개를 이용하여 cubic Hermite를 푼다.
  . Hermite를 위한 x'(t), y'(t)는 guide point를 이용한 numerical difference formula를 이용한다.
  . Guide point의 부호가 반대이므로 주의
. (x0, y0), guide point1, guide point2, (x1, y1)

4. Numerical Differentiation and Integration
4.1. Forward difference formula
  f'(x) = 1/h * (f(x+h) - f(x))
. backward difference formula
  f'(x) = 1/h * (f(x) - f(x-h))

. centered formula
  f(x+h), f(x-h), f(x) 등이 symmetric(대칭적)으로 들어간다.

. n-th order : 에러 term이 h의 h-th order이면 된다.
  . 1th order : h*f''(x) + 등..
  . 2th order : h^2*f''(x) +  등..

. 식 유도 방법
  방법1) Lagrange를 이용한 후 미분한다. - 책에 소개된 방법
  x0 ~ xn의 점을 이용하여 n-th lagrange interpolation을 이용하면
  (n+1)-point formula가 된다.

  방법2) Taylor series를 이용한 후 error order를 잘 소거하는 방향으로 더하거나 뺀다.
  - 수업시간과 시험에 나오는 방법
 
4.2. Richardson's Extrapolation(R.E)
  . Low-order formula를 잘 이용해서 high-accuracy를 구하는 방법
  . function evaluation보다 사칙연산의 cost가 훨씬 적다고 가정한다.
  . h -> h/2 등으로 step size를 줄이면서 계산
  (연습 문제에서는 h/3 씩 줄이기도 함.)
  . M = N(h) + k1h + k2h^2 + k3h^3 + k4h^4 +
  . M : 참값
  . N(h) : 근사식
  . N1(h), N1(h/2)을 이용하여 N2(h)를 만듬.
  . N1(h/(2^n))이 있으면 Nn(h)까지 만들 수 있음.
  . Simple averaging process

4.3. Numerical Integration
  . Quadrature = Integration = Numerical Integration
  . Quadrature은 integration의 옛날 이름이다.
  . Deviation은 역사가 몇백년이지만 Integration은 역사가 수천년이다.

  . Trapezoidal Rule(TR, T.R)
  . first Lagrange Polymial로 유도가능
  . h/2 * (f(a) + f(b))
  . h = (b-a)
  . error : h^3/12*f''(x)

  . Simpson's Rule(SR, S.R)
  . second Lagrange Polymial로 유도가능
  . h/3 * (f(a) + f((a+b)/2) + f(b))
  . h = (b-a)/2
  . error : h^5/90*f(4)(x)

  . Degree of accuracy = precision
  . Undetermined coefficient와 관련있다.
  . degree가 k이면 각 degree polynomial에서 formula가 정확하다.
  . Trapezoidal Rule은 1, Simpson's Rule은 3이다.
  . TR은 1차식, SR은 3차식에 대해 각각 exact solution을 준다.

  . Undetermined coefficient
  . 구간이 -1, 1처럼 숫자일때는 c0, c1이 1/2, 1/2 같은 수로 나오지만
     x0, x1일 때는 c0 = c1 = (x1-x0)/2로 나온다. (test2에서 내가 실수한 문제)

  . Newton-Cotes formulas
  . TR, SR의 일반식, lagrange를 이용.
  . Open Newton-Cotes formulas
  . boundary a,b가 포함됨
  . closed Newton-Cotes formulas
  . boundary a,b가 포함 안됨

4.4 Composite Numerical Integration
  . High-order는 oscillatory nature가 있으므로 piece-wise로 한다.

  . Composite Trapezoidal Rule(CTR, C.T.R)
  . error : (b-a)*h^2/12*f''(x)

  . Composite Simpson's Rule(CSR, C.S.R)
  . error : (b-a)*h^4/180*f(4)(x)

4.5 Romberg Integration
  . Composite Trapezoidal Rule + Richardson's Extrapolation
  . R1,1 = TR
  . R2,1 = 1/2(R1,1 + h * 1개)
  . R3,1 = 1/2(R1,1 + h/2 * 2개)
  . R4,1 = 1/2(R1,1 + h/2 * 4개)

  . R1,1, R1,2 => R2,2 (R2,1은 없으므로 주의 항상 k>=j)
  . Rk,2 = Rk,1, Rk-1, 1을 이용해서 구한다.
  . Rk,j = Rk,j-1 + (Rk,j-1 - Rk-1,j-1)/(4^(j-1)-1)

  . Rk, j : k : h를 1/2씩 줄인다, j : RE의 항
  . Rn, n : TR일때 h^(2*n)의 accuracy(order)를 가진다.

4.6 Adaptive Quadrature Methods
  . 1/2, 1/4로 step을 줄여 계산하고 값의 오차가 큰 경우 그 구간은 다시 1/2로 나눈다.
  . 오차가 만족스럽거나 구간이 충분이 좁을 때까지 반씩 나누면서 연산을 계속한다.
  . 변화량이 큰 구간은 잘게 쪼개고, 변화가 없는 구간은 적게 쪼개는 계산법.

4.7 Gaussian Quadrature
  . 구간을 잘 쪼게거나 하는 것이 아니라 구간의 boundary의 점이 아닌
  가운데 있는 점들을 선택해보자. 어떤 것이 optimal point일까?
  (choose the points for evaluation in an optimal)
. Gaussian Quadrature
  . http://en.wikipedia.org/wiki/Gaussian_quadrature
  . Newton-Cotes formulas의 error term은 n+1 derivative로 정의되므로
  polynomial of degree n에 대해서는 exact하다.
  . Newton-Cotes formulas : equally spaced points 사용
  . composite시 편하지만 accuracy가 떨어진다.
  . Optimal placement를 해보자.

  . Undetermined Coefficient constant를 구하는 방법으로
  c1, c2, ..., cn, x1, x2, ..., xn을 구한다.

. Legnedre polynomials
  . P0(x) = 1
  . P1(x) = x
  . P2(x) = x^2 - 1/3
  . P3(x) = x^3 - 3/5x
  . Monic polynomial : have leading coefficient 1
  . Orthogonal polynomials
  . intgral(-1 to 1, P(x)Pn(x)dx) = 0 where P(x) is a polynomial of degree less than n.
  . xi를 알면, xi를 lagrange interpolate한 후 -1 to 1으로 적분하면 ci를 구할 수 있다.

. Multiple Integrals
  . Region이 rectangle일 때
   x축에 대해서 한 번 계산하고 y축에 대해서 또 계산하면 된다.

. Improper Integral
  . I = int(a..b, f(x))
  . lim x->a, f(x) = inf
  . a에서 diverge하지만 area는 converge한다고 가정하자.
  . TR, SR 등 기존의 방법은 사용할 수 없다.
   왜냐하면 f(a) = inf 이기 때문에 값이 inf(nan : not a number)로 나온다.
  . Gaussian Quadrature는 가능할 수도 있다. (f(a)를 얻지 않으므로)
   하지만 운이 좋을 때 뿐이고 값이 커지면 이상해 질 수 있다.

  . int(a..b, 1/(x-a)^p) = (b-a)^(1-p)/(1-p) (0<p<1 iff converge)
  . f(x) = g(x)/(x-a)^p로 쓸 수 있으면
  . P4(x) = 4th taylor Polynomial of f(x)
  . P4(x) = g(a) + (x-a)g'(a) + 1/2*(x-a)^2*g''(a) + 1/6*(x-a)^3*g'''(a)
           + 1/24*(x-a)^4*g''''(a)
  . int(a..b, f(x))
   = int(a..b, g(x)/(x-a)^p)
   = int(a..b, (g(x)-P4(x))/(x-a)^p) + int(a..b, (P4(x))/(x-a)^p)
  . G(x) = (g(x)-P4(x))/(x-a)^p  (a<x<=b)
        = 0  (x = a)
  . int(a..b, (P4(x))/(x-a)^p) 부분은 CSR로 푼다.

  . Why 4th taylor Polynomial?
   . CSR과 P4(4)의 error term의 order를 같게 맞추기 위해서이다.
   . 5th order로 같아진다.