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

Обратите внимание на то, что потому что(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

Решите задачу, которая описана структурой задачи.

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

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.

Пример: '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 mustBeFinite; это не может содержать ±Inf.

Совет

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

Пример 3

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

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

Опции для процесса решения, заданного как структура. Создайте или измените options структура с помощью optimsetfzero использование они options поля структуры.

Display

Level of display:

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

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

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

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

FunValCheck

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

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

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

OutputFcn

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

PlotFcns

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

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

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

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

TolX

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

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

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

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

objective

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

x0

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

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

Ссылки

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

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

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

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