Технология исследования функций в табличном процессоре рассматривалась в статье.
При исследовании функции представляют интерес:
- предел функции;
- корни функции.
Вычисление предела функции
Напомним, что функция f(x) имеет предел в точке а тогда и только тогда, когда в этой точке существуют левый и правый пределы, причем они равны. В математике для нахождения пределов функций применяются специальные приемы, в частности такой, как разложением числителя и знаменателя на сомножители и некоторые другие.
Рассмотрим, как можно вычислить предел функции в Matlab.
В сущности, технология вычисления предела функции в Matlab мало отличается от технологии вычисления в табличном процессоре.
Для выполнения вычисления нужно определить переменную, значение которой достаточно близко к предельному значению и вычислить значение функции при этом значении переменной.
Пример. Требуется вычислить предел функции
Решение задачи приведено ниже в таблице и на рис. 1..
Вычисление корней функции
Напомним, что корнями функции Y=f(x) называют такие значения х, при которых функция принимает значение ноль.
При решении практических задач величина x являются каким-либо ресурсом, величина которого ограничена и лежит в области допустимого диапазона значений. Поэтому при решении задачи интерес представляют только те корни, которые находятся в области возможных значений x.
В библиотеке Matlab есть функция fzero, вычисляющая значения аргумента, при которых функция имеет значение ноль.
Для функции fzero ноль рассматривается как точка, где график функции f(x) пересекает ось х, а не касается ее. В зависимости от формы задания функции fzero реализуются хорошо известные численные методы поиска нуля функции: деления отрезка пополам, секущей и обратной квадратичной интерполяции. Функция fzero имеет несколько синтаксических конструкций:
- fzero(@fun,x) — возвращает уточненное значение х, при котором достигается нуль функции fun, представленной в символьном виде, при начальном значении аргумента х. Возвращенное значение близко к точке, где функция меняет знак, или равно NaN, если такая точка не найдена;
- fzero(@fun,[xl x2]) — возвращает значение х, при котором fun(x)=0 с заданием интервала поиска с помощью вектора x=[xl х2], такого, что знак fun(x(D)) отличается от знака fun(x(2)). Если это не так, выдается сообщение об ошибке. Вызов функции fzero с интервалом гарантирует, что fzero возвратит значение, близкое к точке, где fun изменяет знак;
- fzero(@fun,x.tol) — возвращает результат с заданной погрешностью tol;
- fzero(@fun,x.tol .trace) — выдает на экран информацию о каждой итерации;
- fzero(@fun,х.tol .trace,Р1.Р2,...) — предусматривает дополнительные аргументы, передаваемые в функцию fun(x.Pl,P2,...). При задании пустой матрицы для tol или trace используются значения по умолчанию.
Пример:
fzero(fun,x,[ ],[ ],Р1).
Приведенный ниже пример показывает приближенное вычисление р/2 из решения уравнения cos(x)=0 с представлением косинуса дескриптором:
>> х= fzero(@cos,[1 3])
x = 1.5708
В более сложных случаях, когда заранее невозможно определить области существования корней, рекомендуется строить график функции f(x) для приближенного определения корней и интервалов, в пределах которых они находятся.
Таким образом, чтобы получить точные значения корней с помощью функции fzero нужно найти интервалы x, внутри которых функция меняет знак. Эти значения можно получить, предварительно построив график исследуемой функции.
Пример. Требуется найти все корни функции
Решение.
1. Построим график функции. Для построения графика запишем инструкцию
<< fplot(‘x^3-0.01*x^2-0.7044*x +0.139104’,[-1 1]); grid on
График функции приведен на рис. 2.
На графике видно, что функция трижды меняет знак, следовательно, она имеет три корня. Знаки функции меняются в диапазонах x
(-1:-0,8), (-0,2: 0,4 и (0,6:0,8).
2. Создадим функцию, вычисляющую выражение
Y=X^3-0,01*X^2-0,7044*X+0,139104 и сохраним ее в форме m-файла. Для этого выполним операции:
- выполним команду меню File/New/M-file главного окна Matlab, откроется окно редактирования и отладки m- файлов (рис. 3);
- в рабочем окне введем код программы, приведенный на рис. 3;
- выполним команду меню File/Save As и сохраним в рабочем каталоге файл, присвоив ему имя fun2.m;
3. Запишем в командном окне код инструкции, применяя функцию fzero и созданную функцию fun2, и вычислим точные значения корней заданной функции. Инструкции и результат вычислений приведены в таблице ниже и на (рис. 4).
Особенностью функции fzero является то, что сразу найти все корни функции она не в состоянии.
Для вычисления сразу всех корней можно использовать функцию fsolve из пакета Optimization Toolbox, которая решает систему нелинейных уравнений вида f(x)=0 методом наименьших квадратов и ищет не только точки пересечения, но и точки касания. Ниже приведен пример решения той же задачи с использованием функции fsolve.
Для вычисления сразу всех корней можно также использовать функцию solve из пакета Symbolic Math Toolbox. Эта функция позволяет задавать выражение исследуемой функции непосредственно в параметре в виде строки текста, заключенного в кавычки, и вычисляет все возможные корни. Например, решение ранее рассмотренной задачи может иметь следующий вид (рис.5):