fzero

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

Синтаксис

x = fzero(fun,x0)
x = fzero(fun,x0,options)
x = fzero(problem)
[x,fval,exitflag,output] = 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, остановленный, и выходная структура, содержащая информацию о процессе решения.

Примеры

свернуть все

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

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

Найдите нуль функционального f (x) = x 3 – 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)

x = 1.8115

Решите проблему, которая задана экспортом из приложения Оптимизации.

Задайте проблему в приложении Оптимизации. Введите optimtool('fzero') и заполните проблему, как изображено.

Примечание

Приложение Оптимизации предупреждает, что будет удалено в будущем релизе.

Выберите File > Export to Workspace и экспортируйте проблему, как изображено в переменную под названием problem.

Введите следующее в командной строке.

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.

Чтобы включать дополнительные параметры в вашу функцию, смотрите Корень в качестве примера Функции с Дополнительным Параметром и разделом Passing Extra Parameters.

Пример: '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

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

PlotFcns

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

  • @optimplotx строит текущую точку.

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

Для получения информации о записи пользовательской функции построения графика смотрите Синтаксис Функции построения графика.

TolX

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

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

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

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

objective

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

x0

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

solver

'fzero'

options

Структура опций, обычно созданное использование optimset

Можно сгенерировать problem путем экспорта из приложения Оптимизации. Смотрите Импорт и Экспорт Вашей работы или Решите Экспортируемую проблему.

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

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

свернуть все

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

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

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

1

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

-1

Алгоритм был отключен выходной функцией или функцией построения графика.

-3

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

-4

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

-5

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

-6

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

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

intervaliterations

Количество проделанных итераций, чтобы найти интервал, содержащий корень

iterations

Количество находящих нуль итераций

funcCount

Количество функциональных оценок

algorithm

'bisection, interpolation'

message

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

Алгоритмы

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

Ссылки

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

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

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

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