КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |