Корень нелинейной функции
Вычислить путем нахождения нуля синусоидальной функции около 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
структура с помощью optimset
fzero
использование они 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.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.