close

Вход

Забыли?

вход по аккаунту

?

Laba 3

код для вставкиСкачать
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Ижевский государственный технический университет им. М.Т. Калашникова»
Кафедра «Вычислительная Техника»
Лабораторная работа №3
Выполнила: студентка группы 5-78-2 Мельчикова М.В.
Принял: Вдовин А.Ю.
Ижевск – 2012
Цель работы:
Необходимо аппроксимировать массив А[0..30] полиномами различной
степени и выбрать оптимальную аппроксимацию. Выбор оптимальности
степени полинома обосновать. Реализовать на ЯВУ аппроксимацию
массива А.
Порядок выполнения :
1)
Краткая теория
Аппроксимация функций.
Из курса математики известны 3 способа задания функциональных зависимостей:
 аналитический
 графический
 табличный
Табличный способ обычно возникает в результате эксперимента. Недостаток
табличного задания функции заключается в том, что найдутся значения переменных которые
не определены таблицей. Для отыскания таких значений определяют приближающуюся к
заданной функцию, называемой аппроксимирующей, а действие замены аппроксимацией.
Аппроксимация заключается в том, что используя имеющуюся информацию по f(x) можно
рассмотреть другую функцию w(x) близкую в некотором смысле к f(x), позволяющую
выполнить над ней соответствующие операции и получить оценку погрешность такой
замены.
w(х)- аппроксимирующая функция.
В инженерной деятельности часто возникает необходимость описать в виде
функциональной зависимости связь между величинами, заданными таблично или в виде
набора точек с координатами (xi,yi), i=0,1,2,...n, где n - общее количество точек. Как правило,
эти табличные данные получены экспериментально и имеют погрешности. При
аппроксимации желательно получить относительно простую функциональную зависимость
(например, полином), которая позволила бы "сгладить" экспериментальные погрешности,
получить промежуточные и экстраполяционные значения функций, изначально не
содержащиеся в исходной табличной информации.
Графическая интерпретация аппроксимации
Эта функциональная (аналитическая) зависимость должна с достаточной точностью
соответствовать исходной табличной зависимости. Критерием точности или достаточно
"хорошего" приближения могут служить несколько условий.
Обозначим через fi значение, вычисленное из функциональной зависимости для x=xi и
сопоставляемое с yi.Одно из условий согласования можно записать как
S = ∑(fi - yi) → min ,
т.е. сумма отклонений табличных и функциональных значений для одинаковых x=x i должна
быть минимальной (метод средних). Отклонения могут иметь разные знаки, поэтому
достаточная точность в ряде случаев не достигается.
Использование критерия S = |fi-yi| → min , также не приемлемо, т.к. абсолютное
значение не имеет производной в точке минимума. Учитывая вышеизложенное, используют
критерий наименьших квадратов, т.е. определяют такую функциональную зависимость, при
которой
(1)
обращается в минимум. В качестве функциональной зависимости рассмотрим многочлен
f(x)=C0 + C1X + C2X2+...+CMXM.
(2)
Формула (1) примет вид
Условия минимума S можно записать, приравнивая нулю частные производные S по
независимым переменным С0,С1,...СМ :
SC0 = 2 ( C0 + C1Xi + C2Xi2+...+CMXiM - Yi ) = 0 ,
SC1 = 2 ( C0 + C1Xi + C2Xi2+...+CMXiM - Yi ) Xi = 0 ,
....................................................................................
SCM = 2 ( C0 + C1Xi + C2Xi2+...+CMXiM - Yi ) XiM = 0 ,
(3)
Тогда из (3) можно получить систему нормальных уравнений
C0 (N+1) + C1 Xi + C2Xi2 +...+ CM XiM = Yi ,
C0Xi + C1Xi2 + C2Xi3 +...+ CMXiM+1 = Yi Xi ,
....................................................................................
C0XiM + C1XiM+1 + C2XiM+2 +...+ CMXi2M = Yi XiM .
(4)
Для определения коэффициентов Сi и, следовательно, искомой зависимости (2) необходимо
вычислить суммы и решить систему уравнений (4). Матрица системы (4) называется
матрицей Грама и является симметричной и положительно определенной. Эти полезные
свойства используются при ее решении.
(N+1)Xi Xi2
... XiM Yi
2
3
Xi
Xi
Xi ... XiM+1 Yi Xi
....................................................
XiM XiM+1 XiM+2
... Xi2M Yi XiM
Нетрудно видеть, что для формирования расширенной матрицы (4а) достаточно вычислить
только элементы первой строки и двух последних столбцов, остальные элементы не
являются "оригинальными" и заполняются с помощью циклического присвоения.
2) Аппроксимация в пакете MathCad

Создание исходных массивов для работы
 1.007950


 4.002602
 6.941200
 9.012180


 10.81200
 12.01080
 14.00670


 15.99940
 18.99840


 20.17900
 22.98977
 24.30500


 26.98154
 28.08600
 30.97376


Y   32.06000
 35.45300


 39.94800
 39.09830
 40.08000


 44.95590
 47.90000
 50.94150


 51.99600
 54.93800


 55.84700
 58.93320
 58.70000


 63.54600
 65.38000
 69.72000



 0
 
 1
 2
 3
 
 4
 5
 6
 
 7
 8
 
 9
 10
 11
 
 12
 13
 14
 
X   15
 16
 
 17
 18
 19
 
 20
 21
 22
 
 23
 24
 
 25
 26
 27
 
 28
 29
 30
 
Аппроксимация массива полиномами: 1, 5, 10, 15, 20, 22, 23 степени:
z  0 30
lin1  regress(xy 1)
lin5  regress(xy 5)
lin10  regress(xy 10)
lin15  regress(xy 15)
lin20  regress(xy 20)
lin22  regress(xy 22)
lin23  regress(xy 23)
f1(z)  interp(lin1 xy z)
f5(z)  interp(lin5 xy z)
f10(z)  interp(lin10xy z)
f15(z)  interp(lin15xy z)
f20(z)  interp(lin20xy z)
f22(z)  interp(lin22xy z)
f23(z)  interp(lin23xy z)

Расчет среднеквадратичного отклонения для полиномов:
n  31
i  0 n  1
f1xi  yi
S1 
i
n 1
f10xi  yi
S10 
f5xi  yi
2
 1.201
i
n 1
i
n 1
i
n 1
f15xi  yi
2
f22xi  yi
S22 
S5 
2
 0.326
S15 
 0.211
S23 
2
i
 0.306
n 1
f23xi  yi
2
 0.921
i
n 1
2
 0.428
3) Реализация аппроксимации на ЯВУ:
 Принцип работы программы
Нам необходимо построить гладкую кривую, проходящую приблизительно через
заданные точки. Точки расставляются на экране с помощью мыши в произвольном порядке.
Программа также позволяет с помощью мыши изменять форму кривой.
Коэффициенты аппроксимируещего многочлена вычисляются при помощи метода
наименьших квадратов. Эта задача решается следующим образом.
Пусть на некотором отрезке в точках x0, x1, x2… xn нам известны значения y0, y1, y2… yn
некоторой функции f(x).
Требуется определить параметры ai многочлена вида F(x)=a0+a1x+a2x2+...+akxk, где k<N
такого, что сумма квадратов отклонений значений y от значений функции f(y) в заданных
точках x была минимальной, т.е.
S=Σ(yi - f(xi))2 → min
Геометрический смысл заключается в том, что график найденного многочлена y = f(x)
будет проходить как можно ближе к каждой из заданных точек.
Такая задача будет решена, если решить систему уравнений вида:
a0n +a1Σxi+a2Σxi2+... +akΣxik=Σyi
a0Σxi +a1Σxi2+a2Σxi3+... +akΣxik+1=Σxiyi
...
a0Σxik+a1Σxik+1+a2Σxik+2+...+akΣxi2k=Σxikyi
где везде под символом Σ подразумевается суммирование по i от 0 до n.
Для решения системы воспользуемся методом Гаусса (система уравнений приводится к
треугольному виду, после чего последовательно вычисляются аn, … а0). Имея аналитический
вид функции f, нетрудно найти её значение в любой точке и построить кривую.

Листинг программы
uses crt,graph;
const razr=12;
ymin=50;
ymax=54;
type
mas=array[0..30] of real;
matr=array[0..30,0..30] of real;
var
gd,gm,code:integer;
i, j, k, n,i1,j1,di,dj: Integer;
Eur, Day: mas;
A,Ai:matr;
B,C:mas;
DM:matr;
input:text;
st:string;
y1,m:integer;
procedure ReadFile;
begin
assign
(input,'Vmlab.txt');
reset (input);
for i:=0 to 30 do readln (input,Day[i],Eur[i]);
close (input);
end;
procedure OutMas (M:mas;n:integer);
var i:integer;
begin
for i:=0 to n do writeln (M[i]:razr:3);
end;
procedure OutMatr (M:matr;n1,n2:integer);
var i,j:integer;
begin
for j:=0 to n2 do
begin
for i:=0 to n1 do write (M[i,j]:razr:3);
writeln;
end;
end;
function Step (x:real;y:integer):real;
var
st:real;
i:integer;
begin
st:=1;
for i:=1 to y do st:=st*x;
step:=st;
end;
function Det (M:matr;n:integer):real{extended};
var i,j:integer;
d:extended;
begin
if n=1 then d:=M[0,0];
if n=2 then d:=M[0,0]*M[1,1]-M[0,1]*M[1,0];
if n=3 then
d:=(M[0,0]*M[1,1]*M[2,2])+(M[1,0]*M[2,1]*M[0,2])+(M[0,1]*M[1,2]*M[2,0])(M[0,2]*M[1,1]*M[2,0])
-(M[0,1]*M[1,0]*M[2,2])-(M[0,0]*M[2,1]*M[1,2]);
Det:=D;
end;
function poly (x:real; m:byte):real;
var p:real;
i:integer;
begin
p:=0;
for i:=0 to m do p:=P+C[i]*Step(x,i);
poly:=P;
end;
begin
clrscr;
readfile;
{A}
writeln('Please,enter degree of polynom');
readln(m);
for i:=0 to m do
for j:=0 to m do
begin
A[i,j]:=0;
for k:=0 to 30 do A[i,j]:=A[i,j]+Step(Day[k],i+j);
end;
{}OutMatr(A,m,m);{}
{B}
for i:=0 to m do
begin
B[i]:=0;
for k:=0 to 30 do B[i]:=B[i]+Eur[k]*Step(Day[k],i);
end;
{}OutMas (B,m);{}
{A^-1}
if det(A,m+1)=0 then begin writeln ('Error: Det=0');
readkey;
halt;
end;
for i:=0 to m do
for j:=0 to m do
begin
{di:=0j:=0;}
for i1:=0 to m do
for j1:=0 to m do
begin
if i1>i then di:=1 else di:=0;
if
j1>j then dj:=1 else dj:=0;
if (i<>i1) and (j<>j1) then DM[i1-di,j1-dj]:=A[i1,j1];
end;
Ai[i,j]:=step(-1,i+j)*det(DM,m)/det(A,m+1);
end;
clrscr;
{}OutMatr(Ai,m,m);{}
{C}
for i:=0 to m do begin
C[i]:=0;
for j:=0 to m do C[i]:=C[i]+Ai[i,j]*B[j]
end;
{}OutMas (C,m);{}
clrscr;
gd:=detect;
initgraph(gd,gm,'');
setcolor(White);
setlinestyle(0,0,3);
line(40,420,620,420);
line(40,40,40,420);
setlinestyle(1,0,1);
if m=2 then
outtextxy(10,10,'degree=2')
else
outtextxy(10,10,'degree=1');
for i:=0 to 30 do
begin
line(40+19*round(Day[i]),420,40+19*round(Day[i]),60);
str(round(Day[i]),st);
outtextxy(37+19*round(Day[i]),430,st);
end;
y1:=30;
for i:=0 to 12 do
begin
y1:=y1+30;
line (40,y1,610,y1);
str((ymax-(ymax-ymin)*i/12):0:2,st);
outtextxy(1,y1-4,st);
end;
for i:=0 to 30 do
begin
pieslice(40+19*round(Day[i]),420-round((Eur[i]Ymin)*360/(ymax-ymin)),0,360,3);
end;
setcolor (red);
setfillstyle(1,red);
for i:=40 to 610 do begin pieslice(i,420-round((poly((i-40)/19,m)Ymin)*360/(ymax-ymin)),0,360,1);
end;
readln;
end.
4) Вывод:
В ходе проделанной лабораторной работы была исследована аппроксимация функции
методом наименьших квадратов полиномами различной степени. Оптимальным оказался
вариант аппроксимации полиномом 22-ой степени. Так как именно он имеет график
наиболее близко проходящий к заданным точкам и наименьшее СКО. При дальнейшем
увеличении степени полинома (23 степень и выше) наблюдаются сильные отклонения от
заданных координат и, как следствие, увеличение СКО.
Документ
Категория
Математика
Просмотров
5
Размер файла
175 Кб
Теги
laba_3
1/--страниц
Пожаловаться на содержимое документа