Преобразование уравнения к итерационному виду

Уравнение F(x) = 0 преобразуется к виду, пригодному для итерационного процесса, следующим преобразованием

,

где m - отличная от нуля константа.

В этом случае

. (2.15)

Функция f(x) должна удовлетворять условиям теоремы 2.2. Дифференцируя (2.15), получим

.(2.16)

Для выполнения условия 3 теоремы 2.2, достаточно подобрать m, так чтобы для всех х Î

. (2.17)

Пример 2.2. Решение уравнения методом простой итерации в пакете MАTLAB

 

1. Создание файла Func.m, содержащего описание функции

 

% листинг файла Func.m

function z=Func(x)

z=x.^4-11*x.^3+x.^2+x+0.1;

 

2. Создание файла Func1.m, содержащего описание функции

 

% листинг файла Func1.m

function z=Func1(x,m,f)

z=x-m*feval(f,x);

3. Создание файла Func2, содержащего описание функции f2 (2.16)

 

% листинг файла Func2.m

function z=Func2(x,m,f)

dx=10^-7;

x1=x+dx;

tmp1=x-m*feval(f,x);

tmp2=x1-m*feval(f,x1);

z=abs((tmp2-tmp1)/dx);

 

4. Построение графиков функций f1, f2 (рис. 2.6)

 

>> dx=10^-3;

>> x1=-0.1;x2=0.8;

>> x=x1:dx:x2;

>> m=-0.05;

>> plot(x,Func1(x,m,'Func'));

>> hold on

>> plot(x,Func2(x,m,'Func'),'--');

>> grid on

Рис. 2.6

 

(Из рис. 2.6 видно, что условия о достаточном условии сходимости итерационного процесса выполняются на интервале [0.21;0.8].)

5. Создание файла My_Iter.m, описание функции, возвращающей значение производной на каждом шаге итерационного процесса

 

% листинг функции My_Iter.m

function z=My_Iter(f,x0,eps,q,m)

x(1)=x0;

i=1;

while abs(x(i)-Func1(x(i),m,f))>q/(1-q)*eps

x(i+1)=Func1(x(i),m,f);

i=i+1;

End;

z=x;

 

6. Задание параметров итерационного процесса

 

>> q=0.01;

>> eps=10^-5;

 

7. Вычисление значений корня уравнения на каждом шаге итерационного процесса

 

>> z=My_Iter('Func',x0,eps,q,m)

 

8. Визуализация итерационного процесса (рис. 2.8)

 

>> plot(z,'-o');

Рис. 2.9

9. Вывод точного значения корня

 

>> Ni=length(z);

>> z(Ni)

ans =

0.3942

 

10. Вывод значения функции

 

>> Func(z(Ni))

ans =

-1.8185e-006

Для вычисление нулей функций, зависящих от одной перемененной, в пакете MATLAB предусмотрена специальная функции fzero( ), реализующая в зависимости от вида функции методы половинного деления, секущих или обратной квадратичной интерполяции. Обращение к данной функции имеет следующий вид:

x = fzero(fun,x0)

x = fzero(fun,x0,options)

x = fzero(fun,x0,options,P1,P2,...)

[x,fval] = fzero(...)

[x,fval,exitflag] = fzero(...)

[x,fval,exitflag,output] = fzero(...)

 

Здесь

fun - строковая переменная, содержащая имя файла;

x0 - начальное приближение или интервал поиска решения;

options - параметры, задающие точность и способ представления результатов вычислений;

P1, P2, … - дополнительные аргументы, передаваемые в функцию fun (F=feval(FUN,X,P1,P2,...));

fval - переменная, в которую функция fzero( ) возвращает значение корня уравнения f(x)=0;

exitflag - переменная, знак которой свидетельствует о наличии корня на данном интервале (exitflag=1 - корень существует);

output - переменная, в которую функция fzero( ) возвращает название метода, использованного для нахождения корня уравнения.

 

Пример 2.3. Решение уравнения с использованием функции fzero( ).

 

>> x=fzero('Func',0.8)

x =

0.3942

>> x=fzero('Func',[-2,2])% поиск корня на отрезке [-2,2]

x =

0.3942

 

% поиск корня с точностью до 10-2, вывод на экран значение корня и

% соответствующего значения функции на каждом шаге

% итерационного процесса

>> x=fzero('Func',0.8,optimset('TolX',10^-2,'disp','iter'))








Дата добавления: 2015-08-21; просмотров: 1357;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.018 сек.