Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

fzero

비선형 함수의 근(Root Of Nonlinear Function)

설명

예제

x = fzero(fun,x0)fun(x) = 0x 점을 구하는 구문입니다. 이 해는 fun(x)의 부호가 바뀌는 곳에 있습니다. fzerox^2과 같은 함수의 근을 구할 수 없습니다.

예제

x = fzero(fun,x0,options)options를 풀이 과정에 적용하여 해를 구합니다.

예제

x = fzero(problem)problem으로 지정된 문제의 근을 구합니다.

예제

[x,fval,exitflag,output] = fzero(___)fval 출력값으로 fun(x)를, fzero가 중지된 이유를 exitflag에, 그리고 풀이 과정 정보를 출력 구조체에 반환합니다.

예제

모두 축소

3 근방에서 사인 함수의 영점을 찾아 π를 계산합니다.

fun = @sin; % function
x0 = 3; % initial point
x = fzero(fun,x0)
x = 3.1416

12 사이에서 코사인의 영점을 찾습니다.

fun = @cos; % function
x0 = [1 2]; % initial interval
x = fzero(fun,x0)
x = 1.5708

참고로, cos(1)cos(2)는 부호가 다릅니다.

함수 f(x) = x3 – 2x – 5.의 영점을 찾습니다.

먼저, f.m이라는 파일을 작성합니다.

function y = f(x)
y = x.^3-2*x-5;

f.m을 MATLAB® 경로에 저장합니다.

2 근방에서 f(x)의 영점을 찾습니다.

fun = @f; % function
x0 = 2; % initial point
z = fzero(fun,x0)
z =
    2.0946

f(x)는 다항식이므로 roots 명령을 사용하여 영점에 해당하는 중복된 실수 값과 켤레 복소수 쌍을 찾을 수 있습니다.

roots([1 0 -2 -5])
   ans =
   2.0946          
  -1.0473 + 1.1359i
  -1.0473 - 1.1359i

추가 파라미터가 있는 함수의 근을 구합니다.

myfun = @(x,c) cos(c*x);  % parameterized function
c = 2;                    % parameter
fun = @(x) myfun(x,c);    % function of x alone
x = fzero(fun,0.1)
x = 0.7854

일부 플롯 함수를 설정하여 풀이 과정을 플로팅합니다.

함수와 초기점을 정의합니다.

fun = @(x)sin(cosh(x));
x0 = 1;

플롯 함수를 포함하는 옵션을 설정하여 풀이 과정을 검토합니다.

options = optimset('PlotFcns',{@optimplotx,@optimplotfval});

options를 포함하여 fzero를 실행합니다.

x = fzero(fun,x0,options)

Figure Optimization Plot Function contains 2 axes objects. Axes object 1 with title Current Point, xlabel Variable number, ylabel Current point contains an object of type bar. Axes object 2 with title Current Function Value: -3.21625e-16, xlabel Iteration, ylabel Function value contains an object of type scatter.

x = 1.8115

문제 구조체로 정의된 문제를 풉니다.

근 구하기 문제를 구성하는 구조체를 정의합니다.

problem.objective = @(x)sin(cosh(x));
problem.x0 = 1;
problem.solver = 'fzero'; % a required part of the structure
problem.options = optimset(@fzero); % default options

문제를 풉니다.

x = fzero(problem)
x = 1.8115

exp(-exp(-x)) = x인 점을 찾고 풀이 과정 정보를 표시합니다.

fun = @(x) exp(-exp(-x)) - x; % function
x0 = [0 1]; % initial interval
options = optimset('Display','iter'); % show iterations
[x fval exitflag output] = fzero(fun,x0,options)
 
 Func-count    x          f(x)             Procedure
    2               1     -0.307799        initial
    3        0.544459     0.0153522        interpolation
    4        0.566101    0.00070708        interpolation
    5        0.567143  -1.40255e-08        interpolation
    6        0.567143   1.50013e-12        interpolation
    7        0.567143             0        interpolation
 
Zero found in the interval [0, 1]
x = 0.5671
fval = 0
exitflag = 1
output = struct with fields:
    intervaliterations: 0
            iterations: 5
             funcCount: 7
             algorithm: 'bisection, interpolation'
               message: 'Zero found in the interval [0, 1]'

fval = 0이므로 fun(x) = 0이 검산된 것입니다.

입력 인수

모두 축소

풀려는 함수로, 스칼라 값 함수에 대한 핸들 또는 스칼라 값 함수 자체의 이름으로 지정됩니다. fun은 스칼라 x를 받아 스칼라 fun(x)를 반환합니다.

fzerofun(x) = 0을 풉니다. 방정식 fun(x) = c(x)를 풀려면 대신 fun2(x) = fun(x) - c(x) = 0을 풀어야 합니다.

함수에 추가 파라미터를 포함하려면 예제 추가 파라미터가 있는 함수의 근추가 파라미터 전달하기 섹션을 참조하십시오.

예: 'sin'

예: @myFunction

예: @(x)(x-a)^5 - 3*x + a - 1

데이터형: char | function_handle | string

초기값으로, 실수형 스칼라 또는 요소를 2개 가진 실수 벡터로 지정됩니다.

  • 스칼라 — fzerox0에서부터, fun(x1)fun(x0)과 반대 부호를 갖는 x1 점을 찾기 시작합니다. 그런 다음 fzerofun의 부호가 바뀌는 지점이 나올 때까지 구간을 반복적으로 줄여 해를 구합니다.

  • 요소를 2개 가진 벡터 — fzerofun(x0(1))fun(x0(2))가 반대 부호를 갖는지 확인하고, 그렇지 않을 경우 오류를 발생시킵니다. 그런 다음 fun의 부호가 바뀌는 지점이 나올 때까지 구간을 반복적으로 줄여 해를 구합니다. 구간 x0은 유한해야 하며, ±Inf를 포함할 수 없습니다.

해를 구하는 속도 면에서 보면, fzero를 구간(요소를 2개 가진 x0)으로 호출하는 것이 스칼라 x0으로 호출하는 것보다 더 빠를 수 있습니다.

예: 3

예: [2,17]

데이터형: double

풀이 과정 옵션으로, 구조체로 지정됩니다. optimset을 사용하여 options 구조체를 만들거나 수정합니다. fzero는 이 options 구조체 필드를 사용합니다.

Display

표시 수준입니다(반복 과정 표시 참조):

  • 'off'는 출력값을 표시하지 않습니다.

  • 'iter'은 각 반복마다 출력값을 표시합니다.

  • 'final'은 최종 출력값만 표시합니다.

  • 'notify'(디폴트 값)는 함수가 수렴하지 않는 경우에만 출력값을 표시합니다.

FunValCheck

목적 함수 값이 유효한지 여부를 확인합니다.

  • 'on'은 목적 함수가 complex, Inf, NaN 값 중 하나를 반환하는 경우에 오류를 표시합니다.

  • 디폴트 값인 'off'는 오류를 표시하지 않습니다.

OutputFcn

최적화 함수가, 각 반복마다 함수 핸들 또는 함수 핸들로 구성된 셀형 배열로 호출하는, 하나 이상의 사용자 정의 함수를 지정합니다. 디폴트 값은 없음([])입니다. Output Function and Plot Function Syntax 항목을 참조하십시오.

PlotFcns

알고리즘이 실행되는 동안 다양한 진행률 측정값을 플로팅합니다. 미리 정의된 플롯에서 선택하거나 사용자가 직접 작성할 수 있습니다. 함수 이름, 함수 핸들 또는 함수 이름이나 핸들의 셀형 배열을 전달합니다. 디폴트 값은 없음([])입니다.

  • @optimplotx는 현재 점을 플로팅합니다.

  • @optimplotfval은 함수 값을 플로팅합니다.

사용자 지정 플롯 함수는 출력 함수와 동일한 구문을 사용합니다. Optimization Toolbox의 출력 함수 항목과 Output Function and Plot Function Syntax 항목을 참조하십시오.

TolX

x에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 eps, 2.2204e-16입니다. 허용오차와 중지 기준 항목을 참조하십시오.

예: options = optimset('FunValCheck','on')

데이터형: struct

근 구하기 문제로, 다음 필드를 모두 포함하는 구조체로 지정됩니다.

objective

목적 함수

x0

x의 초기점으로, 스칼라 또는 2차원 벡터임

solver

'fzero'

options

options 구조체로, 일반적으로 optimset을 사용하여 생성됨

데이터형: struct

출력 인수

모두 축소

근 또는 부호 변경 위치로, 스칼라로 반환됩니다.

x에 있는 함수 값으로, 스칼라로 반환됩니다.

종료 상황을 나타내는 정수로, fzero가 반복을 중지한 이유를 의미합니다.

1

함수가 해 x로 수렴되었습니다.

-1

출력 함수 또는 플롯 함수에 의해 알고리즘이 종료되었습니다.

-3

부호 변경이 포함된 구간을 탐색하는 중 NaN 또는 Inf 함수 값이 발견되었습니다.

-4

부호 변경이 포함된 구간을 탐색하는 중 복소 함수 값이 발견되었습니다.

-5

알고리즘이 특이점으로 수렴되었을 수 있습니다.

-6

fzero가 부호 변경을 감지하지 못했습니다.

근 구하는 해법에 대한 정보로, 구조체로 반환됩니다. 구조체의 필드는 다음과 같습니다.

intervaliterations

근이 포함된 구간을 찾기 위해 수행된 반복 횟수

iterations

해 찾기 반복 횟수

funcCount

함수 실행 횟수

algorithm

'bisection, interpolation'

message

종료 메시지

알고리즘

fzero 명령은 함수 파일입니다. T.Dekker가 만든 이 알고리즘은 이분법(Bisection), 시컨트(Secant) 및 2차 역보간법(Inverse Quadratic Interpolation)을 조합하여 사용합니다. [1]에는 일부가 개선된 Algol 60 버전이 제공되어 있습니다. [2]에는 fzero의 기반이 되는 Fortran 버전이 나와 있습니다.

대체 기능

최적화 라이브 편집기 작업은 fzero에 대한 시각적 인터페이스를 제공합니다.

참고 문헌

[1] Brent, R., Algorithms for Minimization Without Derivatives, Prentice-Hall, 1973.

[2] Forsythe, G. E., M. A. Malcolm, and C. B. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, 1976.

확장 기능

버전 내역

R2006a 이전에 개발됨