Текст программы, реализующей численное интегрирование при помощи метода трапеций.



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)

За нулевое приближение берем произвольные числа . Например, с123=…=сn=0 или с11, с22,…, сnn.

    Подставляя эти значения в первую часть каждого уравнения системы (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; Мы поможем в написании вашей работы!

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






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