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

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

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

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

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

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

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

процесів .

Звіт

про виконання індивідуального завдання № 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;

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.