Стандартные функции поиска корней в MATLAB
Функция roots в MATLAB предназначена для поиска корней полинома. Типичное обращение к функции x = roots(c), где с — вектор коэффициентов полинома в порядке убывания степеней, а x — вектор строка корней полинома. Функция roots ищет корни любого полинома как собственные числа присоединенной к нему матрицы Фробениуса.
Протестируем функцию roots на примере поиска корня высокой кратности. Для этого решим уравнение вида
(37)
На листинге_№9 приведена небольшая программа по решению уравнения (37) при различных значениях n. На рис.12 приведен итоговый график зависимости абсолютной ошибки (в процентах) вычисления корня от степени полинома. Видно, что, начиная со степени полинома 15, абсолютная ошибка достигает 20%.
Рис.12. Тестирование функции roots
Листинг_№9
%Программа тестирования функции roots
%путем решения уравнения (1-x)^n=0
%очищаем рабочее пространство
clear all
%выбираем максимальную степень
%тестируемого полинома
nmax=50;
%организуем цикл обращений к функции
for n=1:nmax
for k=0:n
c(k+1)=(-1)^(n-k)*nchoosek(n,k);
end
x=roots(c);
%находим абсолютную ошибку
%вычисленного значения корня
error(n)=100*abs(x(1)-1);
end
%строим график зависимости ошибки
%найденного значения корня от степени
%полинома
plot(1:nmax,error,'-*');
Функция fzero содержит в себе комбинацию методов дихотомии, секущих и обратной квадратичной интерполяции. Типичное обращение к функции fzero выглядит следующим образом: x = fzero(f,x0). На рис.13 приведена иллюстрация того, как работает функция fzero на примере решения уравнения x2 - 2 = 0.
|
|
Рис.13. Иллюстрация работы функции fzero
Проведем более детальное тестирование функции fzero на примере решения уравнения
, (38)
корни которого известны и равны 1,2,…,n.
На листинге_№10 приведен код соответствующей программы. На рис.14 приведен итог работы программы. При отладке программы выбиралась максимально возможное значение параметра n, характеризующее степень полинома (38). В идеале на рис.14 должна быть “лестница”. Лестница действительно имеет место в том случае, когда n не превышает 40, при дальнейшем возрастании n возникают различного рода отклонения от лестницы. Алгоритм прекращает работу после того, как n превысит значение » 160.
Листинг_№10
%Программа тестирования работы функции fzero
function testfzero
%очищаем рабочее пространство
clear all
global n
%определяем корни полинома: 1,2,...,n
n=160;
%определяем массив начальных значений для
%итерационного процесса, используемого при
%работе функции fzero
x0=0.5:0.1:n;
%организуем цикл использования функции fzero
|
|
for k=1:length(x0)
y(k)=fzero(@f,x0(k));
end
%строим график зависимости корней полинома,
%которые возвращает функция fzero от начальных
%значений x0 (должна быть идеальная лестница)
plot(x0,y);
%определяем функцию, корни которой находит fzero
function y=f(x)
global n
y=1;
for i=1:n
y=y*(x-i);
end
Рис.14. Тестирование функции fzero
Функция fsolve используется в MATLAB для решения систем нелинейных уравнений. В простейшем случае обращение к fsolve имеет вид: x = fsolve(f,x0). Алгоритм работы функции fsolve использует начальное приближение x0 для минимизации суммы квадратов составляющих компонент вектора f методами Гаусса-Ньютона и Левенберга-Марквардта.
Дата добавления: 2022-01-22; просмотров: 19; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!