Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Вычислит.мат_лаб.р

..pdf
Скачиваний:
23
Добавлен:
17.05.2015
Размер:
1.32 Mб
Скачать

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

1

 

 

2

 

 

 

.38860Е + 01

.11507Е + 02

-.19742Е + 01

.61716Е +01

 

 

 

 

 

 

 

 

.12738Е +02

26061Е+ 01

.63995Е + 02

.-27195Е +02

24

16202Е + 01

.35161Е + 00

.86341Е+01

-.34589Е+01

15111Е + 01

.30380Е + 00

.74599Е+01

-.32261Е + 01

 

 

 

 

.81142Е + 00

-17609Е + 00

.43244 + 01

-17323Е + 01

 

 

.30846Е + 02

-.40806Е + 01

-.36208Е + 00

-.41187Е + 01

25

-.36344Е + 02

.49263Е + 01

.43712Е + 00

.48529Е + 01

17157Е + 02

-.20743Е + 01

-18406Е + 00

-.22910Е + 01

 

 

 

 

.53507Е + 02

-.72527Е + 01

-.64354Е + 00

-.71445Е + 01

 

 

.27346Е + 01

-.11110Е + 01

.50222Е + 01

.32234Е + 01

 

26

.91361Е + 01

-.35849Е + 01

.16206Е + 02

.10769Е + 02

 

.12961Е + 02

-.51725Е + 01

.23383Е + 02

.15278Е + 02

 

 

 

 

-.28402Е + 02

.11145Е+02

-.50380Е + 02

-.33479Е + 02

 

 

.63868Е + 01

-.67524Е+02

-.24412Е+02

-.20908Е+02

 

27

.18697Е + 01

-.18932Е + 02

-.68445Е+01

-.61208Е + 01

 

-.17156Е + 01

.18209Е+02

.65832Е + 01

.56162Е+01

 

 

 

 

.75164Е + 00

-.76109Е+01

-.27516Е + 01

-.24606Е+01

 

 

.43510Е + 02

.59136Е+01

-.11467Е + 02

-.12245Е+02

 

28

-.38692Е + 02

-.50907Е + 01

.98719Е4-01

.10889Е + 02

 

-.48615Е+02

-.65295Е + 01

.12662Е + 02

.13682Е+02

 

 

 

 

-.17455Е + 02

-.22966Е + 01

.44536Е + 01

.49125Е+01

 

 

10921Е + 01

-.12118Е + 01

-.83855Е+00

.96881Е+00

 

29

.74301Е + 01

-.72230Е + 01

-.49981Е+01

.65916Е + 01

 

.26781Е+01

-.07865Е + 01

-.49087Е+02

.76564Е + 01

 

 

 

 

.42614Е+02

-.41427Е+02

-.28666Е+02

.37805Е +02

 

 

.17965Е+01

.49866Е + 02

-.55218Е+02

-.11507Е + 02

 

30

.78083Е + 00

.22034Е+02

-.24399Е + 02

-.50015Е + 01

 

.26239Е + 00

.60831Е + 01

-.67359Е + 01

-16807Е + 01

 

 

 

 

-.82565Е + 00

-.23299Е + 02

.25799Е + 02

.52886Е + 01

51

Лабораторная работа № 7 Приближение функций

Интерполяционный полином Лагранжа

Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x- массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции.

Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата.

Схема алгоритма приведена на рисунке 25.

Задание. Аппроксимировать табличную функцию с помощью интерполяционного полинома Лагранжа.

xi

yi

xi

yi

1

2,05

6

1,88

2

1,94

7

1,71

3

1,92

8

1,60

4

1,87

9

1,56

5

1,77

10

1,40

Текст программы:

function Lagran(n:integer;x,y:TVector;q:real):real; var i,j:integer; l,s:real;

begin L:=0;

for i:=1 to n do begin s:=1;

for j:=1 to N do if j<>i then

s:=s*(q-x[j])/(x[i]-x[j]); L:=L+y[i]*s;

end;

Lagran:=l end

Вычисления по программе привели к следующим результатам:

X=1 Y=2,05

X=1,5 Y=2,38

X=2 Y=1,94

X=2,5 Y=1,83

52

X=3 Y=1,92

X=3,5 Y=1,94

X=4 Y=1,87

X=4,5 Y=1,78

X=5 Y=1,77

X=5,5 Y=1,83

X=6 Y=1,88

X=6,5 Y=1,83

X=7 Y=1,71

X=7,5 Y=1,59

X=8 Y=1,6

X=8,5 Y=1,67

X=9 Y=1,56

X=9,5 Y=1,09

X=10 Y=1,4

Function

Lagran(n:integer;x,y,TV

ector;r,q:real)

L=0

I

I>n

s=1

J

J>n

+

I<>J

s=s*(q-x[j]) / (x[i]-x[j])

J=J+1

J

L=L+y[i]*s

I=I+1

I

Lagran=1

Возврат

Рисунок 25 - Схема алгоритма приближения функций формулой Лагранжа

53

Варианты заданий для решения задачи приближения функций приведены в таблице 6.

Аппроксимация функций с помощью кубического сплайна

Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x- массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции.

Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата.

Схема алгоритма приведена на рисунке 26.

Задание. Аппроксимировать табличную функцию с помощью кубического сплайна.

xi

yi

xi

yi

1

2,05

6

1,88

2

1,94

7

1,71

3

1,92

8

1,60

4

1,87

9

1,56

5

1,77

10

1,40

Текст программы:

Procedure Spline3(N:integer;X,Y:mas;S0,SN:real;Var A,B,C,D:mas);

Var F

: Mas;

H2,H3,p

: real;

i,j

: integer;

Begin

 

 

 

 

 

 

H2:=X[2]-X[1];

 

 

 

 

 

H3:=X[3]-X[2];

 

 

 

 

 

A[1]:=(2*(H2+H3))/H3;

 

 

 

f[1]:=(6/h3)*(((y[3]-y[2])/h3)-((y[2]-y[1])/h2))-(h2*s0)/h3;

For i:=4 to n-1 do

 

 

 

 

 

begin

 

 

 

 

 

 

h2:=x[i-1]-x[i-2];

h3:=x[i]-x[i-1];

 

a[i-2]:=(2/h3)*(h2+h3);

 

b[i-2]:=h2/h3;

 

f[i-2]:=(6/h3)*(((y[i]-y[i-1])/h3-((y[i-1]-y[i-2])/h2)));

 

end;

 

 

 

 

 

h2:=x[n-1]-x[n-2];

h3:=x[n]-x[n-1];

 

p:=2*(h2+h3);

 

b[1]:=h2/p;

 

 

f[n-2]:=(6/p)*(((y[n]-y[n-1])/h3)-((y[n-1]-y[n-2])/h2))-(h3*sn)/p;

d[1]:=1/a[1];

c[1]:=f[1];

 

 

For i:=2 to n-3 do

 

 

 

 

begin

 

 

 

 

 

d[i]:=1/(a[i]-b[i]*d[i-1]);

 

c[i]:=f[i]-b[i]*d[i-1]*c[i-1];

 

 

 

 

 

54

 

end;

 

 

 

d[n-2]:=(f[n-2]-b[1]*d[n-3]*c[n-3])/(1-b[1]*d[n-3]);

 

For i:=n-3 downto 1 do

 

d[i]:=d[i]*(c[i]-d[i+1]);

 

c[1]:=s0;

c[n]:=sn;

 

For i:=2 to n-1 do

c[i]:=d[i-1];

 

For i:=1 to n do

 

 

begin

 

 

 

a[i]:=0;

b[i]:=0;

d[i]:=0; end;

 

For i:=2 to n do

 

 

begin

 

 

 

h2:=x[i]-x[i-1];

d[i]:=(c[i]-c[i-1])/h2;

 

b[i]:=h2*c[i]/2-(Sqr(h2))*d[i]/6+(y[i]-y[i-1])/h2;

a[i]:=y[i];

end; end;

 

 

 

Вычисления по программе привели к следующим результатам:

X=1 Y=2,21

X=1,5 Y=2,06

X=2 Y=1,94

X=2,5 Y=2,00

X=3 Y=1,92

X=3,5 Y=1,99

X=4 Y=1,87

X=4,5 Y=1,88

X=5 Y=1,77

X=5,5 Y=1,91

X=6 Y=1,88

X=6,5 Y=1,90

X=7 Y=1,71

X=7,5 Y=1,71

X=8 Y=1,6

X=8,5 Y=1,66

X=9 Y=1,56

X=9,5 Y=1,57

X=10 Y=1,4

55

Procedure

 

 

 

Spline3(N:integer;X,Y:mas

 

 

 

;S0,SN:real;Var

 

A

A,B,C,D:mas)

 

 

 

 

 

 

 

 

H2=x[2]-x[1]

 

c[1]=s0

h3=h[3]-h[2]

 

c[n]=sn

a[1]=(2*(h2+h3))/h3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I

f[1]=(6/h3)*(((y[3]-y[2]/h3)-

 

I>n-1

((y[2]-y[1])/h2))-(h2*s0)

 

 

 

 

 

 

/ h3)

 

 

 

 

c[i]=d[i-1]

 

 

 

 

 

 

I

 

 

 

I>n-1

 

 

 

 

I=I+1

 

 

 

 

 

 

 

 

 

I

H2=x[i-1]-x[i-2]

 

 

 

h3=h[i]-h[i-1]

 

 

 

 

I

a[i-2]=(2/h3)*(h2+h3)

 

b[i-2]=h2/h3

 

I>n

 

 

 

 

 

 

 

 

 

 

f[i-2]=(6/h3)*(((y[i]-y[i-1]/h3

 

a[i]=0

 

b[i]=0

)-((y[i-1]-y[i-2])/h2)))

 

 

d[i]=0

 

 

 

 

 

 

 

 

 

 

 

 

 

I=I+1

 

I=I+1

I

 

I

 

 

 

 

 

 

 

 

 

 

H2=x[n-1]-x[n-2]

 

I

h3=h[n]-h[n-1]

 

I>n

p=2*(h2+h3)

 

 

 

 

 

 

b[i]=h2/p

 

 

 

 

H2=x[i]-x[i-1]

 

 

 

 

 

 

d[i]=(c[i]-c[i-1])/h2

f[n-2]=(6/p)*(((y[n]-y[n-1]/h

 

 

 

3)-((y[n-1]-y[n-2])/h2))-(h3*

 

 

 

sn)/p)

 

b[i]=h2*c[i]/2-(sqr(h2))*d[i]/

 

 

 

6+(y[i]-y[i-1])/h2

 

 

 

a[i]=y[i]

d[1]=1/a[1

 

 

 

 

 

 

c[1]]=f[1]

 

I=I+1

 

 

 

 

 

 

I

 

 

 

 

 

 

 

I

 

 

 

 

 

 

I>n-3

 

Возврат

 

 

 

 

 

 

 

 

d[i]=1/(a[i]-b[i]*d[i-1])

 

 

 

c[i]]=f[i]-b[i]*d[i-1]*c[i-1]

 

 

 

 

 

 

 

 

 

 

 

 

 

I=I+1

 

 

 

I

 

 

 

 

 

 

 

 

 

 

 

 

 

d[n-2]=(f[n-2]-b[1]*d[n-3]*c

 

 

 

[n-3])/(1-b[1]*d[n-3])

 

 

 

 

 

 

 

 

 

 

 

 

 

I

 

 

 

I<1

 

 

 

 

 

 

 

 

 

 

 

 

 

d[i]=d[i]*(c[i]-d[i+1])

 

 

 

 

 

 

 

 

 

 

 

 

 

I=I-1

 

 

 

I

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

Рисунок 26 - Схема алгоритма приближения функций с помощью сплайнов

56

Варианты заданий для решения задачи приближения функций приведены в таблице 6.

Приближение формулами Ньютона

Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x- массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции.

Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата.

Схема алгоритма приведена на рисунке 27.

Задание. Аппроксимировать табличную функцию с помощью формул Ньютона.

xi

 

yi

xi

yi

1

 

2,0

6

1,8

 

5

 

 

8

2

 

1,9

7

1,7

 

4

 

 

1

3

 

1,9

8

1,6

 

2

 

 

0

4

 

1,8

9

1,5

 

7

 

 

6

5

 

1,7

10

1,4

 

7

 

 

0

Текст программы:

function PribNew(n:integer;a,b:TVector;x:Real):real; function GetRazdRazn(k,l:integer;m:TMatr):real;

begin GetRazdRazn:=m[k,l-k+1]; end;

var i,j:integer; s,p:real; M:tmatr; begin

TabRazdRazn(n,a,b,M);

S:=b[1];

for i:=1 to N-1 do begin

P:=1;

for j:=1 to i do P:=P*(x-a[j]);

s:=s+P*GetRazdRazn(1,i+1,m);

end;

57

PribNew:=s;

end;

Вычисления по программе привели к следующим результатам:

X=1 Y=2,05

X=1,5 Y=2,38

X=2 Y=1,94

X=2,5 Y=1,83

X=3 Y=1,92

X=3,5 Y=1,94

X=4 Y=1,87

X=4,5 Y=1,78

X=5 Y=1,77

X=5,5 Y=1,83

X=6 Y=1,88

X=6,5 Y=1,83

X=7 Y=1,71

X=7,5 Y=1,59

X=8 Y=1,6

X=8,5 Y=1,67

X=9 Y=1,56

X=9,5 Y=1,09

X=10 Y=1,4

58

PribNew (n:integer:a,

b:TVector:x:real)

GetRazdRazn

(k,l,t)

TabtRazdRazn

(k,l,t)

S=b[1]

I

I>N-1

P=1

J

J>I

P=P*(x-a[j])

J=J+1

J

s=s+P* GETRazdRazn (1,i+1,m)

I=I+1

I

PribNew =s

Возв рат

Рисунок 27 - Схема алгоритма приближения функций формулами Ньютона

Варианты заданий для решения задачи приближения функций приведены в таблице 6.

Аппроксимация функций методом наименьших квадратов.

Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x- массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции.

Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата.

Схема алгоритма приведена на рисунке 28.

59

Задание. Аппроксимировать табличную функцию многочленом второй степени методом наименьших квадратов.

xi

 

yi

xi

yi

1

 

2,0

6

1,8

 

5

 

 

8

2

 

1,9

7

1,7

 

4

 

 

1

3

 

1,9

8

1,6

 

2

 

 

0

4

 

1,8

9

1,5

 

7

 

 

6

5

 

1,7

10

1,4

 

7

 

 

0

Текст программы:

function Apr_Kv(n:integer;x,y:TVector;q:real):real; var i,j:integer;

a:TMatr;

b,c:TVector;

s:real; begin

a[1,1]:=N;

s:=0;

for i:=1 to N do s:=s+x[i];

a[1,2]:=s;

a[2,1]:=s;

s:=0;

for i:=1 to N do s:=s+x[i]*x[i];

a[1,3]:=s;

a[2,2]:=s;

a[3,1]:=s;

s:=0;

for i:=1 to N do s:=s+x[i]*x[i]*x[i];

a[2,3]:=s;

a[3,2]:=s;

s:=0;

for i:=1 to N do s:=s+x[i]*x[i]*x[i]*X[i];

a[3,3]:=s;

s:=0;

60