exponenta event banner

fzero

Корень нелинейной функции

Описание

пример

x = fzero(fun,x0) пытается найти точку x где fun(x) = 0. Это решение где fun(x) знак изменения -fzero не удается найти корень функции, такой как x^2.

пример

x = fzero(fun,x0,options) использование options для изменения процесса решения.

пример

x = fzero(problem) решает проблему поиска корня, указанную в problem.

пример

[x,fval,exitflag,output] = fzero(___) прибыль fun(x) в fval вывод, exitflag кодирование причины fzero stopped и структуру вывода, содержащую информацию о процессе решения.

Примеры

свернуть все

Вычислите δ, найдя ноль синусоидальной функции вблизи 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

Обратите внимание, что cos (1) и cos (2) различаются по знаку.

Найдите ноль функции f (x ) = x3  - 2x  - 5.

Сначала напишите файл с именем f.m.

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

Сохранить f.m на пути MATLAB ®.

Найти ноль f (x) рядом2.

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});

Управляемый fzero включая options.

x = fzero(fun,x0,options)

Figure Optimization Plot Function contains 2 axes. Axes 1 with title Current Point contains an object of type bar. Axes 2 with title Current Function Value: -3.21625e-16 contains an object of type line.

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 и пытается найти точку x1 где fun(x1) имеет противоположный знак fun(x0). Тогда fzero итеративно сокращает интервал, где fun подписи изменений для достижения решения.

  • 2-элементный вектор - fzero проверяет, что fun(x0(1)) и fun(x0(2)) имеют противоположные знаки, и ошибки, если они делают. fun подписи изменений для достижения решения. Интервал x0 должны быть конечными; он не может содержать ±Inf.

Совет

Запрос fzero с интервалом (x0 с двумя элементами) часто быстрее, чем вызов со скаляром x0.

Пример: 3

Пример: [2,17]

Типы данных: double

Параметры процесса решения, заданные как структура. Создание или изменение options структура с использованием optimset. fzero использует эти options поля структуры.

Display

Уровень отображения (см. Итерационный просмотр):

  • 'off' не отображает выходные данные.

  • 'iter' отображает выходные данные в каждой итерации.

  • 'final' отображает только окончательный результат.

  • 'notify' (по умолчанию) вывод отображается только в том случае, если функция не сходится.

FunValCheck

Проверьте допустимость значений целевой функции.

  • 'on' отображает ошибку, когда целевая функция возвращает значение, complex, Inf, или NaN.

  • Значение по умолчанию, 'off', не отображает ошибки.

OutputFcn

Укажите одну или несколько пользовательских функций, которые функция оптимизации вызывает в каждой итерации, либо как дескриптор функции, либо как массив ячеек дескрипторов функции. Значение по умолчанию - нет ([]). См. раздел Функция вывода и синтаксис функции печати.

PlotFcns

Постройте график различных показателей прогресса во время выполнения алгоритма. Выберите из предопределенных графиков или напишите собственные. Передача дескриптора функции или массива ячеек дескрипторов функции. Значение по умолчанию - нет ([]).

  • @optimplotx строит график текущей точки.

  • @optimplotfval строит график значения функции.

Пользовательские функции печати используют тот же синтаксис, что и функции вывода. См. раздел Функции вывода для оптимизации Toolbox™ и Функция вывода и синтаксис функции печати.

TolX

Допуск окончания на x, положительный скаляр. Значение по умолчанию: eps, 2.2204e–16. См. раздел Допуски и критерии остановки.

Пример: options = optimset('FunValCheck','on')

Типы данных: struct

Проблема поиска корня, заданная как структура со всеми следующими полями.

objective

Целевая функция

x0

Начальная точка для x, скалярный или 2-D вектор

solver

'fzero'

options

Структура опций, обычно созданная с помощью optimset

Типы данных: struct

Выходные аргументы

свернуть все

Местоположение корня или изменения знака, возвращаемое как скаляр.

Значение функции при x, возвращено как скаляр.

Целое число, кодирующее условие выхода, означающее причину fzero остановил итерации.

1

Функция, сходящаяся к решению x.

-1

Алгоритм был завершен выходной функцией или функцией графика.

-3

NaN или Inf при поиске интервала, содержащего изменение знака, обнаружено значение функции.

-4

При поиске интервала, содержащего изменение знака, обнаружено значение сложной функции.

-5

Алгоритм мог сходиться к сингулярной точке.

-6

fzero не обнаружил изменения знака.

Информация о процессе поиска корня, возвращенная в виде структуры. Поля структуры:

intervaliterations

Число итераций, принятых для поиска интервала, содержащего корень

iterations

Число итераций поиска нуля

funcCount

Количество оценок функций

algorithm

'bisection, interpolation'

message

Выйти из сообщения

Алгоритмы

fzero команда является файлом функции. Алгоритм, созданный Т. Деккером, использует комбинацию методов бисекции, секущей и обратной квадратичной интерполяции. Версия Algol 60 с некоторыми улучшениями приведена в [1]. Версия Fortran, на которой fzero базируется, находится в [2].

Альтернативная функциональность

Приложение

Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для fzero.

Ссылки

[1] Брент, Р., Алгоритмы минимизации без производных, Прентис-Холл, 1973.

[2] Форсайт, Г. Э., М. А. Малкольм и К. Б. Молер, Компьютерные методы математических вычислений, Прентис-Холл, 1976.

Расширенные возможности

.
Представлен до R2006a