Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Chislennye_metody_obedin.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

6. Задания по численным методам.

Задание 1.

Приближенное решение нелинейных уравнений. Варианты заданий представлены в таблице 1.

  1. Отделить вещественные корни алгебраического уравнения аналитическим способом, используя понятие критических точек и формулу определения промежутка существования вещественных корней.

  2. Вычислить все корни уравнения с точностью =10-4 всеми указанными методами, используя программу.

Задание 2.

Приближенное вычисление определенных интегралов. Варианты заданий представлены в таблице 2.

  1. Вычислить определенный интеграл с заданной точностью =10-4 всеми указанными методами, используя программу.

Задание 3.

Приближенное интегрирование дифференциальных уравнений. Варианты заданий представлены в таблице 3.

  1. Найти решение дифференциального уравнения методами Эйлера и Рунге-Кутта четвертого порядка на отрезке [0; 1] с шагом h=0.1.

Задание 4.

Приближенное решение систем линейных уравнений. Варианты заданий представлены в таблице 4.

  1. Решить систему методом простых итераций и методом итераций Зейделя с точностью =10-5, используя программу.

.

Задание 5.

Аппроксимация и интерполяция функций. Варианты заданий представлены в таблице 5.

  1. Вычислить коэффициенты a, b, c методом наименьших квадратов для параболической зависимости вида y=ax2+bx+c.с использованием данных, указанных в варианте, и найти значения функции y для заданных аргументов x1 и x2.

  2. Вычислить значения функции y для заданных аргументов x1 и x2, используя квадратичную интерполяцию.

  3. Сравнить значения функции y для заданных аргументов x1 и x2, полученные по методу наименьших квадратов и методу квадратичной интерполяции.

.

Задание 1.

Таблица 1– Варианты заданий

Номер варианта

Уравнение

Метод

x3 + 3x2 - 1 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 3x2 + 2,5 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

2x3 + 9x2 - 10 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 12x - 5 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 3x2 + 1,5 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

2x3 + 9x2 - 4 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

2x3 - 3x2 - 12 x + 8 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 6x - 8 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 + 3x + 1 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 3x2 + 6 x - 2 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных касательных

x3 + 3x2 + 6 x - 1 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных половинного деления

x3 + 0,1x2 + 0,4 x - 1,2 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных комбинированный хорд и касательных

x3 - 3x2 + 6 x - 5 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных хорд

2x3 - 3x2 - 12x - 5 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 3x + 3 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных половинного деления

x3 + 3x2 - 24x - 10 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

2x3 + 9x2 - 21 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 + 3x2 - 2 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 3x2 - 24x - 3 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 + 3x2 - 3,5 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 7x - 7 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 + 2x -7 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 2x2 - 6 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 2x - 5 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 - 2x2 + 3 x - 5 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

x3 + 10x - 10 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

2x3 + 4x2 - 1 = 0

Хорд, касательных, половинного деления, комбинированный хорд и касательных

Задание 2.

Таблица 2 – Варианты заданий

Номер варианта

Уравнение

Метод

1

2

3

1

прямоугольников

2

трапеций

3

Симпсона

4

прямоугольников

5

трапеций

6

Симпсона

7

прямоугольников

8

трапеций

9

Симпсона

10

Прямоугольников

11

Трапеций

12

Симпсона

13

прямоугольников

Продолжение таблицы 2

1

2

3

14

трапеций

15

Симпсона

16

прямоугольников

17

трапеций

18

Симпсона

19

прямоугольников

20

трапеций

21

Симпсона

22

прямоугольников

23

трапеций

24

Симпсона

25

Прямоугольников

26

Трапеций

27

Симпсона

Задание 3.

Таблица 3 – Варианты заданий

Номер варианта

Уравнение

Начальное условие

1

2

3

1.

y(0) = 0,2

2.

y(0) = 0,6

3.

y(0) = 0,3

4.

y(0) = 0,4

5.

y(0) = 0,4

6.

y(0) = 0,4

7.

y(0) = 0,7

8.

y(0) = 0,2

9.

y(0) = 0,4

10.

y(0) = 0,4

11.

y(0) = 0

12.

y(0) =

13.

y(0) = 0

14.

y(0) = 0,8

15.

y(0) = 1,2

16.

y(0) = 1,4

17.

y(0) = 0

18.

y(0) = 0

19.

y(0) = 0,1

20.

y(0) = 0

21.

y(0) = 1

22.

y(0) =

23.

y(0) = 0

24.

y(0) = 0

Продолжение таблицы 3.

1

2

3

25.

y(0) = 0

26.

y(0) = 0

27.

y(0) = 0

Задание 4.

Таблица 4 – Варианты заданий

Номер варианта

Система

1

2

Продолжение таблицы 5.8

1

2

12

13

14

Продолжение таблицы 4

1

2

15

16

17

18

19

20

21

22

Продолжение таблицы 5.8

1

2

23

24

25

26

27

Задание 5.

Таблица 5 – Варианты заданий

Номер варианта

Таблица данных

1

2

3

4

5

6

7

8

9

10

X

0,5

1,0

1,5

2,0

2,5

3,0

3,5

4,0

1

Y

0,4

1,7

3,8

6,9

10,6

15,1

20,7

27,3

X1 = 1,235 X2 = 3,871

X

0,8

1,3

1,8

2,3

2,8

3,3

3,8

4,3

2

Y

61,3

55,2

49,8

45,1

41,3

38,3

36,0

34,6

X1 = 2,529 X2 = 3,982

X

2,3

2,8

3,3

3,8

4,3

4,8

5,3

5,8

3

Y

56,7

55,3

53,0

50,0

46,2

41,5

36,1

30,0

X1 = 2,721 X2 = 4,981

Продолжение таблицы 5

1

2

3

4

5

6

7

8

9

10

X

0,4

0,9

1,4

1,9

2,4

2,9

3,4

3,9

4

Y

40,0

33,9

28,5

23,8

20,0

17,0

14,7

13,3

X1 = 1,581 X2 = 2,683

X

1,6

2,1

2,6

3,1

3,6

4,1

4,6

5,1

5

Y

49,3

47,9

45,6

42,6

38,8

34,1

28,7

22,6

X1 = 2,871 X2 = 4,593

X

2,2

2,7

3,2

3,7

4,2

4,7

5,2

5,7

6

Y

41,5

40,1

37,8

34,8

31,0

26,3

20,9

14,8

X1 = 2,923 X2 = 4,981

X

0,3

0,8

1,3

1,8

2,3

2,8

3,3

3,8

7

Y

55,2

49,1

43,7

39,0

35,2

32,2

29,9

28,5

X1 = 1,923 X2 = 2,981

X

1,9

2,4

2,9

3,4

3,9

4,4

4,9

5,4

8

Y

55,4

54,0

51,7

48,7

44,9

40,2

34,8

28,7

X1 = 2,371 X2 = 4,632

X

1,2

1,7

2,2

2,7

3,2

3,7

4,2

4,7

9

Y

36,6

35,2

32,9

29,9

26,1

21,4

16,0

9,9

X1 = 2,921 X2 = 4,121

X

2,0

2,5

3,0

3,5

4,0

4,5

5,0

5,5

10

Y

60,1

54,0

48,6

43,9

40,1

37,1

34,8

33,4

X1 = 2,783 X2 = 4,821

X

1,8

2,3

2,8

3,3

3,8

4,3

4,8

5,3

11

Y

58,2

56,8

54,5

51,5

47,7

43,0

37,6

31,5

X1 = 2,892 X2 = 3,921

X

0,7

1,2

1,7

2,2

2,7

3,2

3,7

4,2

12

Y

38,5

32,4

27,0

22,3

18,5

15,5

13,2

11,8

X1 = 2,547 X2 = 2,893

X

2,4

2,9

3,4

3,9

4,4

4,9

5,4

5,9

13

Y

52,9

51,5

49,2

46,2

42,4

37,7

32,3

26,2

X1 = 4,721 X2 = 5,67

X

0,2

0,7

1,2

1,7

2,2

2,7

3,2

3,7

14

Y

43,8

37,7

32,3

27,6

23,8

20,8

18,5

17,1

X1 = 2,371 X2 = 2,831

X

1,5

2,0

2,5

3,0

3,5

4,0

4,5

5,5

15

Y

40,9

39,5

37,2

34,2

30,4

25,7

20,3

14,2

X1 = 3,281 X2 = 3,982

X

2,9

3,4

3,9

4,4

4,9

5,4

5,9

6,4

16

Y

55,8

49,7

44,3

39,6

35,8

32,8

30,5

29,7

X1 = 3,72 X2 = 5,92

Продолжение таблицы 5

1

2

3

4

5

6

7

8

9

10

X

2,6

3,1

3,6

4,1

4,6

5,1

5,6

6,1

17

Y

45,1

43,7

41,4

38,4

34,6

29,9

24,5

18,4

X1 = 3,581 X2 = 4,79

X

0,5

1,0

1,5

2,0

2,5

3,0

3,5

4,0

18

Y

41,6

35,5

30,1

25,4

21,6

18,6

16,3

14,9

X1 = 1,879 X2 = 2,37

X

2,8

3,3

3,8

4,3

4,8

5,3

5,8

6,3

19

Y

46,6

45,2

42,9

39,9

36,1

31,4

26,0

19,9

X1 = 3,92 X2 = 5,47

X

2,1

2,6

3,1

3,6

4,1

4,6

5,1

5,6

20

Y

50,1

44,0

38,6

33,9

30,1

27,1

24,8

23,4

X1 = 4,87 X2 = 2,69

X

1,7

2,2

2,7

3,2

3,7

4,2

4,7

5,2

21

Y

48,0

46,6

44,3

41,3

37,5

32,8

27,4

21,3

X1 = 3,87 X2 = 4,29

X

1,0

1,5

2,0

2,5

3,0

3,5

4,0

4,5

22

Y

48,7

42,6

37,2

32,5

28,7

25,7

23,4

22,0

X1 = 2,894 X2 = 4,2

X

2,5

3,0

3,5

4,0

4,5

5,0

5,5

6,0

23

Y

44,5

43,1

40,8

37,8

34,0

29,3

23,9

17,8

X1 = 3,4 X2 = 2,5

X

1,4

1,9

2,4

2,9

3,4

3,9

4,4

4,9

24

Y

52,2

46,1

40,7

36,0

32,2

29,2

26,9

25,5

X1 = 2,47 X2 = 3,72

X

0,1

0,6

1,1

1,6

2,1

2,6

3,1

3,6

25

Y

49,7

48,3

46,0

43,0

39,2

34,5

29,1

23,0

X1 = 1,72 X2 = 3,32

X

2,7

3,2

3,7

4,2

4,7

5,2

5,7

6,2

26

Y

47,0

40,9

35,5

30,8

27,0

24,0

21,7

20,3

X1 = 3,94 X2 = 5,47

X

1,3

1,8

2,3

2,8

3,3

3,8

4,3

4,8

27

Y

42,4

41,0

38,7

35,7

31,9

27,2

21,8

15,7

X1 = 2,21 X2 = 3,95

program nonlinear_equation;

var

z: array[1..10] of real;

k,c,j: integer;

e,a,b: real;

function f(x: real): real;

begin

f:=x*x*x-68*x*x/25-107*x/25+10.32;

end;

function psy(x,k: real): real;

begin

psy:=x-f(x)/k;

end;

function ff(x: extended): extended;

var

k,i: integer;

e,tmp: extended;

begin

e:=0.0000001;

k:=12;

tmp:=0;

for i:=-k to k do

begin

tmp:=tmp+i*f(x+(i)*e);

end;

ff:=(3/k/(k+1)/(2*k+1))*tmp/e;

end;

function fff(x: extended): extended;

var

k,i: integer;

e,tmp: extended;

begin

e:=0.000001;

k:=18;

tmp:=0;

for i:=-k to k do

begin

tmp:=tmp+i*ff(x+(i)*e);

end;

fff:=(3/k/(k+1)/(2*k+1))*tmp/e;

end;

procedure analytik(a,b,e: real);

var

x,y,y1: real;

p: boolean;

begin

p:=true;

x:=a;

k:=0;

while p=true do

begin

y:=f(x);

x:=x+e;

y1:=f(x);

if ((y<0)and(y1>0))or((y>0)and(y1<0)) then

begin

k:=k+1;

z[k]:=x-e;

k:=k+1;

z[k]:=x;

end;

if (x>b) then

p:=false;

end;

end;

function mdelen(t,tt,e: real): real;

var

x,a,b,f1,f2: real;

p: boolean;

begin

a:=t;

b:=tt;

p:=true;

x:=a;

f1:=f(x);

while p=true do

begin

x:=(a+b)/2;

f2:=f(x);

if (abs(f2)<=e) then

begin

p:=false;

end

else

begin

if (f1*f2>0) then

a:=x

else

b:=x;

end;

end;

mdelen:=x;

end;

function mhord(a,b,e: real): real;

var

x,x0,x1,ae: real;

p: boolean;

begin

p:=true;

x:=(a+b)/2;

if (ff(x)*fff(x)>0) then

begin

x0:=a;

ae:=b;

end

else

begin

x0:=b;

ae:=a;

end;

while p=true do

begin

x1:=x0-f(x0)*(ae-x0)/(f(ae)-f(x0));

if (abs(x1-x0)<e) then

p:=false

else

x0:=x1;

end;

mhord:=x1;

end;

function mkasat(a,b,e: real): real;

var

x,x0,x1: real;

p: boolean;

begin

p:=true;

x:=(a+b)/2;

if (ff(x)*fff(x)>0) then

x0:=b

else

x0:=a;

while p=true do

begin

x1:=x0-f(x0)/(ff(x0));

if (abs(x1-x0)<e) then

p:=false

else

x0:=x1;

end;

mkasat:=x1;

end;

function mcombo(t,tt,e: real): real;

var

x,a,b,a1,b1,r: real;

p: boolean;

begin

a:=t;

b:=tt;

p:=true;

while p=true do

begin

x:=(a+b)/2;

if (ff(x)*fff(x)>0) then

begin

a1:=a-f(a)*(b-a)/(f(b)-f(a));

b1:=b-f(b)/ff(b);

end

else

begin

a1:=a-f(a)/ff(a);

b1:=b-f(b)*(b-a)/(f(b)-f(a));

end;

r:=abs(b1-a1);

a:=a1;

b:=b1;

if (r<=2*e) then

p:=false;

end;

x:=0;

x:=(a+b)/2;

mcombo:=x;

end;

function maxff(a,b,e: real): real;

var

p: boolean;

tmp: real;

begin

tmp:=abs(ff(a));

p:=true;

while p=true do

begin

if abs(ff(a))>tmp then

tmp:=abs(ff(a));

a:=a+e;

if (a>b) then

p:=false;

end;

maxff:=tmp;

end;

function mitera(a,b,e: real): real;

var

x,x1,k: real;

p: boolean;

begin

Randomize;

p:=true;

while p=true do

begin

x:=(b-a)*random+a;

k:=maxff(a,b,e);

if (abs(k)>abs(ff(x))/2) then

p:=false;

end;

p:=true;

while p=true do

begin

x1:=psy(x,k);

if (abs(x1-x)<e) then

p:=false

else

x:=x1;

end;

mitera:=x1;

end;

begin

{точность}

e:=0.0001;

{примерный диапазон нахождения корней}

a:=(-1)*4;

b:=(-1)*a;

analytik(a,b,e);

if (k=0) then

begin

c:=1;

z[1]:=a;

z[2]:=b;

end

else

begin

c:=trunc(k/2);

end;

for j:=1 to c do

begin

a:=z[j*2-1];

b:=z[j*2];

writeln('____________________________________________________________________');

writeln('Metod deleniya, X= ',mdelen(a,b,e));

writeln('Metod kasatelnih, X= ',mkasat(a,b,e));

writeln('Metod combo, X= ',mcombo(a,b,e));

writeln('Metod hord, X= ',mhord(a,b,e));

writeln('Metod iteracii, X= ',mitera(a,b,e));

end;

end.

program integrirovanie;

var

a,b,e: real;

n: integer;

function f(x: real): real;

begin

f:=1/(sqrt(x*x+2.5));

end;

function msimpson(a,b,e: real): real;

var

x,s,h,r,i,i1: real;

begin

h:=(b-a)/2;

i1:=0;

r:=1;

while r>e do

begin

s:=(f(a)+f(b))/2;

x:=a+h;

repeat

s:=s+2*f(x)+f(x+h);

x:=x+2*h;

until x>(b-h);

i:=2*h*s/3;

r:=abs(i-i1)/15;

h:=h/2;

i1:=i;

end;

msimpson:=i;

end;

function mtrpezi(a,b: real; n: integer): real;

var

x,s,h: real;

i: integer;

begin

h:=(b-a)/n;

x:=a;

s:=(f(a)+f(b))/2;

for i:=2 to n do

begin

x:=x+h;

s:=s+f(x);

end;

mtrpezi:=h*s;

end;

function mprug(a,b: real; n: integer): real;

var

x,s,h: real;

i: integer;

begin

h:=(b-a)/n;

s:=0;

x:=a;

for i:=1 to n do

begin

s:=s+f(x);

x:=x+h;

end;

mprug:=h*s;

end;

function mymethod(a,b: real; n: integer): real;

var

x,s,h: real;

i: integer;

begin

h:=(b-a)/n;

s:=0;

for i:=1 to n-1 do

begin

s:=s+f(a+i*(b-a)/n);

end;

mymethod:=((f(a)+f(b))/2+s)*(b-a)/n;

end;

begin

{отрезок интегрирования}

a:=1.6;

b:=2.6;

{точность}

e:=0.0001;

n:=500;

writeln('_________________________________________');

writeln('Int pryamoug= ',mprug(a,b,n));

writeln('Int trapez= ',mtrpezi(a,b,n));

writeln('Int simpson= ',msimpson(a,b,e));

writeln('Int gauss= ',(b-a)/2*(f((a+b)/2-(b-a)/(2*sqrt(3)))+f((a+b)/2+(b-a)/(2*sqrt(3)))));

writeln('Int mymethod= ',mymethod(a,b,n));

end.

program diffur;

var

y,x,x1,n: real;

function f(x,y: real): real;

begin

f:=3*x+0.1*y*y;

end;

function eiler(x0,b,y0,n: real): real;

var

x,y: real;

begin

x:=x0;

y:=y0;

repeat

writeln('X=',x,' ','Y=',y);

x:=x+n;

y:=y+n*f(x,y);

until x>b;

end;

function kutt(x0,b,y0,n: real): real;

var

x,y,dy,k1,k2,k3,k4,x1,x2,y1,y2,y3: real;

begin

x:=x0;

y:=y0;

repeat

writeln('X=',x,' ','Y=',y);

k1:=n*f(x,y);

x1:=x+n/2;

y1:=y+k1/2;

k2:=n*f(x1,y1);

y2:=y+k2/2;

k3:=n*f(x1,y2);

y3:=y+k3;

x2:=x+n;

k4:=n*f(x2,y3);

dy:=(k1+2*k2+2*k3+k4)/6;

y:=y+dy;

x:=x+n;

until x>b;

end;

begin

{モ鶴 竟胙頏魵瑙・}

x:=0;

x1:=1;

{ヘ璞琿・鐱 ・粨}

y:=0.4;

{リ璢}

n:=0.1;

writeln('_________________________________________');

writeln('Method eilera: ');

eiler(x,x1,y,n);

writeln('Method Runge-kutta: ');

kutt(x,x1,y,n);

end.

program SLAU;

uses crt;

const

k=4;

e=0.00001;

var

matrix: array[1..k,1..Succ(k)] of real;

i,u,znak: integer;

r,opr,opredel: real;

smatrix: array[1..k] of real;

function a(x,y: integer): real;

const

p: array[1..k,1..k] of real=(

(5,0.8,-1.8,1),

(2,-5,1,-2),

(3,2,-8,2),

(2,-4,5,-12));

begin

a:=p[x,y];

end;

function b(i: integer): real;

const

p: array[1..k] of real=(0.4,-2,-2,6);

begin

b:=p[i];

end;

procedure iteracii;

var

s,y: real;

i,j: integer;

bool: boolean;

x: array[1..k] of real;

t: array[1..k] of real;

xn: array[1..k] of real;

begin

writeln('Method iteracii: ');

for i:=1 to k do

begin

x[i]:=b(i);

end;

repeat

for i:=1 to k do

begin

s:=0;

for j:=1 to k do

begin

s:=s+a(i,j)*x[j]

end;

xn[i]:=(b(i)-s)/a(i,i)+x[i];

end;

for i:=1 to k do

begin

t[i]:=abs(xn[i]-x[i]);

x[i]:=xn[i];

end;

bool:=true;

i:=1;

while (i<=k)and(bool=true) do

begin

if t[i]>=e then

bool:=false;

i:=i+1;

end

until bool=true;

for i:=1 to k do

begin

writeln('X',i,'=',xn[i]);

end;

end;

procedure zeydel;

var

s,y: real;

i,j: integer;

bool: boolean;

x: array[1..k] of real;

t: array[1..k] of real;

xn: array[1..k] of real;

begin

writeln('Method zeydela: ');

for i:=1 to k do

begin

x[i]:=b(i);

end;

repeat

for i:=1 to k do

begin

s:=0;

for j:=1 to k do

begin

s:=s+a(i,j)*x[j]

end;

xn[i]:=(b(i)-s)/a(i,i)+x[i];

t[i]:=abs(xn[i]-x[i]);

x[i]:=xn[i];

end;

bool:=true;

i:=1;

while (i<=k)and(bool=true) do

begin

if t[i]>=e then

bool:=false;

i:=i+1;

end

until bool=true;

for i:=1 to k do

begin

writeln('X',i,'=',x[i]);

end;

end;

{perestanovki liniy dlya gaussa}

procedure remax(t,q: integer);

var

i: integer;

tmp: real;

begin

znak:=znak*(-1);

for i:=1 to k+1 do

begin

tmp:=matrix[t,i];

matrix[t,i]:=matrix[q,i];

matrix[q,i]:=tmp;

end;

end;

{proverka kolonki na null}

procedure zeromtx(p: integer);

var

i,j,y: Integer;

begin

for i:=1 to k-1 do

begin

j:=i;

while (matrix[j,p]=0)and(matrix[j+1,p]<>0)and(j<>0) do

begin

y:=1;

while (matrix[y,p]=0)and(y<>p) do

begin

y:=y+1;

end;

if (y=p) then

remax(j,j+1);

j:=j-1;

end;

end;

end;

procedure drawmatrix(k: integer);

var

i,u: Integer;

begin

writeln('posle preobrazonania:');

for i:=1 to k do

begin

for u:=1 to k+1 do

begin

write(matrix[i,u]: 8: 3,' ');

end;

writeln;

end;

end;

procedure summer(u: integer);

var

i,j: Integer;

tmp,tmpz: real;

begin

tmpz:=matrix[u,u];

for j:=u+1 to k do

begin

tmp:=matrix[j,u];

opr:=opr*tmpz;

for i:=u to k+1 do

begin

matrix[j,i]:=(-1)*tmp*matrix[u,i]+tmpz*matrix[j,i]

end;

end;

end;

procedure fillin;

var

u,i: integer;

begin

for i:=1 to k+1 do

begin

for u:=1 to k do

begin

if i<>k+1 then

matrix[u,i]:=a(u,i)

else

matrix[u,i]:=b(u);

end;

end;

end;

{perestanovki kolonok}

procedure recolumn(t: integer);

var

u,i: integer;

begin

fillin;

for u:=1 to k do

begin

if t<>1 then

matrix[u,t-1]:=a(u,t-1);

matrix[u,t]:=b(u);

end;

end;

procedure triangle;

var

u: integer;

begin

opr:=1;

znak:=1;

for u:=1 to k-1 do

begin

zeromtx(u);

summer(u);

end;

end;

procedure determinant;

var

u,i: integer;

begin

r:=1;

for u:=1 to k do

begin

r:=r*matrix[u,u];

end;

end;

procedure kramer;

var

i: integer;

begin

fillin;

triangle;

writeln('Method Kramer: ');

determinant;

opredel:=r/opr*znak;

if (opredel<>0) then

begin

for i:=1 to k do

begin

recolumn(i);

triangle;

determinant;

if (r<>0) then

writeln('X',i,'= ',r/(opr*opredel)*znak)

else

writeln('X',i,'= ','UnKnoWn');

end;

end

else

writeln('Systema imeet mnojestvo resheniy');

end;

procedure solution;

var

u,i: integer;

begin

if (matrix[k,k]<>0) then

begin

smatrix[k]:=matrix[k,k+1]/matrix[k,k];

writeln('X',k,'= ',smatrix[k]);

for u:=k-1 downto 1 do

begin

i:=u;

while i<>k+1 do

begin

smatrix[u]:=smatrix[u]+smatrix[i]*matrix[u,i];

i:=i+1;

end;

smatrix[u]:=(matrix[u,k+1]-smatrix[u])/matrix[u,u];

writeln('X',u,'= ',smatrix[u]);

end;

end

else

writeln('Systema imeet mnojestvo resheniy');

end;

procedure gauss;

begin

fillin;

writeln('Method Gaussa:');

{Pivedenie k treugolnomu vidu}

triangle;

{korni uravnenia}

solution;

end;

begin

writeln('----------------SLAU------------------');

gauss;

kramer;

iteracii;

zeydel;

end.

program interpolation;

const

k=4;

count=4;

x: array[1..k] of real=(1,2,3,5);

y: array[1..k] of real=(9,26,58,194);

var

t,e: real;

matrix: array[1..count,1..succ(count)] of real;

smatrix: array[1..count] of real;

function xst(x: double; i: integer): double;

var

tmp: double;

begin

tmp:=exp(i*ln(abs(x)));

if ((i mod 2<>0)and(x<0)) then

tmp:=tmp*(-1);

xst:=tmp;

end;

procedure remax(t,q: integer);

var

i: integer;

tmp: real;

begin

for i:=1 to k+1 do

begin

tmp:=matrix[t,i];

matrix[t,i]:=matrix[q,i];

matrix[q,i]:=tmp;

end;

end;

procedure zeromtx(p: integer);

var

i,j,y: Integer;

begin

for i:=1 to count-1 do

begin

j:=i;

while (matrix[j,p]=0)and(matrix[j+1,p]<>0)and(j<>0) do

begin

y:=1;

while (matrix[y,p]=0)and(y<>p) do

begin

y:=y+1;

end;

if (y=p) then

remax(j,j+1);

j:=j-1;

end;

end;

end;

procedure summer(u: integer);

var

i,j: Integer;

tmp,tmpz: real;

begin

tmpz:=matrix[u,u];

for j:=u+1 to count do

begin

tmp:=matrix[j,u];

for i:=u to count+1 do

begin

matrix[j,i]:=(-1)*tmp*matrix[u,i]+tmpz*matrix[j,i]

end;

end;

end;

procedure triangle;

var

u: integer;

begin

for u:=1 to count-1 do

begin

zeromtx(u);

summer(u);

end;

end;

procedure solution;

var

u,i: integer;

begin

if (matrix[count,count]<>0) then

begin

smatrix[count]:=matrix[count,count+1]/matrix[count,count];

for u:=count-1 downto 1 do

begin

i:=u;

while i<>count+1 do

begin

smatrix[u]:=smatrix[u]+smatrix[i]*matrix[u,i];

i:=i+1;

end;

smatrix[u]:=(matrix[u,count+1]-smatrix[u])/matrix[u,u];

end;

end

else

writeln('Systema imeet mnojestvo resheniy');

end;

procedure gauss;

begin

triangle;

solution;

end;

procedure minquad(v: real);

var

s: array[1..4] of real;

p: array[1..3] of real;

i,j: integer;

a,b,c,d,w1,w2,w3,a1,a2,a3,a4: real;

begin

for i:=1 to 4 do

begin

s[i]:=0;

for j:=1 to k do

begin

s[i]:=s[i]+xst(x[j],i);

end;

end;

for i:=1 to 3 do

begin

p[i]:=0;

for j:=1 to k do

begin

p[i]:=p[i]+xst(x[j],i-1)*y[j]

end;

end;

a1:=s[3]*s[2]-s[4]*s[1];

a2:=s[3]*s[2]-s[1]*s[4];

a3:=s[3]*s[3]-s[4]*s[2];

a4:=s[2]*s[2]-k*s[4];

d:=(a3)*(a4)-(a1)*(a2);

c:=s[2]*p[3]-s[4]*p[1];

b:=s[3]*p[3]-s[4]*p[2];

w3:=((a3)*c-(a2)*b)/d;

w2:=((a4)*b-(a1)*c)/d;

w1:=(p[3]-s[3]*w2-s[2]*w3)/s[4];

writeln('X=',v,' Y=',v*v*w1+v*w2+w3);

end;

procedure square(v: real);

var

a: array[1..3,1..3] of real;

b: array[1..3] of real;

i,j,kk: integer;

aa,d,c,p,r,t,m1,m2,m3,m4: real;

tmp: string;

bool: boolean;

begin

i:=1;

bool:=true;

while (i<k+1)and(bool=true) do

begin

if v<x[i] then

begin

kk:=i-2;

bool:=false;

end;

i:=i+1;

end;

if bool=false then

begin

for j:=1 to 3 do

begin

a[j,1]:=sqr(x[kk]);

a[j,2]:=x[kk];

a[j,3]:=1;

b[j]:=y[kk];

kk:=kk+1;

end;

m1:=a[2,1]*a[1,3]-a[1,1]*a[2,3];

m2:=a[1,2]*a[3,1]-a[3,2]*a[1,1];

m3:=a[2,1]*a[1,2]-a[1,1]*a[2,2];

m4:=a[1,3]*a[3,1]-a[3,3]*a[1,1];

p:=m3*m4-m1*m2;

r:=a[3,1]*b[1]-a[1,1]*b[3];

t:=a[2,1]*b[1]-a[1,1]*b[2];

c:=(r*m3-t*m2)/p;

d:=(t*m4-r*m1)/p;

aa:=(b[1]-a[1,2]*d-a[1,3]*c)/a[1,1];

str(aa*v*v+d*v+c,tmp);

end

else

tmp:='Chislo ne prin. posled..';

writeln('X=',v,' Y=',tmp);

end;

procedure lagrange(v: real);

var

i,j: integer;

yn,p1,p2: real;

begin

yn:=0;

for i:=1 to k do

begin

p1:=1;

p2:=1;

for j:=1 to k do

begin

if j<>i then

begin

p1:=(v-x[j])*p1;

p2:=(x[i]-x[j])*p2;

end;

end;

yn:=yn+y[i]*p1/p2;

end;

writeln('X=',v,' Y=',yn);

end;

procedure interline(v: real);

var

j: integer;

begin

for j:=1 to k-1 do

begin

if (v>x[j])and(v<x[j+1]) then

break;

end;

writeln('X=',v,' Y=',y[j]+(y[j+1]-y[j])*(v-x[j])/(x[j+1]-x[j]));

end;

function sumstep(j,i,p: integer): real;

var

t: integer;

tmp: double;

begin

tmp:=0;

for t:=1 to i do

begin

if p=0 then

tmp:=tmp+xst(x[t],j)

else

tmp:=tmp+y[t]*xst(x[t],p-1);

end;

sumstep:=tmp;

end;

procedure aproxym(v: real);

var

i,j,stp: integer;

tmp: double;

begin

for i:=1 to count do

begin

stp:=i-1;

for j:=succ(count)downto 1 do

begin

if j=count+1 then

matrix[i,j]:=sumstep(0,k,i)

else

begin

if (j=count)and(i=1) then

matrix[i,j]:=k+1

else

matrix[i,j]:=sumstep(stp,k,0);

stp:=stp+1;

end;

end;

end;

gauss;

tmp:=0;

for i:=1 to count do

begin

tmp:=tmp+smatrix[i]*xst(v,count-i);

smatrix[i]:=0;

end;

writeln('X=',v,' Y=',tmp);

end;

begin

writeln('----------------------------');

writeln('kvadratichnaya interp. naimen. kvadratami:');

minquad(2.921);

minquad(4.121);

writeln('kvadratichnaya interp.:');

square(2.921);

square(4.121);

writeln('lagrange interp.:');

lagrange(2.921);

lagrange(4.121);

writeln('Lineynaya interp.:');

interline(2.921);

interline(4.121);

writeln('Aproxymazia polynom:');

aproxym(2.921);

aproxym(4.121);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]