РефератыАстрономияПоПобудова кривих регресій методом парабол

Побудова кривих регресій методом парабол

Міністерство освіти України


Львівський державний університет ім. І. Франка


Факультет прикладної математики


та інформатики


Кафедра теорії оптимальних


процесів
.


Звіт

про виконання індивідуального завдання № 3


“Побудова кривих регресій методом парабол”

з курсу


"Теорія імовірностей та математична статистика"

Виконав: студенти групи ПМП-32


Ковальський Д., Шевчук А.


Керівник: Сеньо П.С.


Львів – 1998


Теоритичні відомост
і


Лінійна залежність є найпростішою і в більшості випадків є початковим, першим наближенням до істини. Часто потрібно встановити більш адекватну залежність між компонентами наприклад двомірного випадкового вектора, яка як правило не лінійна.





Так як у вибіркових данних присутні випадковості, то початковий вигляд нелінійної залежності можна приблизно уявити побудувавши на міліметровому папері сукупність точок

Ми будемо шукати залежність у вигляді y = a0
+ a1
x + … + ak
xk
, де а0
, …, аk
– початкові моменти.


Ця передумова обумовлюється теоремою Вейерштраса про наближення будь-якої функції многочленом відповідного степеня (многочленом Берштейна).


Складність полягає в тому, що як правило в статистиці многочлени степеня k > 4 не використовуються, а початкові моменти вище четвертого дають великі похибки, а експериментальних данних багато, отже не можна провести многочлен який би проходив через всі вибіркові точки. Тому параболу будемо будувати таку, щоб сума квадратів відхилень вибіркових значень була найменшою.


Розглянувши пари (
xi
,yi
)
скористаємося формулами:


Розв'язавши дану систему, отримаємо рівняння шуканої параболи.


Найбільшу величину похибки при апроксимації початкових данних шукатимемо за наступною формулою:





Приклад дії програми


Початкові данні:
















x
o
1
2
3
4
y
1
1.5
1.7
2.1
5.9

При
виборі степеня
k=1
результат отримано наступний:


а0
= 0.36


а1
= 1.04


d = 4.776


Графік:








При
k=2:

a0
= 1.3314; a1
= -0.9029; a2
= 0.4857; d= 1.4731


При
k=3:


a0
= 0.9614; a1
= 1.7488; a2
=-1.3643; a3
=-0.3083; d= 0.1041





При
k=4:

a0
= 1.2250; a1
= -0.1381; a2
=-0.0495; a3
=0.090; a4
=-0.0002; d= 0.7906


Текст програми (Borland Pascal 7.0):

uses crt, graph;


var xn,yn:array[1..30] of real; n:integer; chr:char; a: array [1..5] of real;


function stepin (x:real; i:integer):real;


var j:integer; temp:real;


begin


temp:=1;


for j:=1 to i do


begin


temp:=temp*x;


inc (i);


end;


stepin:=temp;


end;


procedure xyread;


var fl:text; i:integer;


begin


TextBackground(3);


TextColor(0);


clrscr;


assign (fl,'3.txt');


reset (fl);


writeln ('Програма знаходження кривих регресiй методом парабол');


writeln ('Шевчук А., Ковальський Д. ПМП-32, 1998');


{ writeln ('Esc for Exit');}


writeln;


writeln;


writeln (' x', ' y');


writeln ;


i:=1;


while not EOF (fl) do


begin


read (fl,xn[i]);


read (fl,yn[i]);


writeln ('x[',i,']=',xn[i]:0:2,' ',' y','[',i,']=',yn[i]:0:2);


inc (i); n:=i-1;


end;


writeln;


writeln ('Тиснiть ENTER для продовження');


close (fl);


repeat


chr:=readkey;


if ord(chr)=13 then break;


until false;


end;


procedure obchysl;


var k :integer; i,j,h:integer;


sx: array [1..6] of real;


sy: array [1..2] of real;


sxy: array [1..3] of real;


matr: array [1..5, 1..5] of real;


b: array [1..5] of real;


s: real;


d:real;


m,v:word;


gd,gm,ch,cv:integer;


x,y:real;


chr:char;

p>

ex:boolean;


{процедура ўнўцўалўзацў• системи кординат}


procedure initgrah(m:word);


var i:integer;


begin


setbkcolor(white);


setcolor(magenta);


ch:=getmaxx div 2 ;


cv:=getmaxy div 2 ;


line(1,cv,getmaxx,cv);


line(getmaxx,cv,getmaxx-6,cv-3);


line(getmaxx,cv,getmaxx-6,cv+3);


line(ch,1,ch,getmaxy);


line(ch,1,ch-3,6);


line(ch,1,ch+3,6);


i:=0;


while ch+i*m<=getmaxx-6 do


begin


line(ch+i*m,cv+2,ch+i*m,cv-2);


line(ch-2,cv+i*m,ch+2,cv+i*m);


line(ch-i*m,cv+2,ch-i*m,cv-2);


line(ch-2,cv-i*m,ch+2,cv-i*m);


i:=i+1;


end;


end;


begin


writeln;


writeln;


writeln ('Крива регресii описуэться рiвнянням y=g(x), де');


writeln ('g(x)=a[0] + a[1]*x + ... + a[k]*x^k');


writeln ('Введiть cтепiнь k (k < = 4):');


readln (k);


for i:=k+1 to 5 do


a[i]:=0;


for i:=1 to 6 do


begin


sx[i]:=0;


for j:=1 to n do


sx[i]:=sx[i] + stepin (xn[j], i);


end;


for i:=1 to 2 do


begin


sy[i]:=0;


for j:=1 to n do


sy[i]:=sy[i] + stepin (yn[j], i);


end;


for i:=1 to 3 do


begin


sxy[i]:=0;


for j:=1 to n do


sxy[i]:=sxy[i] + yn[j] * stepin (xn[j], i);


end;


b[1]:=sy[1];


for j:=2 to k+1 do


matr[1,j]:=sx[j-1];


for i:=2 to k+1 do


b[i]:=sxy[i-1];


for i:=2 to k+1 do


for j:=1 to k+1 do


matr[i,j]:=sx[j+i-2];


matr[1,1]:=n;


{ МЕТОД ГАУСА РОЗВ'ЯЗАННЯ С.Л.А.Р. }


{ прямий хiд методу гауса }


for i:=1 to k do


for j:=i+1 to k+1 do


begin


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


for h:=i+1 to k+1 do


matr[j,h]:=matr[j,h]+matr[j,i]*matr[i,h];


b[j]:=b[j]+matr[j,i]*b[i];


end;


{ обернений хiд методу гауса }


for i:=k+1 downto 1 do


begin


s:=b[i];


for j:=i+1 to k+1 do s:=s-a[j]*matr[i,j];


a[i]:=s/matr[i,i];


end;


writeln ('Моменти:');


for i:=1 to k+1 do


writeln ('a[',i-1,']=',a[i]:0:4);


d:=sy[2]-a[1]*sy[1]-a[2]*sxy[1]-a[3]*sxy[2]-a[4]*sxy[3];


writeln ('Похибка:');


writeln ('d = ',d:0:4);


writeln ('Enter для перегляду графiка');


repeat


chr:=readkey;


if ord(chr)=13 then break;


until false;


m:=50;v:=160;ex:=false;


repeat


gd:=detect;


initgraph(gd,gm,'');


initgrah(m);


highvideo;


setcolor(green);


for i:=1 to n do


begin


line (round(ch+abs(xn[i]*m))-3, round(cv-yn[i]*m)+3,round(ch+abs(xn[i]*m))+3, round(cv-yn[i]*m)-3);


line (round(ch+abs(xn[i]*m))+3, round(cv-yn[i]*m)+3,round(ch+abs(xn[i]*m))-3, round(cv-yn[i]*m)-3);


end;


setcolor(magenta);


{лўва частина графўка}


for i:=(-v) to 0 do


begin


x:=i/20;


y:=a[1] + a[2]*x + a[3]*x*x + a[4]*x*x*x +a[5]*x*x*x*x;


if abs(ch-abs(x)*m) <32500 then


if abs(cv-y*m)<32500 then


lineto(round(ch-abs(x)*m),round(cv-y*m));


end;


{права частина графўка}


for i:=0 to v do


begin


x:=i/20;


y:=a[1] + a[2]*x + a[3]*x*x + a[4]*x*x*x +a[5]*x*x*x*x;


if abs(ch+abs(x)*m) <32500then


if abs(cv-y*m)<32500 then


lineto(round(ch+abs(x)*m),round(cv-y*m));


end;


outtextxy(30,30,'graphic');


{маштабування графўка}


repeat


chr:=readkey;


case ord(chr) of


{збўльшення графўка}


43:begin


case m of


400:outtextxy(40,40,'no more big');


10..390:begin


m:=m+10;


v:=20*trunc(400/m);


break;


end;


end;


end;


{зменшення графўка}


45:begin


case m of


10:outtextxy(40,40,'no more small');


10..1000:begin


m:=m-10;


v:=20*trunc(400/m);


break;


end;


end;


end;


{повернення в меню}


27:begin


ex:=true;


break;


end;


end;


until false;


closegraph;


if ex=true then break;


until false;


closegraph;


end;


BEGIN


xyread;


obchysl;


END.


Список л
і
тератури


1. Крамер Гарольд. Математические методы статистики. М.: Мир, 1976.


2. Бух Арлей. Введение в теорию вероятностей и математическую статистику. М., 1951.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Побудова кривих регресій методом парабол

Слов:1088
Символов:11361
Размер:22.19 Кб.