RSS    

å xim+1

å xi2m

am+1

åyixim

3.1 Блок-схема алгоритма. Описание исходных данных и результатов.


Блок-схема: данные: Ввод
n, m, X, Y
  

  

i=1

 


i=n

 
  


Исходные данные, а именно:

   m-число узлов аппроксимации.

   n - степень аппроксимирующего многочлена.

   X - вектор узлов аппроксимации.

   Y - вектор значений аппроксимируемой функции. 

   Все эти значения мы заносим в файл jan.dat, который работает только на чтение и файловой переменной является f1.

   Результаты:

   Все результаты выводятся в файл jan.res, работающий на запись и имеющий файловую переменную f2.

   Первоначально в этот файл выводятся исходные данные, которые берутся из файла jan.dat, но при этом уже с описанием, то есть не просто числа, а скоментарием, что они означают.

   Затем выводятся результаты вычисления, проведенной машиной, при этом все результаты отформатированы:

   Выводится матрица С системы линейных уравнений для аппроксимации вместе с вектором правых частей. Затем выводится решение этой системы уравнений, что является вектором коэффициентов аппроксимирующего многочлена по возрастанию степени. И в конце выводится вектор погрешности  аппроксимации Z.

4.1 Листинг программы, исходных данных и результатов.

program approx;

uses crt,gausstpu;

const nm=20;

type  vect1=array[1..nm] of real;

var c:matr;

       a,b:vect;

       x,y,z:vect1;

       n,i,j,m:integer;

       f1,f2:text;

procedure Create_BC(n,m:integer; var x,y:vect1; var c:matr; var b:vect);

var i,j:integer;

      r:vect;

begin

for i:=1 to n do

r[i]:=1;

for j:=1 to m+1 do begin

c[1,j]:=0;

b[j]:=0;

for i:=1 to n do begin

c[1,j]:=c[1,j]+r[i];

b[j]:=b[j]+r[i]*y[i];

end;

for i:=1 to n do

r[i]:=r[i]*x[i];

end;

for i:=1 to m do begin

for j:=1 to m do

c[i+1,j]:=c[1,j+1];

c[i+1,m+1]:=0;

for j:=1 to n do

c[i+1,m+1]:=c[i+1,m+1]+r[j];

for j:=1 to n do

r[j]:=r[j]*x[j];

end;end;

begin

assign(f1,'jan.dat');reset(f1);

assign(f2,'jan.res');rewrite(f2);

readln(f1,n);writeln(f2,'Число узлов аппроксимации n=',n:3);

readln(f1,m);writeln(f2,'Степень многочлена m=',m:2);

writeln(f2,'Вектор узлов аппроксимации x[i]');

for i:=1 to n do begin

read(f1,x[i]);

write(f2,x[i]:4:2,' ');

end;

writeln(f2);

writeln(f2,'Вектор значений аппроксимируемой функции y[i]');

for i:=1 to n do begin

read(f1,y[i]);

write(f2,y[i]:4:2,' ');

end;

Create_BC(n,m,x,y,c,b);

writeln(f2);

writeln(f2,'Матрица системы линейных уравнений для аппроксимации и вектор правых частей);

for i:=1 to m+1 do begin

for j:=1 to m+1 do

write(f2,c[i,j]:8:1);writeln(f2,b[i]:8:1);end;

gauss(m+1,c,b,a);

for i:=1 to n do begin

z[i]:=0;

for j:=m+1 downto 1 do

z[i]:=z[i]*x[i]+a[j];

z[i]:=z[i]-y[i];end;

writeln(f2);

writeln(f2,'Вектор коэфициентов аппроксимирующего многочлена по возрастанию);

writeln(f2,'степени (m+1 элементов)');

for i:=1 to m+1 do

writeln(f2,'a[',i:1,']=',a[i]:6:2);

writeln(f2,'Вектор погрешности аппроксимации в узлах X);

for i:=1 to n do

writeln(f2,'z[',i:1,']=',z[i]:5:3);

close(f1);close(f2);

end.

          

Исходный файл jan.dat:

10

2

1 6 0 3 8 2 12 9 2 5

9 4 13 7 3 9 3 1 4 2

Файл результатов jan.res:

Число узлов аппроксимации n=10

Степень многочлена m=2

Вектор узлов аппроксимации x[i]

1.00 6.00 0.00 3.00 8.00 2.00 12.00 9.00 2.00 5.00

Вектор значений аппроксимируемой функции y[i]

9.00 4.00 13.00 7.00 3.00 9.00 3.00 1.00 4.00 2.00

Матрица системы линейных уравнений для аппроксимации и вектор правых частей

    10.0    48.0      368.0     55.0

    48.0    368.0    3354.0    159.0

    368.0  3354.0  33428.0  1023.0

Вектор коэфициентов аппроксимирующего многочлена по возрастанию степени (m+1 элементов)

a[1]=  11.66

a[2]= -2.31

a[3]=  0.13

Вектор погрешности аппроксимации в узлах X

z[1]=0.479

z[2]=-1.381

z[3]=-1.343

z[4]=-1.070

z[5]=-1.247

z[6]=-1.430

z[7]=-0.244

z[8]=0.723

z[9]=3.570

z[10]=1.454

5.1 Список переменных основной программы.

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

const nm=20;

type  vect1=array[1..nm] of real;

 

Следующие переменные так же используются в программе, которые описываются в  разделе var:

Переменная

Тип переменной

Описание переменной

С matr Матрица системы линейных уравнений для аппроксимации
А vect Вектор коэфициентов аппроксимирующего многочлена по возрастанию степени (m+1 элементов)
Х vect1 Вектор узлов аппроксимации
B vect Вектор правых частей
Y vect1 Вектор значений аппроксимирующей функции
Z vect Вектор погрешности аппроксимации в узлах Х
n integer Число узлов аппроксимации
m integer Степень многочлена
i integer Необходима для нумерации элементов массивов.
j integer Необходима для нумерации элементов массивов.
f1 text Файловая переменная для файла исходных значений
f2 text Файловая переменная  резуртирующего файла

   

6.1 Заголовки процедур и функций. Список их переменных.

   В своей программе я использовал следующие модули, которые описываются в операторе uses и процедуры:

   Crt - стандартный модуль подключения экрана и клавиатуры для работы с программой.

   Gauss - процедура решения системы линейных уравнений методом Гаусса. Она берется из модуля Gausstpu, где интерфейсная часть имеет вид:

Interface

Const nmax=20

Type

Поэтому при объявлении матрицы С ссылаться надо на matr, а векторов A и B на vect.

   Create_BC - процедура расчета матрицы С (С - матрица системы линейных уравнений для аппроксимации). Заголовок этой процедуры выглядит так:

procedure Create_BC(n,m:integer; var x,y:vect1; var c:matr; var b:vect);

     var i,j:integer;

          r:vect;

   А вот такие переменные используются только в этой процедуре, остальные засылаются из основной программы:

Переменная

Тип переменной

Описание переменной

i integer Используются в циклах для перебора численных значений
j integer Используются в циклах для перебора численных значений
R vect Рабочий вектор

7.1 Ручной счет.

Страницы: 1, 2, 3, 4, 5, 6


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.