Main Content

fnval

스플라인 함수 값 구하기

설명

예제

v = fnval(f,x)f에 기술된 스플라인 함수 f의 x 점에서의 값 f(x)를 제공합니다.

f가 일변량 스칼라 값 함수인 경우, x의 각 요소를 그 요소에서의 f의 값으로 대체해 출력값 v를 구합니다. 이러한 방식은 d-값 m-변량 함수의 경우에 m-벡터가 d-벡터로 대체된다는 점만 제외하고는 다른 모든 경우에 적용됩니다.

일변량 f의 경우에는 다음이 적용됩니다.

  • f가 스칼라 값 함수이면 v는 x와 크기가 동일합니다.

  • f가 [d1,...,dr]-값 함수이고 x의 크기가 [n1,...,ns]이면 v의 크기는 [d1,...,dr, n1,...,ns]입니다(v(:,...,:, j1,...,js)x(j1,...,js)에서의 f의 값임). 이때 다음과 같은 경우는 예외입니다.

    • n11이고 s2인 경우(즉, x가 행 벡터인 경우) n1은 무시됩니다.

    • MATLAB®x의 후행 한원소 차원을 무시합니다.

m-변량 f의 경우(m>1, f는 [d1,...,dr]-값 함수), x는 배열이거나 셀형 배열 {x1,...,xm}일 수 있습니다.

  • x[n1,...,ns] 크기의 배열이면 n1m과 같아야 하고 v의 크기는 [d1,...,dr, n2,...,ns]입니다(v(:,...,:, j2,...,js)x(:,j2,...,js)에서의 f의 값임). 이때 다음과 같은 점은 제외입니다.

    • f가 스칼라 값 함수인 경우(즉, rn1이 모두 1인 경우) d1, ..., dr은 무시됩니다.

    • MATLAB은 x의 후행 한원소 차원을 무시합니다.

  • x가 셀형 배열이면 {x1,...,xm} 형식이어야 하며(xj는 길이가 nj인 벡터임), 이 경우 v의 크기는 [d1,...,dr, n1,...,nm]입니다(v(:,...,:, j1,...,jm)은 (x1(j1), ..., xm(jm))에서의 f의 값임). 단, f가 스칼라 값 함수인 경우(즉, rn1이 모두 1인 경우) d1, ..., dr은 무시됩니다.

f가 x에서 비약 불연속(jump discontinuity)을 가지면 값 f(x +), 즉 우극한이 반환됩니다. 단, x가 형식의 기본 구간 오른쪽 끝인 경우는 예외입니다. 이러한 x의 경우 값 f(x–), 즉 좌극한이 반환됩니다.

fnval(x,f) fnval(f,x)와 동일합니다.

fnval(...,'l')는 f를 왼쪽으로 연속인 것으로 간주합니다. 이는 f가 x에서 비약 불연속을 가지면 값 f(x–), 즉 좌극한이 반환된다는 의미입니다. 단, x가 기본 구간의 왼쪽 끝인 경우는 예외입니다. 이러한 x의 경우 값 f(x +)가 반환됩니다.

함수가 다변량인 경우 왼쪽과 오른쪽에서의 연속에 관한 위 명령문은 좌표별로 적용됩니다.

예제

모두 축소

이 예제에서는 일부 데이터를 보간하고 결과 함수를 플로팅 및 실행하는 방법을 보여줍니다.

데이터를 정의합니다.

x = [0.074 0.31 0.38 0.53 0.57 0.58 0.59 0.61 0.61 0.65 0.71 0.81 0.97];
y = [0.91 0.96 0.77 0.5 0.5 0.51 0.51 0.53 0.53 0.57 0.62 0.61 0.31]; 

데이터를 보간하고 결과 함수 f를 플로팅합니다.

f = csapi( x, y )
f = struct with fields:
      form: 'pp'
    breaks: [0.0740 0.3100 0.3800 0.5300 0.5700 0.5800 0.5900 0.6100 ... ]
     coefs: [11x4 double]
    pieces: 11
     order: 4
       dim: 1

fnplt( f )

Figure contains an axes object. The axes object contains an object of type line.

x = 0.5에서 함수 f의 값을 구합니다.

fnval( f, 0.5 )
ans = 0.5294

0, 0.1, ..., 1에서 함수 f의 값을 구합니다.

fnval( f, 0:0.1:1 )
ans = 1×11

    0.3652    1.0220    1.1579    0.9859    0.7192    0.5294    0.5171    0.6134    0.6172    0.4837    0.2156

곡면을 나타내는 함수 f2를 만듭니다.

x = 0.0001+(-4:0.2:4);
y = -3:0.2:3;
[yy, xx] = meshgrid( y, x );
r = pi*sqrt( xx.^2+yy.^2 );
z = sin( r )./r;
f2 = csapi( {x,y}, z ); 

함수 f2를 플로팅합니다.

fnplt( f2 )
axis( [-5, 5, -5, 5, -0.5, 1] );

Figure contains an axes object. The axes object contains an object of type surface.

x = -2, y = 3에서 함수 f2의 값을 구합니다.

fnval( f2, [-2; 3] )
ans = -0.0835

입력 인수

모두 축소

값을 구하려는 스플라인 함수로, 객체로 지정됩니다.

스플라인 함수 f의 값을 구하려는 점으로, 벡터, 행렬 또는 셀형 배열로 지정됩니다.

출력 인수

모두 축소

x에 있는 점에서의 스플라인 함수 f의 값 f(x)로, 스칼라, 벡터, 행렬 또는 셀형 배열로 반환됩니다.

알고리즘

x의 각 요소에 대해, 이 함수는 관련된 절점 구간이나 매듭 구간을 결정하고 관련 정보를 조합합니다. f가 ppform 형식인지 B-form 형식인지에 따라, x의 모든 요소에서 동시에 값을 구하기 위해 축소곱셈법(nested multiplication) 또는 B-스플라인 재귀(예로 [PGS; X.(3)] 참조)가 벡터 방식으로 사용됩니다. 다변량 다항식 스플라인 함수의 값을 구하는 과정은 텐서 곱 구조를 최대한 활용합니다.

유리 스플라인의 값을 구하는 과정은 대응하는 벡터 값 스플라인의 값을 구한 후에 수행됩니다. 즉, 스플라인의 마지막 성분으로 나머지 모든 성분을 나누는 계산입니다.

stform의 함수의 값을 구하는 과정은 stcol을 핵심적으로 활용하며, 행렬의 크기를 합리적인 수준으로 유지하려고 시도합니다.

버전 내역

R2006b에 개발됨