Чисельні методи розв"язання нелінійних рівнянь на ПК
![Лабораторная работа: Чисельні методи розв"язання нелінійних рівнянь на ПК](https://gugn.ru/work/5281748/cover.png)
Висновок: Я навчилась розв’язувати нелінійні рівняння на ПК різними чисельними методами: половинного ділення, хорд, дотичних (Ньютона), ітерацій (послідовних наближень), комбінаційний (хорд та дотичних). Завдання: Методами поділу відрізка пополам, методом хорд, методом дотичних та методом ітерацій знайти всі корені нелінійного рівняння. Точність знаходження коренів вважати рівною 0,1. Мета… Читать ещё >
Чисельні методи розв"язання нелінійних рівнянь на ПК (реферат, курсовая, диплом, контрольная)
Чисельні методи розв’язання нелінійних рівнянь на ПК
Мета роботи: ознайомитись з методикою і вивчити різні алгоритми розв’язування нелінійних рівнянь на ЕОМ.
Завдання: Методами поділу відрізка пополам, методом хорд, методом дотичних та методом ітерацій знайти всі корені нелінійного рівняння. Точність знаходження коренів вважати рівною 0,1.
Методом поділу відрізка пополам:
clear, clc
f = @(x) atan (2*x) — 0.2*((x-1)^4)+sin (x);% функция
exp = 0.1;% точность
a = 2;% нижний предел
b = 4;% верхний предел
fplot (f, [a, b]), hold on% рисуем функцию
fa=f (a);
fb=f (b);
p=(a+b)/2;
n=1;
fp=f (p);
while abs (fp)>exp
if fa*fp<0
b=p;
else
a=p;
end;
p=(a+b)/2;
n=n+1;
fa=f (a);
fp=f (p);
end;
x0 = p;% корень
plot (x0, f (x0), 'or')
grid on
title (['x0=', num2str (x0)])
Методом хорд:
clear, clc
f = @(x) atan (2*x) — 0.2*((x-1)^4)+sin (x);
a=2;
b=4;
e=0.0001;
while (abs (a-b)>e)
c=a — (f (a)*(b-a))/(f (b) — f (a));
if f (c)*f (b)>0
b=c;
else
a=c;
end;
end
disp (['Ответ x=' num2str (c, 3)]);
x0 = с;% корень
plot (x0, f (x0), 'or')
grid on
title (['x0=', num2str (x0)])
Методом дотичних:
clear, clc;
e = 0.1;
f = @(x) atan (2*x) — 0.2*((x-1)^4)+sin (x);
df = @(x) (2/(4*(x2)+1)) — 0.8*((x-1)^3)+cos (x);
a=0; b=1; N=0;
y1=f (a); y2=f (b);
z1=df (a); z2=df (b);
N=4;
ezplot (f, [a, b]), hold on
while 1
s=((z2*b — z1*a) — (y2-y1))/(z2-z1);
y=f (s); z=df (s);
N = N + 2;
if z==0 | b-a < 2*e
x=s;
break;
elseif z>0
b=s; y2=y; z2=z;
else
a=s; y1=y; z1=z;
end
end
if z≅0
x=(a+b)/2;
y=f (x);
end
fprintf ('Метод касательных n n');
fprintf ('x =%.5f n', x);
fprintf ('y =%.5f n n', y);
fprintf ('Количество итераций:%i n', N);
ezplot (f, [-0.5 1]), hold on
plot (x, y, 'or'), grid on
grid on
Метод ітерацій:
clear, clc
f = inline ('atan (2*x) — 0.2*((x-1)^4)+sin (x)');%ф.inline чтобы задать строку
x = -10:0.01:10;
y = f (x);
plot (x, y); grid
% Метод простых итераций
eps = 1e-4;
x0 = 1;
% значение производной в начальной точке:
L0 = 2e-6./(f (x0+1e-6) — f (x0−1e-6));
iter = 0;
x = x0;
razn = 100;
while abs (razn)>eps
xn = x — L0*f (x);
razn=xn-x;
x=xn;
iter=iter+1;
end
x
iter
hold on
plot (x, f (x), 'or'), grid on
Обчислимо вираз: =L0
похідну обчислюємо приблизно, за допомогою невеликого прирісту:
де h = 10-6, отримаємо:
Комбінований:
clear, clc
syms x
f = x3+6*x-5;
a=0.5;
b=1;
eps=0.1;
i=0;
c=(a+b)/2;
f1=diff (f);
f2=diff (f1);
while (abs (b-a)>eps)
if ((subs (f1, x, c)*subs (f2, x, c))>=0)
a=a — (b-a)*subs (f, x, a)/(subs (f, x, b) — subs (f, x, a));
b=b-subs (f, x, b)/subs (f1, x, b);
else
a=a-subs (f, x, a)/subs (f1, x, a);
b=b — (b-a)*subs (f, x, b)/(subs (f, x, b) — subs (f, x, a));
end
i=i+1;
end
fprintf ('b=% f n', double (b))
ezplot (f, [0.5 1]), hold on
plot (b, subs (f, x, b), 'or')
grid on
нелінійний рівняння хорда ітерація
Висновок: Я навчилась розв’язувати нелінійні рівняння на ПК різними чисельними методами: половинного ділення, хорд, дотичних (Ньютона), ітерацій (послідовних наближень), комбінаційний (хорд та дотичних).