Стандартные функции поиска корней в 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!