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)

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은 함수 값을 플로팅합니다.

사용자 지정 플롯 함수는 출력 함수와 동일한 구문을 사용합니다. Output Functions for 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 이전에 개발됨