И другие программы этой серии
При задании пустой матрицы для tol или trace используются значения по умолчанию, например fzero(fun,x,[ ],[ ],P1).
Для функции fzero нуль рассматривается как точка, где график функции fun пересекает ось х, а не касается ее. В зависимости от формы задания функции fzero реализуются следующие хорошо известные численные методы поиска нуля функции: деления отрезка пополам, секущей и обратной квадратичной интерполяции.
Приведенный ниже пример показывает приближенное вычисление π/2 из решения уравнения cos(x)=0 с представлением косинуса анонимной функцией:
>> x = fzero(@cos,[1 3]) x = 1.5708
8.3.2. Графическая иллюстрация поиска корней функций
В более сложных случаях настоятельно рекомендуется строить график функции f(x) для приближенного определения корней и интервалов, в пределах которых они находятся. Ниже дан пример такого рода (следующий листинг представляет собой содержимое m-файла fun1.m):
%Функция, корни которой ищутся function f=fun1(x) f=0.25*x+sin(x)-1;
Построим график функции (рис. 8.1): >> x=0:0.1:10; plot(x,fun1(x));grid on;
Из него нетрудно заметить, что значения корней заключены в интервалах [0.5 1], [2 3] и [5 6]. Найдем их, используя функцию fzero:
>> x1=fzero(@fun1,[0.5 1])
x1 = 0.8905
>> x2=fzero(@fun1,[2 3])
x2 = 2.8500
>> x3=fzero(@fun1,[5,6])
x3 = 5.8128
>> x3=fzero(@fun1,5,0.001)
x3 = 5.8111
Обратите внимание на то, что корень x3 найден двумя способами и что его значения в третьем знаке после десятичной точки отличаются в пределах заданной
396
Программные средства численных методов
Вычисление корней функций
397
Рис. 8.1. График функции fun1(x)
погрешности tol=0.001. К сожалению, сразу найти все корни функция fzero не в состоянии.
8.3.3. Поиск корня с помощью функций fsolve и solve
Решение таких задач возможно и с помощью функции fsolve из пакета Optimization Toolbox, которая решает систему нелинейных уравнений вида f(x)=0 методом наименьших квадратов, ищет не только точки пересечения, но и точки касания.
Начало в части 1