Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример 2




END.

Begin

Begin

Begin

Begin

BEGIN

Begin

Begin

Begin

BEGIN

Var

Begin

BEGIN

Var

Begin

BEGIN

Var

Var

Type

Const

Пример 1.

{$N+,E+,F+}

PROGRAM MetNKv;

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

{Полиномом заданной степени}

Uses CRT;

N=21; {Количество заданных точек кривой намагничивания}

{NN=4;} {Степень полинома}

NameInt = 'mnk.inp'; {Имя файла с данными}

NameOut = 'mnk4-pu.out';} {Имя выходного файла

RealType = Extended; {базовый вещественный тип}

IntType = Integer; {базовый целый тип}

Vec = Array [1..N] of RealType;

TypeS = Array [1..28] of RealType;

TypeA = Array [1..29,1..29] of RealType;

TypeB = Array [1..29] of RealType;

TypeBool = Boolean;

{Глобальные переменные}

S: TypeS;

h,SS,OS,AS: RealType;

Y,X: Vec;

B,P: TypeB;

A: TypeA;

Flag: TypeBool;

F1, F2: Text;

i, j, k, NN: IntType;

Procedure KoeffA(NN: IntType; Var S: TypeS);

{Вычисление коэффициентов матрицы A}

i, j: IntType;

For j:=1 to 2*NN do

S[j]:=0;

For i:=1 to N do

S[j]:= S[j] + exp(j*ln(X[i]));

end;

END; {KoeffA}

Procedure KoeffB(NN,N: IntType; Y,X: Vec;Var B: TypeB);

{Вычисление правой части системы уравнений B}

i, j: IntType;

For j:=1 to NN+1 do

B[j]:=0;

For i:=1 to N do

B[j]:= B[j] + Y[i]*exp((j-1)*ln(X[i]));

end;

END;{KoeffB}

Procedure GaussKlass(N: IntType; A: TypeA; B: TypeB; Var X: TypeB);

{Решение системы уравнений классическим методом Гаусса}

{Прямой ход исключения переменных}

i, j, k: IntType;

For i:= 1 to N-1 do

For j:= i+1 to N do

A[j,i]:= -A[j,i]/A[i,i];

For k:= i+1 to N do

A[j,k]:= A[j,k] + A[j,i]*A[i,k];

B[j]:= B[j] + A[j,i]*B[i];

end;

end;

{Обратный ход: последовательное нахождение корней}

X[N]:= B[N]/A[N,N];

For i:= N downto 1 do

h:= B[i];

For j:= i+1 to N do h:= h - A[i,j]*X[j];

X[i]:= h/A[i,i];

end;

END; {GaussKlass}

{Головная программа}

ClrScr;

WriteLn;

Write('Введите степень полинома, NN = ');

ReadLn(NN);

Assign(F1,NameInt);

Reset(F1);

For i:=1 to N do Read(F1,X[i]);

For i:=1 to N do Read(F1,Y[i]);

Assign(F2,NameOut);

Rewrite(F2);

WriteLn(F2);

{Вычисление коэффициентов матрицы A}

KoeffA(NN,S);

WriteLn(F2,'МАТРИЦА СИСТЕМЫ УРАВНЕНИЙ A:');

{Заполнение коэффициентов матрицы}

For i:=1 to NN+1 do

For j:=1 to NN+1 do A[i,j]:=S[i+(j-2)];

A[1,1]:= N;

end;

For i:=1 to NN+1 do

For j:=1 to NN+1 do Write(F2,A[i,j]);

WriteLn(F2);

end;

WriteLn(F2);

WriteLn(F2,'ВЕКТОР-СТОЛБЕЦ ПРАВОЙ ЧАСТИ B:');

{Вычисление правой части системы уравнений B}

KoeffB(NN,N,Y,X,B);

For j:=1 to NN+1 do WriteLn(F2, B[j]);

WriteLn(F2);

GaussKlass(NN+1,A,B,P);

WriteLn(F2);

WriteLn(F2,'КОЭФФИЦИЕНТЫ ПОЛИНОМА ',NN:2,' СТЕПЕНИ:');

j:=0;

For i:=1 to NN+1 do

WriteLn(F2,'P',j,'=',P[i],' ');

j:= j+1;

end;

WriteLn(F2);

WriteLn(F2);

WriteLn(F2,'ТАБЛИЦА ЗНАЧЕНИЙ');

WriteLn(F2,' N ',' ЗНАЧ.АРГ.',' ИСТ.ЗН.ФУНК.', ' АПП.ЗН.ФУНК.',' АБС.ПОГР.', ' ОТН. ПОГР.');

WriteLn(F2,' ',' X ',' Y ', ' Y* ',' (Y-Y*) ', ' (Z) ');

SS:=0;

For i:=1 to N do

{Значения аппроксимированной функции}

h:=0;

For j:=1 to NN+1 do

h:= h + P[j]*exp((j-1)*ln(X[i]));

{Абсолютная погрешность}

AS:= Abs(Y[i] - h);

{Относительная погрешность}

OS:= Abs(AS/Y[i])*100;

SS:= SS + AS*AS;

WriteLn(F2,i:3,' ',X[i]:8:2,' ',Y[i]:9:3,' ',h:11:4,' ',AS:9:5,' ',OS:9:5);

end;

{Среднеквадратическое отклонение}

SS:=Sqrt(SS/(N-1));

WriteLn(F2);

WriteLn(F2,'СРЕДНЕКВАДРАТИЧЕСКОЕ ОТКЛОНЕНИЕ:',SS);

Close(F1);

Close(F2);

ClrScr;{Очищает экран, модуль Crt}


const nmax=25;

Var x,y:array[1..nmax] of real;

sx,sy,sxy,sx2,a,b:real;

i,n:integer;




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


Дата добавления: 2014-01-07; Просмотров: 280; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.