fzero
비선형 함수의 근(Root Of Nonlinear Function)
설명
예제
한 점으로부터 근 찾기
3
근방에서 사인 함수의 영점을 찾아 를 계산합니다.
fun = @sin; % function x0 = 3; % initial point x = fzero(fun,x0)
x = 3.1416
구간으로부터 근 찾기
1
과 2
사이에서 코사인의 영점을 찾습니다.
fun = @cos; % function x0 = [1 2]; % initial interval x = fzero(fun,x0)
x = 1.5708
참고로, 과 는 부호가 다릅니다.
파일로 정의된 함수의 근
함수 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
— 풀려는 함수
함수 핸들 | 함수 이름
풀려는 함수로, 스칼라 값 함수에 대한 핸들 또는 스칼라 값 함수 자체의 이름으로 지정됩니다. fun
은 스칼라 x
를 받아 스칼라 fun(x)
를 반환합니다.
fzero
는 fun(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
x0
— 초기값
스칼라 | 요소를 2개 가진 벡터
초기값으로, 실수형 스칼라 또는 요소를 2개 가진 실수 벡터로 지정됩니다.
스칼라 —
fzero
는x0
에서부터,fun(x1)
이fun(x0)
과 반대 부호를 갖는x1
점을 찾기 시작합니다. 그런 다음fzero
는fun
의 부호가 바뀌는 지점이 나올 때까지 구간을 반복적으로 줄여 해를 구합니다.요소를 2개 가진 벡터 —
fzero
는fun(x0(1))
과fun(x0(2))
가 반대 부호를 갖는지 확인하고, 그렇지 않을 경우 오류를 발생시킵니다. 그런 다음fun
의 부호가 바뀌는 지점이 나올 때까지 구간을 반복적으로 줄여 해를 구합니다. 구간x0
은 유한해야 하며, ±Inf
를 포함할 수 없습니다.
팁
해를 구하는 속도 면에서 보면, fzero
를 구간(요소를 2개 가진 x0
)으로 호출하는 것이 스칼라 x0
으로 호출하는 것보다 더 빠를 수 있습니다.
예: 3
예: [2,17]
데이터형: double
options
— 풀이 과정 옵션
구조체로, 일반적으로 optimset
을 사용하여 생성됨
풀이 과정 옵션으로, 구조체로 지정됩니다. optimset
을 사용하여 options
구조체를 생성하거나 수정합니다. fzero
는 이 options
구조체 필드를 사용합니다.
| 표시 수준:
|
| 목적 함수 값이 유효한지 여부를 확인합니다.
|
| 최적화 함수가, 각 반복마다 함수 핸들 또는 함수 핸들로 구성된 셀형 배열로 호출하는, 하나 이상의 사용자 정의 함수를 지정합니다. 디폴트 값은 없음( |
| 알고리즘이 실행되는 동안 다양한 진행률 측정값을 플로팅합니다. 미리 정의된 플롯에서 선택하거나 사용자가 직접 작성할 수 있습니다. 함수 이름, 함수 핸들 또는 함수 이름이나 함수 핸들로 구성된 셀형 배열을 전달합니다. 디폴트 값은 없음(
사용자 지정 플롯 함수를 작성하는 방법에 대한 자세한 내용은 최적화 솔버 플롯 함수 항목을 참조하십시오. |
|
|
예: options = optimset('FunValCheck','on')
데이터형: struct
출력 인수
x
— 근 또는 부호 변경 위치
실수형 스칼라
근 또는 부호 변경 위치로, 스칼라로 반환됩니다.
fval
— x
에서의 함수 값
실수형 스칼라
x
에 있는 함수 값으로, 스칼라로 반환됩니다.
exitflag
— 종료 상황을 나타내는 정수
정수
종료 상황을 나타내는 정수로, fzero
가 반복을 중지한 이유를 의미합니다.
| 함수가 해 |
| 출력 함수 또는 플롯 함수에 의해 알고리즘이 종료되었습니다. |
| 부호 변경이 포함된 구간을 검색하는 중 |
-4 | 부호 변경이 포함된 구간을 검색하는 중 복소 함수 값이 발견되었습니다. |
-5 | 알고리즘이 특이점으로 수렴되었을 수 있습니다. |
-6 |
|
output
— 근 구하는 해법에 대한 정보
구조체
근 구하는 해법에 대한 정보로, 구조체로 반환됩니다. 구조체의 필드는 다음과 같습니다.
intervaliterations | 근이 포함된 구간을 찾기 위해 수행된 반복 횟수 |
iterations | 해 찾기 반복 횟수 |
funcCount | 함수 실행 횟수 |
algorithm |
|
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.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
C/C++ 코드 생성의 경우:
fun
입력 인수는 구조체나 문자형 벡터가 아니라 함수 핸들이어야 합니다.fzero
는TolX
와FunValCheck
를 제외한 모든 옵션을 무시합니다.fzero
는 네 번째 출력 인수인 출력 구조체를 지원하지 않습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)