Корень нелинейной функции
Вычислить путем нахождения нуля синусоидальной функции около 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) = 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 — Функция, чтобы решитьФункция, чтобы решить, заданный как указатель на скалярную функцию или имя такой функции. 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
x0 — Начальное значениеНачальное значение, заданное как действительный скаляр или вектор действительных чисел с 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 — Опции для процесса решенияoptimsetОпции для процесса решения, заданного как структура. Создайте или измените options структура с помощью optimsetfzero использование они options поля структуры.
| Level of display:
|
| Проверяйте, допустимы ли значения целевой функции.
|
| Задайте одну или несколько пользовательских функций что оптимизация вызовы функции в каждой итерации, или как указатель на функцию или как cell-массив указателей на функцию. Значение по умолчанию не ни один ( |
| Постройте различные показатели прогресса, в то время как алгоритм выполняется. Выберите из предопределенных графиков или запишите свое собственное. Передайте указатель на функцию или cell-массив указателей на функцию. Значение по умолчанию не ни один (
Для получения информации о записи пользовательской функции построения графика смотрите Функции построения графика. |
| Допуск завершения на |
Пример: options = optimset('FunValCheck','on')
Типы данных: struct
problem — Находящая корень проблемаНаходящая корень проблема, заданная как структура со всеми следующими полями.
| Целевая функция |
| Начальная точка для x, действительный скалярный или вектор с 2 элементами |
| 'fzero' |
| Структура опций, обычно созданное использование optimset |
Для примера смотрите, Решают Структуру задачи.
Типы данных: struct
x — Местоположение корня или изменения знакаМестоположение корня или изменения знака, возвращенного как скаляр.
fval — Значение функции в xЗначение функции в x, возвращенный как скаляр.
exitflag — Целое число, кодирующее выходное условиеЦелое число, кодирующее выходное условие, означая причину fzero остановленный его итерации.
1 | Функция сходилась к решению |
-1 | Алгоритм был отключен выходной функцией или функцией построения графика. |
-3 |
|
-4 | Со значением комплексной функции столкнулись при поиске интервала, содержащего изменение знака. |
-5 | Алгоритм может сходиться к особой точке. |
-6 |
|
output — Информация о находящем корень процессеИнформация о находящем корень процессе, возвращенном как структура. Поля структуры:
intervaliterations | Количество проделанных итераций, чтобы найти интервал, содержащий корень |
iterations | Количество находящих нуль итераций |
funcCount | Количество функциональных оценок |
algorithm |
|
message | Выходное сообщение |
fzero команда является файлом функции. Алгоритм, созданный Т. Деккером, использует комбинацию деления пополам, секанса и обратных квадратичных методов интерполяции. Алгол 60 версий, с некоторыми улучшениями, дан в [1]. Версия Фортрана, на который fzero базируется, находится в [2].
[1] Брент, R., алгоритмы для минимизации без производных, Prentice Hall, 1973.
[2] Форсайт, G. E. М. А. Малкольм, и К. Б. Молер, компьютерные методы для математических вычислений, Prentice Hall, 1976.
Для генерации кода C/C++:
fun входной параметр должен быть указателем на функцию, и не структурой или вектором символов.
fzero игнорирует все опции за исключением TolX и FunValCheck.
fzero не поддерживает четвертый выходной аргумент, структуру output.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.