ROOT 가이드

3.4 함수 클래스 TF1

함수는 TF1 클래스로 구현을 하였다. TF1을 정의하는 방법은 아주 많지만 여기서는 보편적으로 사용하는 몇가지만 알아보자. 더 많은 내용은 TF1 클래스 레퍼런스 에서 볼 수 있다.

 

기본 함수

함수

f(x) = x*(x-2)

를 정의하고 0 부터 10 사이의 x 범위에서 그림을 그려보자. 생성자는 다음과 같다.

TF1(const char* name, const char* formula, Double_t xmin, Double_t xmax)

인수는 이름, 함수, 범위1, 범위2 순이다.

void example_function() {
    TF1 *f = new TF1("example function","x*(x-2)",0,10);
    f -> Draw();
}

example function

수식이 따옴표 안에 들어간다는 점을 기억하자.

앞서 생성자에서 사용한 범위 0 부터 10 은 그림을 그릴 때를 위한 범위일 뿐 함수 자체는 범위에 제한 되지 않는다. Eval(x) 함수를 통하여 지정한 범위 외의 x에서 값을 확인 할 수 있다.

Double_t y = f -> Eval(22.2);
cout << y << endl;
448.44

 

변수를 포함하는 TF1

이번엔 

f(x) = a*x + b

와 같은 기울기 a와 y절편 b를 변수로 가지는 직선 함수를 정의해 보자. 사용하는 생성자는 같으나 [수식]에 변수 a와 b를 번호를 붙여서 [0]과 [1]로 표현한다. 그리고 함수를 이용하여 변수의 값을 설정한다.

TF1::SetParameter(Int_t param, Double_t value)
void example_function() {
    TF1 *f = new TF1("example function","[0]*x+[1]",-5,5);
    f -> SetParameter(0, 0.5);
    f -> SetParameter(1, 12);
    f -> Draw();
}

example function 2

기울기에 해당하는 0번 변수를 0.5로 두고 y절편에 해당하는 1번 변수를 12로 두었으므로 최종 함수의 형태는

f(x) = 0.5*x + 12

이며 나타난 그림과 일치하는 것을 볼 수 있다.

변수를 포함하는 TF1의 정의는 변수의 값을 바꿔가면서 함수를 재활용 할 수 있다는 이점이 있다. 또 TF1의 주 기능 중 하나인 데이터 피팅 때도 이와 같은 정의를 사용한다.

댓글

댓글 본문
버전 관리
ejungwoo
현재 버전
선택 버전
graphittie 자세히 보기