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 остановлена и структура output, содержащий информацию о процессе решения.

Примеры

свернуть все

Вычислить π путем нахождения нуля функции синуса около 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 – 2 x – 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

Level of display (см. Итеративное отображение):

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

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

  • 'final' отображает только окончательный выход.

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

FunValCheck

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

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

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

OutputFcn

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

PlotFcns

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

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

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

Пользовательские функции построения графика используют тот же синтаксис, что и выходные функции. Смотрите Выходные функции для Optimization 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

Выходное сообщение

Алгоритмы

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

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

Приложение

Задача Optimize Live Editor обеспечивает визуальный интерфейс для fzero.

Ссылки

[1] Brent, R., Алгоритмы минимизации без производных, Prentice Hall, 1973.

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

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

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