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

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

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

Во-первых, запишите файл под названием f.m 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

Постройте график процесса решения путем установки некоторых функций plot.

Задайте функциональную и начальную точку.

fun = @(x)sin(cosh(x));
x0 = 1;

Исследуйте процесс решения путем установки опций, которые включают функции plot.

options = optimset('PlotFcns',{@optimplotx,@optimplotfval});

Запустите fzero включая options.

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.

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

Пример: грех

Пример: @myFunction

Пример: (x) (x-a) ^5 - 3*x + - 1

Типы данных: char | function_handle | строка

Начальное значение, заданное как действительный скаляр или действительный вектор с 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.

Отображение

Уровень отображения:

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

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

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

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

FunValCheck

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

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

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

'OutputFcn'

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

PlotFcns

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

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

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

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

TolX

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

Пример: опции = optimset ('FunValCheck', 'on')

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

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

цель

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

x0

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

solver

fzero

опции

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

Для примера смотрите, Решают проблемную Структуру.

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

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

свернуть все

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

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

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

1

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

-1

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

-3

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

-4

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

-5

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

-6

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

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

intervaliterations

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

iterations

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

funcCount

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

algorithm

'bisection, interpolation'

сообщение

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

Алгоритмы

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

Ссылки

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

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

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

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

Была ли эта тема полезной?