1.Методперебора. Прирешениинелинейногоуравненияметодомпереборазадаютсяначальноезначениеаргументаx=aишагh, которыйприэтомопределяетиточностьнахождениякорнейнелинейногоуравнения. ПокавыполняетсяусловиеF(x)*F(x+h)>0 аргументxувеличиваемнашагh (x=x+h). ЕслипроизведениеF(x)*F(x+h) становитсяотрицательным, тонаинтервале [x,x+h] существуетрешениеуравнения. Структограмма метода приведена на рисунке.
Пока F(x)∙F(x+h)>0 | Рис. Структограмма для метода перебора | |
x=x+h | ||
2. Метод половинного деления. При решении нелинейного уравнения методом половинного деления задаются интервал [a,b], на котором существует только одно решение, и желаемая точность ε. Затем определяется середина интервала с=(а+b)/2 и проверяется условие F(a)∙F(c)<0. Если указанное условие выполняется, то правую границу интервала b переносим в среднюю точку с (b=c). Если условие не выполняется, то в среднюю точку переносим левую границу(a=c). Деление отрезка пополам продолжается пока |b-a|>ε. Структограмма решения нелинейных уравнений методом половинного деления приведена на рисунке.
|
|
Пока |b-a|>ε | |
c=(a+b)/2 F(a)∙F(c)<0 | |
да | нет |
b=c | a=c |
· Метод хорд. При решении нелинейного уравнения методом хорд задаются интервал [a,b], на котором существует только одно решение, и точность ε. Затем через две точки с координатами (a,F(a)) и (b,F(b)) проводим отрезок прямой линии (хорду) и определяем точку пересечения этой линии с осью абсцисс (точка c). Если при этом F(a)∙F(c)<0, то правую границу интервала переносим в точку с (b=c). Если указанное условие не выполняется, то в точку c переносится левая граница интервала (а=с). Поиск решения прекращается при достижении заданной точности |F(c)|< ε. Для определения точки пересечения хорды с осью абсцисс воспользуемся следующей формулой (попытайтесь получить формулу самостоятельно).Структограмма метода хорд показана на рисунке.
Пока |F(c)|>ε | |
F(a)∙F(c)<0 | |
да | нет |
b=c | a=c |
· Метод касательных. При решении нелинейного уравнения методом касательных задаются начальное значение аргумента x0 и точность ε. Затем в точке(x0,F(x0)) проводим касательную к графику F(x) и определяем точку пересечения касательной с осью абсцисс x1. В точке (x1,F(x1)) снова строим касательную, находим следующее приближение искомого решения x2 и т.д. Указанную процедуру повторяем пока |F(xi)| > ε. Для определения точки пересечения (i+1) касательной с осью абсцисс воспользуемся следующей формулой (получите формулу самостоятельно). Условие сходимости метода касательных F(x0)∙F''(x0)>0. Структограмма решения нелинейных уравнений методом касательных показана на рис.
|
|
Пока |F(x)|>ε | Рис. Структограмма для метода касательных | |
·
· Метод хорд-касательных. Если в методе касательных производную функции F'(xi) заменить отношением конечных приращений, то получаем расчетную формулу для метода хорд-касательных. Порядок выполнения вычислений в данном методе аналогичен рассмотренному ранее.
· Метод итераций. При решении нелинейного уравнения методом итераций воспользуемся записью уравнения в виде x=f(x). Задаются начальное значение аргумента x0 и точность ε. Первое приближение решения x1 находим из выражения x1=f(x0), второе - x2=f(x1) и т.д. В общем случае i+1 приближение найдем по формуле xi+1 =f(xi). Указанную процедуру повторяем пока |f(xi)|>ε. Условие сходимости метода итераций |f'(x)|<1. Структограмма метода итераций показана на рис.
Пока |f(xi)|>ε | Рис. Структограмма для метода итераций | |
xi+1 =f(xi) | ||
34. Численные интегрирования.
Апроксимация данных.
Program lVl;
uses crt;
var a, b, c, d, a0, a1, a10, a11, p: real; i, n: integer;
x, y, x1, y1, f:array[1..12] of real;
begin
clrscr;
write('n='); readln (n);
write ('x(i) и y(i):');
for i:=1 to n do
begin
write ('x(',i:2,')='); readln (x[i]);
write('y(',i:2,')='); readln (y[i]);
x1[i]:=
y1[i]:=
end;
writeln ('числовыеданныедляаппроксимации:');
for i:=1 to n do begin
write('x(',i:2,')=',x[i]:2:4);
writeln ('y(',i:2,')=',y[i]:2:4);
end;
a:=0; b:=0; c:=0; d:=0;
for i:=1 to n do begin
a:=a+x1[i]; b:=b+y1[i]; c:= c+sqr(x1[i]); d:=d+x1[i]*y1[i];
end;
a10:= (b*c-a*d)/(n*c-sqr(a));
a11:=(n*d-a*b) /(n*c-sqr(a));
a0:=a10;
a1:=a11;
writeln ('параметры аппроксимирующей зависимости:');
writeln ('a0=', a0:2:4);
writeln ('a1=', a1:2:4);
writeln ('y[i]:');
for i:=1 to n do begin
f[i]:= 1/a0+a1*sqrt(x[i]));
write ('x(',i:2,')=', x[i]:2:4);
write ('f (',i:2,')=',f[i]:2:4);
end;
p:=0;
for i:=1 to n do p:=p+abs(y[i]-f[i])/y[i];
p:= p/n*100;
writeln ('Погрешность=',p:2:2,'%');
writeln(1st,’погрешность=’,p:2:2,’%’);
readln
Результат Y[i]:
x (1)= f (1)=
x (2)= f (2)=
x (3)= f (3)=
x (4)= f (4)=
x (5)= f (5)=
x (6)= f (6)=
x (7)= f (7)=
x (8)= f (8)=
x (9)= f (9)=
x (10)= f(10)=
x (11)= f (11)=
x (12)= f (12)=
Погрешность равна: