Текст программы, реализующей численное интегрирование при помощи метода трапеций.
Program mettrap;
Const a=1. 4 ;
B=2. 6 ;
E=0.001;
Var
H,k,m,j1,j2: real;
Function f(x;real):real;
Begin
F:=sqrt(x*x+2. 5 );
End;
Procedure Integral (h1,c,d:real, n:integer);
Var
X,y,s1: real;
I: integer;
Begin
S1:=0;
For i:=1 to n-1 do
Begin
X=x+h1;
S1:=s1+f(x);
End;
Y:=(f(c)+f(d)+s1)*h1/2;
End;
Begin
H:=exp(1/3*ln(e));
K:=(b-a)/h;
M:=trunk(k)+1;
H:=(b-a)/m;
Integral(h,a,b,m);
J1:=y;
Integral(h*2,a,b,m/2);
J2:=y;
While abs(j1-j2)/3>=e do
Begin
H:=h/2;
M:=m*2;
Integral(h,a,b,m);
J1:=y;
Integral(h*2,a,b,m/2);
J2:=y;
End;
Writeln (‘ Интеграл I=’, j1);
End .
Блок-схема метода трапеций
Решение задачи №2
Формулировка: Вычислить интеграл по формуле трапеций при n=8. Оценить погрешность двумя способами:
А) сравнение с точным б) с помощью двойного просчета
Найдем точное решение:
Вычислим интеграл по формуле трапеций.
Разобьем отрезок [1,4; 2,6] на восемь равных частей.
x0=1,4
x1=1,55
x2=1,7
x3=1,85
x4=2
x5=2,15
x6=2,3
x7=2,45
x8=2,6
Вычислим значения функции в этих точках.
Для удобства результаты оформим в виде таблицы.
x | f(x) | ||
1,4 | 0,66292
| ||
1,55 | 0,70004 | ||
1,7 | 0,73224 | ||
1,85 | 0,76018 | ||
2 | 0,78446 | ||
2,15 | 0,80561 | ||
2,3 | 0,82406 | ||
2,45 | 0,84022 | ||
2,6 | 0,85441 |
- формула трапеций.
Для сравнения сделаем n=4 и n=8.
x | f(x) | n=8 | n=4 | ||
1,4 | 0,66292 | 0,5 | 0,5 | 0,33146 | 0,33146 |
1,55 | 0,70004 | 1 |
| 0,70004 | 0 |
1,7 | 0,73224 | 1 | 1 | 0,732242 | 0,732242 |
1,85 | 0,76018 | 1 |
| 0,760185 | 0 |
2 | 0,78446 | 1 | 1 | 0,784465 | 0,784465 |
2,15 | 0,80561 | 1 |
| 0,805605 | 0 |
2,3 | 0,82406 | 1 | 1 | 0,824061 | 0,824061 |
2,45 | 0,84022 | 1 |
| 0,84022 | 0 |
2,6 | 0,85441 | 0,5 | 0,5 | 0,427207 | 0,427207 |
шаг | 0,15 | 0,3 | 6,205483 | 3,099433 | |
I= | 0,930822 | ||||
I1= | 0,92983 |
Сравним с точным решением.
Оценим точность результатов по правилу Рунге
Итерационные методы решения систем линейных алгебраических уравнений
Метод простых итераций
Задана система n линейных уравнений с n неизвестными.
, i=1,2,…,n ( 3.1)
Преобразуем систему уравнений (3.1) к виду
(3.2)
За нулевое приближение берем произвольные числа . Например, с1=с2=с3=…=сn=0 или с1=β1, с2=β2,…, сn=βn.
Подставляя эти значения в первую часть каждого уравнения системы (3.2), получаем более точное решение , где .
Полученное решение еще раз подставляем в правую часть уравнений системы (3.2), последующее приближение определяется значениями . Таким образом, метод итераций состоит в получении последовательности решений системы ( ), ( ), …, ( ) и определяется алгоритмом (2.3)
|
|
Или в матричной записи
Здесь можно выделить два случая: последовательность приближений сходится к точному решению системы и последовательность приближений расходится. В последнем случае необходимо составлять другую систему.
Если коэффициенты системы (3.2) удовлетворяют одному из следующих условий:
1. ;
2. ;
3. , то последовательность, построенная по формуле (3.3) сходится к решению системы (3.1).
Итерационный процесс заканчивается, если .
Метод Зейделя
Алгоритм Зейделя позволяет ускорить сходимость процесса итерации. Для нахождения использовались значения, найденные на предыдущем этапе, . Можно при вычислении пользоваться только что вычисленными значениями . В этом случае формула (3.2) примет вид:
Программа на языке Паскаль
Procedure Zeydel(In_B: Boolean; N, Max_Iter: word; A: Matrix; E: Real; var x: vector; outStr: str50);
Var
I, j, k : Integer;
S,r : Real;
L : Boolean;
Y: Vector;
Str1 : String [5];
Begin
L:= true;
K:=1;
If In_B then
Begin
For i:=1 to n do
If a[i,i]<>0 then x[i]:=a[I,n+1]/a[I,i];
Else
|
|
Begin
OutSTr: = ‘Диагональный элемент равен нулю’;
Exit;
End;
End:
Else
For i:=1 to n do x[i]:=a[I, n+1];
For i:=1 to n do
Begin
S:=0;
For j:=1 to n do s:=s-a[I,j]*x[j];
If in_b then
Begin
S:=(a[I,n+1]-s)/a[I,i];
Y[i]:=x[i]+s;
If y[i]>1e35 then exit;
If abs(s)>e then l:=False;
End;
Else
Begin
Y[i]:=s+a[I,n+1];
R:=abs(y[i]-x[i]);
If r>e then l:=false;
End;
If l<>false then
Exit;
K:=k+1;
If k> max_iter then
Begin str(k: 5, Str1);
outStr:=’итерационный процесс расходится в ’+Str+’итерациях’
end;
for i:=1 to n do x[i]:=y[i];
outStr:=’итерационный процесс сходится в ’+ Str+’итерациях’
End;
End.
Решение задачи №3
Задача №3.
|
|
Найти решение системы методом Зейделя с точностью 0,0001.
Решим систему алгебраических уравнений методом Зейделя
За нулевое приближение выберем:
Подставляем эти значения в правую часть уравнений системы.
Получили первое приближение системы:
Подставляем эти значения в правую часть уравнений системы.
Получили второе приближение:
Вычислим разности
Выбираем максимальное из разностей. Получили решение с точностью ε=0,2.
Для получения более точного решения воспользуемся MS Excel
| x1 | x2 | x3 | x4 | b |
x1 | 0,07 | -0,08 | 0,11 | -0,18 | -0,51 |
x2 | 0,18 | 0,52 | 0 | 0,21 | 1,17 |
x3 | 0,13 | 0,31 | 0 | 0,21 | -1,02 |
x4 | 0,08 | -0,33 | 0,28 | 0 | -0,28 |
Первое приближение | Разность | ||||
x1 | -0,7011 | 0,1911 | |||
x2 | 1,6278 | 0,4578 | |||
x3 | -0,7824 | 0,2376 | |||
x4 | -0,9925 | 0,7125 | |||
макс | 0,7125 | ||||
Второе приближение | Разность | ||||
x1 | -0,59672 | 0,104385 | |||
x2 | 1,681833 | 0,054033 | |||
x3 | -0,81495 | 0,03255 | |||
x4 | -1,09233 | 0,099834 | |||
макс | 0,104385 | ||||
Третье приближение | Разность | ||||
x1 | -0,57934 | 0,017374 | |||
x2 | 1,707754 | 0,025921 | |||
x3 | -0,80559 | 0,009355 | |||
x4 | -1,11093 | 0,018594 | |||
макс | 0,025921 | ||||
Четвертое приближение | Разность | ||||
x1 | -0,57582 | 0,003518 | |||
x2 | 1,720456 | 0,012702 | |||
x3 | -0,79921 | 0,006389 | |||
x4 | -1,11547 | 0,004545 | |||
макс | 0,012702 | ||||
Пятое приближение | Разность | ||||
x1 | -0,57507 | 0,000751 | |||
x2 | 1,72674 | 0,006284 | |||
x3 | -0,79576 | 0,003441 | |||
x4 | -1,11759 | 0,002121 | |||
макс | 0,006284 | ||||
Шестое приближение | Разность | ||||
x1 | -0,57476 | 0,00031 | |||
x2 | 1,729697 | 0,002957 | |||
x3 | -0,79416 | 0,0016 | |||
x4 | -1,11864 | 0,00105 | |||
макс | 0,002957 | ||||
Седьмое приближение | Разность | ||||
x1 | -0,57461 | 0,00015 | |||
x2 | 1,73107 | 0,001373 | |||
x3 | -0,79343 | 0,000737 | |||
x4 | -1,11915 | 0,000503 | |||
макс | 0,001373 | ||||
Восьмое приближение | Разность | ||||
x1 | -0,57454 | 7,22E-05 | |||
x2 | 1,731706 | 0,000635 | |||
x3 | -0,79309 | 0,00034 | |||
x4 | -1,11938 | 0,000235 | |||
макс | 0,000635 | ||||
Девятое приближение | Разность | ||||
x1 | -0,57451 | 3,39E-05 | |||
x2 | 1,732 | 0,000294 | |||
x3 | -0,79293 | 0,000157 | |||
x4 | -1,11949 | 0,000109 | |||
макс | 0,000294 | ||||
Десятое приближение | Разность | ||||
x1 | -0,57449 | 1,57E-05 | |||
x2 | 1,732136 | 0,000136 | |||
x3 | -0,79286 | 7,27E-05 | |||
x4 | -1,11954 | 5,04E-05 | |||
макс | 0,000136 | ||||
Одиннадцатое приближение | Разность | ||||
x1 | -0,57448 | 7,27E-06 | |||
x2 | 1,732199 | 6,31E-05 | |||
x3 | -0,79283 | 3,37E-05 | |||
x4 | -1,11956 | 2,33E-05 | |||
макс | 6,31E-05 |
Только на одиннадцатом шаге получаем решение с точностью 0,0001:
Ответ: x1=-0,5745, x2=1,7322, x3=-0,7928, x4=-1,1196.
Дата добавления: 2021-12-10; просмотров: 37; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!