Автор работы: Пользователь скрыл имя, 20 Марта 2012 в 18:41, курсовая работа
Практическое освоение типовых вычислительных методов прикладной математики;
совершенствование навыков разработки алгоритмов и построения программ на языке программирования высокого уровня Паскаль;
освоение принципов модульного программирования;
приобретение основных навыков для использования вычислительных методов прикладной математики и техники программирования в процессе изучения всех последующих дисциплин при выполнении курсовых и дипломных проектов.
1. ОГЛАВЛЕНИЕ_________________________________________________2
2. ЦЕЛЬ РАБОТЫ_________________________________________________3
3. МЕТОДИЧЕСКИЕ УКАЗАНИЯ__________________________________3
3.1. Методические рекомендации по аппроксимации методом наименьших квадратов_____________________________________3
3.1.1. Постановка задачи_______________________________________3
3.2. Методика решения системы нормальных уравнений___________6
4. РУЧНОЙ СЧЕТ_________________________________________________8
4.1. Исходные данные__________________________________________8
4.2. Критерий аппроксимации___________________________________8
4.3. Система нормальных уравнений____________________________10
4.4. Решение системы методом обратной матрицы _______________10
4.5. Результаты расчета_______________________________________11
4.6. Аппроксимирующая функция______________________________11
4.7. Оценка погрешности аппроксимации_______________________11
4.8. График__________________________________________________12
5. СХЕМЫ АЛГОРИТМОВ_______________________________________13
5.1. Схема алгоритма основного блока программы_______________13
5.2. Схема алгоритма процедуры решения системы уравнений____15
6. ТЕКСТ ПРОГРАММЫ_________________________________________17
7. РЕЗУЛЬТАТЫ КОНТРОЛЬНОГО РАСЧЕТА_____________________23
8. ВЫВОДЫ_____________________________________________________24
max при x = x2 = 0.78
Рис. 4.8.1. График аппроксимирующей функции. Исходные точки.
Построение графика
Рис. 5.1.1. Начало блок – схемы алгоритма.
Рис. 5.1.2. Конец блок – схемы алгоритма.
Рис. 5.2.1. Начало блок – схемы алгоритма процедуры.
Рис. 5.2.2. Конец блок – схемы алгоритма процедуры.
{$R+}
Program kursovaja (input, output);
Uses Crt;
Type
Mas1=array [1..5] of real;
Mas2=array [1..3,1..5] of real;
Mas3=array [1..3,1..3] of real;
Mas4=array [1..3] of real;
Var
x,y,F0,DELTA:Mas1;
f:Mas2;
A:Mas3;
B,C:Mas4;
i,j,k,l,m,n,imax:byte;
J0,max:real;
Procedure MATRIX (Z:Mas3;B:Mas4;n:byte;var X:Mas4);
Var i,j,l,k,m,NUM:byte;BIG,TEMP,Q,
begin
for i:=1 to n do
for j:=1 to n do
Z1[i,j]:=Z[i,j];
for k:=1 to n do
for l:=1 to n do
if k=l then
E[k,l]:=1
else E[k,l]:=0;
for i:=1 to n-1 do
begin
BIG:=0;
NUM:=0;
for l:=i to n do
if abs(Z1[l,i])>abs(BIG) then
begin
BIG:=Z1[l,i];
NUM:=l;
end;
if NUM=0 then
begin
writeln ('Матрица вырожденная!!');
readkey;
halt;
end;
if NUM<>i then
begin
for j:=i to n do
begin
TEMP:=Z1[i,j];
Z1[i,j]:=Z1[NUM,j];
Z1[NUM,j]:=TEMP;
TEMP:=Z[i,j];
Z[i,j]:=Z[NUM,j];
Z[NUM,j]:=TEMP;
end;
TEMP:=B[i];
B[i]:=B[NUM];
B[NUM]:=TEMP;
end;
for k:=i+1 to n do
begin
Q:=Z1[k,i]/Z1[i,i];
Z1[k,i]:=0;
for j:=i+1 to n do
Z1[k,j]:=Z1[k,j]-Q*Z1[i,j];
for m:=1 to n do
E[k,m]:=E[k,m]-Q*E[i,m];
end;
end;
for m:=1 to n do
R[n,m]:=E[n,m]/Z1[n,n];
for i:=n-1 downto 1 do
for m:=1 to n do
begin
SUM:=E[i,m];
for j:=i+1 to n do
SUM:=SUM-Z1[i,j]*R[j,m];
R[i,m]:=SUM/Z1[i,i];
end;
writeln ('Обратная матрица:');
for i:=1 to n do
begin
for j:=1 to n do
write (R[i,j]:5:4,' ');
writeln;
end;
writeln ('Проверка правильности нахождения обратной матрицы:');
for i:=1 to n do
for j:=1 to n do
begin
W[i,j]:=0;
for k:=1 to n do
W[i,j]:=W[i,j]+Z[i,k]*R[k,j];
end;
for i:=1 to n do
begin
for j:=1 to n do
write (W[i,j]:5:3,' ');
writeln;
end;
for i:=1 to n do
begin
X[i]:=0;
for j:=1 to n do
X[i]:=X[i]+R[i,j]*B[j];
end;
end;
Begin
ClrScr;
Writeln ('Введите количество заданных исходных точек');
Read (m);
writeln;
Writeln ('Введите количество заданных исходных функций');
Read (n);
writeln;
Writeln ('Введите значения X:');
for i:=1 to m do
Read (x[i]);
writeln;
Writeln ('Введите значения Y:');
for i:=1 to m do
Read (y[i]);
writeln;
for i:=1 to m do
begin
f[1,i]:=cos(x[i]);
f[2,i]:=sin(x[i]);
f[3,i]:=1;
end;
writeln ('Матрица коэффициентов при неизвестных С1, С2, С3:');
for k:=1 to n do
begin
for l:=1 to n do
begin
A[k,l]:=0;
for i:=1 to m do
A[k,l]:=A[k,l]+f[k,i]*f[l,i];
write (A[k,l]:5:4,' ');
end;
writeln;
end;
writeln ('Матрица-столбец правой части системы уравнений:');
for k:=1 to n do
begin
B[k]:=0;
for i:=1 to m do
B[k]:=B[k]+y[i]*f[k,i];
writeln (B[k]:5:3,' ');
end;
MATRIX(A,B,n,C);
writeln ('Значения неизвестных Ck:');
for k:=1 to n do
writeln ('C',k,'=',C[k]:5:4);
writeln ('Значения аппроксимирующей функции в зависимости от x[i]:');
for i:=1 to m do
begin
F0[i]:=C[1]*f[1,i]+C[2]*f[2,i]
writeln ('F(x',i,')=',F0[i]:5:2);
end;
writeln ('Значения отклонений исходных точек от аппроксимирующей функции:');
for i:=1 to m do
begin
DELTA[i]:=y[i]-F0[i];
writeln ('DELTA',i,'=',DELTA[i]:5:2);
end;
writeln ('Максимальное отклонение:');
max:=DELTA[1];
imax:=1;
for i:=2 to m do
if abs(DELTA[i])>abs(max) then
begin
max:=DELTA[i];
imax:=i;
end;
writeln ('DELTAmax=',max:5:2,' при x=x',imax,'=',x[imax]:3:2)
writeln ('Минимальное значение качества аппроксимации:');
J0:=DELTA[1]*DELTA[1];
for i:=2 to m do
J0:=J0+DELTA[i]*DELTA[i];
writeln ('J0=',J0:5:4);
readkey
end.
Введите количество заданных исходных точек
5
Введите количество заданных исходных функций
3
Введите значения X:
0.0 0.78 1.57 2.35 3.14
Введите значения Y:
0.0 4.0 5.0 8.0 9.0
Матрица коэффициентов при неизвестных С1, С2, С3:
2.9992 -0.0008 0.0090
-0.0008 2.0008 2.4163
0.0090 2.4163 5.0000
Матрица-столбец правой части системы уравнений:
-11.774
13.519
26.000
Обратная матрица:
0.3334 -0.0016 0.0021
-0.0038 -0.5801 1.2004
0.0019 0.4804 -0.5801
Проверка правильности нахождения обратной матрицы:
1.000 -0.000 -0.000
0.000 1.000 -0.000
-0.000 -0.000 1.000
Значения неизвестных Ck:
C1=-3.9393
C2=1.1896
C3=4.6245
Значения аппроксимирующей функции в зависимости от x[i]:
F(x1)= 0.69
F(x2)= 2.66
F(x3)= 5.81
F(x4)= 8.24
F(x5)= 8.57
Значения отклонений исходных точек от аппроксимирующей функции:
DELTA1=-0.69
DELTA2= 1.34
DELTA3=-0.81
DELTA4=-0.24
DELTA5= 0.43
Максимальное отклонение:
DELTAmax= 1.34 при x=x2=0.78
Минимальное значение качества аппроксимации:
J0=3.1669
В данной курсовой работе мною была освоена и применена на практике методика приближенного представления (аппроксимации) исходных зависимостей с помощью известных функций или их комбинаций. Были усовершенствованы навыки алгоритмизации и построения программ на языке Паскаль, освоены новые методы решения систем уравнений.
Результаты ручного счета от результатов работы программы отличаются не более, чем на 5%. Максимальное отклонение аппроксимирующей функции от исходных точек составило 1.34. Минимальное значение качества аппроксимации J0=3.1669 (отличается от результата ручного счета на 1%). Обратная матрица, вычисленная в программе отличается от обратной матрицы, полученной в ручном счете. Это связано с тем, что программа осуществляет перестановку максимального по модулю коэффициента при неизвестном Ck на первое место. Данная процедура позволяет увеличить точность вычислений.