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) = 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 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, скалярный или 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