MATLAB fzero 함수
이 튜토리얼에서는 MATLAB의 fzero()
함수를 사용하여 비선형 함수의 근을 찾는 방법에 대해 설명합니다.
MATLAB fzero()
함수
fzero()
함수는 비선형 함수의 근을 찾는 데 사용됩니다. 함수는 주어진 비선형 함수의 근을 찾기 위해 시컨트 및 이분법과 같은 다양한 보간 방법을 사용합니다.
fzero()
함수의 기본 구문은 다음과 같습니다.
roots = fzero(fun, x0);
위의 구문은 x0
지점에서 시작하는 fun
의 루트를 반환합니다. 예를 들어, sine
함수의 근을 3 근처에서 찾아 파이 값을 구해 보겠습니다.
아래 코드를 참조하십시오.
clc
clear
f = @sin;
x0 = 3;
value = fzero(f,x0)
출력:
value = 3.1416
clc
및 clear
명령은 위 코드에서 명령과 작업 공간 창을 지우는 데 사용됩니다. 출력에서 볼 수 있듯이 fzero()
함수에서 반환된 값은 pi 값과 거의 같습니다.
단일 점을 시작점으로 전달하는 대신 간격을 전달하여 주어진 비선형 함수의 근을 찾을 수도 있습니다. 예를 들어 cosine
함수의 근을 1에서 3 사이의 간격으로 구해 보겠습니다.
아래 코드를 참조하십시오.
clc
clear
f = @cos;
x0 = [1 3];
value = fzero(f,x0)
출력:
value = 1.5708
간격의 끝점에서 함수 값은 부호가 달라야 합니다. 그렇지 않으면 오류가 발생하고 오류가 나타나면 간격 값 중 하나의 부호를 변경해야 합니다. cos(1)
및 cos(3)
기호가 이미 다르기 때문에 위 코드에서 다른 기호의 간격 값을 사용하지 않았습니다.
루트를 찾고자 하는 입력 함수에는 하나의 매개변수만 있어야 하며, 하나 이상의 매개변수가 있는 경우 루트를 찾기 전에 다른 매개변수의 값을 전달해야 합니다. 예를 들어 두 개의 매개변수가 있는 함수를 만들고 하나의 매개변수 값을 전달한 다음 함수의 루트를 찾습니다.
아래 코드를 참조하십시오.
clc
clear
f = @(x,c) cos(c*x);
c = 3;
f_1 = @(x) f(x,c);
x = fzero(f_1,0.1)
출력:
x = 0.5236
위의 출력에서 f
함수에는 두 개의 매개변수가 포함되어 있고 하나의 매개변수 값을 전달하지 않으면 루트가 평가되지 않기 때문에 fzero()
함수 내부에 f_1
함수를 전달했습니다.
fzero()
함수 내부에서 다음과 같은 다른 옵션도 설정할 수 있습니다: PlotFcns
인자를 사용하여 현재 지점 또는 함수 값의 그래프 표시, TolX
인자를 사용하여 기본적으로 2.2e-16
으로 설정된 허용 공차 값 설정, OutputFcn
인자를 사용하여 fzero()
함수의 각 반복에서 호출되는 출력 함수 설정, FunValCheck
인자를 사용하여 목적 함수의 값을 확인하고 Display
인자를 사용하여 표시 수준 설정 가능합니다.
옵션을 설정하려면 optimset()
함수를 사용하여 모든 옵션의 구조를 만들어야 합니다. 예를 들어, 비선형 함수에 대해 위의 옵션을 설정해 보겠습니다.
아래 코드를 참조하십시오.
clc
clear
f = @(x,c) cos(c*x);
c = 3;
f_1 = @(x) f(x,c);
options = optimset('PlotFcns',{@optimplotx,@optimplotfval},'Display','final','FunValCheck','on','TolX',1.1e-16);
x = fzero(f_1,0.1,options)
출력:
Zero found in the interval [-0.412, 0.612]
x = 0.5236
위의 출력에서 0이 발견된 간격을 볼 수 있으며 현재 지점의 플롯과 다른 반복에서 함수 값의 플롯도 볼 수 있습니다.
표시 옵션에는 출력이 없는 경우 꺼짐, 각 반복에서 출력을 위한 iter
, 최종 출력만 있는 경우의 final
, 기능이 수렴하지 않는 경우에만 출력에 대한 알림의 네 가지 유형이 있습니다.
FunValCheck
옵션을 on
또는 off
로 설정할 수 있으며 on
으로 설정하면 출력이 무한대, NaN
또는 복소수이면 함수가 오류를 표시하고 다음과 같은 경우 오류를 표시합니다. off
로 설정하면 오류가 표시되지 않습니다.
problem
인수를 사용하여 문제 구조로 정의하여 함수의 루트를 찾을 수도 있습니다.
problem.objective
명령을 사용하여 함수를 정의합니다. problem.x0
명령을 사용하여 시작점 또는 간격을 초기화합니다.
problem.solver
명령을 사용하여 해결 방법을 정의합니다. problem.options
명령을 사용하여 옵션을 설정할 수 있습니다.
이름 문제는 모든 문자 또는 문자열로 변경할 수 있습니다. 예를 들어, 문제 구조를 사용하여 비선형 함수의 근을 찾습니다.
아래 코드를 참조하십시오.
clc
clear
p.objective = @(x)sin(cosh(x));
p.x0 = 1;
p.solver = 'fzero';
p.options = optimset(@fzero);
root = fzero(p)
출력:
root =
1.8115
fzero()
함수에서 함수 값, 종료 조건을 나타내는 종료 플래그, 루트 찾기 프로세스에 대한 정보와 같은 다른 정보도 얻을 수 있습니다.
종료 플래그는 1
(수렴된 기능을 나타냄), -1
(출력 또는 플롯 기능으로 인해 알고리즘이 종료되었음을 나타냄), -3
(무한대 또는 NaN
값이 이전임을 나타냄)을 반환할 수 있습니다. 발생), -4
(복소수 값이 발생했음을 나타냄), -5
(특이점으로 수렴된 알고리즘을 나타냄) 및 -6
(함수가 부호의 변화를 감지하지 못했음을 나타냄) ).
예를 들어, 비선형 함수의 루트를 찾고 프로세스에 대한 모든 정보를 얻습니다. 아래 코드를 참조하십시오.
clc
clear
Myfun = @(x) exp(-exp(-x)) - x;
x0 = [0 1];
[root fval exitflag output] = fzero(Myfun,x0)
출력:
root =
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]'
이 함수는 또한 반복 사이의 간격, 총 반복 횟수, 비선형 함수의 근을 찾는 데 사용되는 알고리즘을 반환했습니다. fzero()
함수에 대한 자세한 내용은 이 링크를 확인하십시오.