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
참고로, 과 는 부호가 다릅니다.
함수와 단정밀도 스칼라 시작점 x0을 만듭니다. fzero를 사용하여 x0에서 시작하여 함수의 근을 구합니다.
f = @(x)cosh(x)-2*sinh(x); x0 = single(1); [x,fval,exitflag,output] = fzero(f,x0)
x = single
0.5493
fval = single
1.1921e-07
exitflag = single
1
output = struct with fields:
intervaliterations: 9
iterations: 3
funcCount: 21
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [0.547452, 1.32]'
요소를 2개 가진 단정밀도 벡터를 근을 괄호로 묶는 시작점으로 만들고, 해와 풀이 과정을 비교합니다.
x0 = single([-1,1]); [x2,fval2,exitflag2,output2] = fzero(f,x0)
x2 = single
0.5493
fval2 = single
1.1921e-07
exitflag2 = single
1
output2 = struct with fields:
intervaliterations: 0
iterations: 5
funcCount: 7
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [-1, 1]'
결과는 동일합니다. 이번에는 fzero가 훨씬 적은 횟수의 함수 실행을 사용합니다.
배정밀도로 동일한 계산을 수행한 결과와 단정밀도 결과를 비교합니다.
x0 = [-1,1]; [x3,fval3,exitflag3,output3] = fzero(f,x0)
x3 = 0.5493
fval3 = -2.2204e-16
exitflag3 = 1
output3 = struct with fields:
intervaliterations: 0
iterations: 7
funcCount: 9
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [-1, 1]'
배정밀도 데이터를 사용하면 fzero는 함수 실행을 몇 번 더 수행합니다. 배정밀도의 함수 값은 약 2e–16 수준으로, 단정밀도의 약 1e–7 수준보다 결과의 정확도가 훨씬 높습니다.
함수 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.0946f(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)를 반환합니다.
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
초기값으로, 실수형 스칼라 또는 요소를 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으로 호출하는 것보다 더 빠를 수 있습니다.
팁
fzero가 x0이 스칼라일 때 부호 변경을 찾지 못하고 fun(x1)이 fun(x0)과 반대 부호를 갖는 x1 점을 찾을 수 있으면 벡터 [x0,x1]을 초기값으로 전달합니다.
예: 3
예: [2,17]
데이터형: single | double
풀이 과정 옵션으로, 구조체로 지정됩니다. optimset를 사용하여 options 구조체를 생성하거나 수정합니다. fzero는 이 options 구조체 필드를 사용합니다.
| 표시 수준:
|
| 목적 함수 값이 유효한지 여부를 확인합니다.
|
| 최적화 함수가, 각 반복마다 함수 핸들 또는 함수 핸들로 구성된 셀형 배열로 호출하는, 하나 이상의 사용자 정의 함수를 지정합니다. 디폴트 값은 없음( |
| 알고리즘이 실행되는 동안 다양한 진행률 측정값을 플로팅합니다. 미리 정의된 플롯에서 선택하거나 사용자가 직접 작성할 수 있습니다. 함수 이름, 함수 핸들 또는 함수 이름이나 함수 핸들로 구성된 셀형 배열을 전달합니다. 디폴트 값은 없음(
사용자 지정 플롯 함수를 작성하는 방법에 대한 자세한 내용은 최적화 솔버 플롯 함수 항목을 참조하십시오. |
|
|
예: options = optimset("FunValCheck","on")
데이터형: struct
출력 인수
근 또는 부호 변경 위치로, 스칼라로 반환됩니다.
x에 있는 함수 값으로, 스칼라로 반환됩니다.
종료 상황을 나타내는 정수로, fzero가 반복을 중지한 이유를 의미합니다.
| 함수가 해 |
| 출력 함수 또는 플롯 함수에 의해 알고리즘이 종료되었습니다. |
| 부호 변경이 포함된 구간을 검색하는 중 |
-4 | 부호 변경이 포함된 구간을 검색하는 중 복소 함수 값이 발견되었습니다. |
-5 | 알고리즘이 특이점으로 수렴되었을 수 있습니다. |
-6 |
|
근 구하는 해법에 대한 정보로, 구조체로 반환됩니다. 구조체의 필드는 다음과 같습니다.
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++ 코드 생성의 경우:
fun입력 인수는 구조체나 문자형 벡터가 아니라 함수 핸들이어야 합니다.fzero는TolX와FunValCheck를 제외한 모든 옵션을 무시합니다.fzero는 네 번째 출력 인수인 출력 구조체를 지원하지 않습니다.모든 데이터는 배정밀도여야 합니다.
C/C++ 코드 생성 섹션의 사용법 관련 참고 및 제한 사항을 참조하십시오. GPU 코드 생성에도 동일한 사용법 관련 참고 및 제한 사항이 적용됩니다.
fzero 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨이제 fzero는 단정밀도 인수 x0과 단정밀도 함수 값 fun(x)을 허용합니다. 디폴트 종료 허용오차 TolX는 single형에 맞게 자동으로 조정됩니다.
최적화 라이브 편집기 작업은 단정밀도 데이터를 지원하지 않습니다. 코드 생성 시 fzero 함수에서는 단정밀도 데이터를 지원하지 않습니다.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- 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)