Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Andrianov_kp_2-3.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
299.01 Кб
Скачать

Раздел 5.

Однофакторные регрессионные модели {x}i=f(t) и прогнозные величины факторов {x}i.

Используем программу PROG3.PAS.

PROGRAM prog3;

Uses crt;

Label 0,1,2,3,4,5,6,7,8,9,11,12;

Var i,n,m,k,p,j,O :integer;

x, y ,yr,yo : array[1..22] of real;

kof: array [1..3,1..5] of real;

tab: array [1..5,1..11] of real;

f,f1,f2 : text;

slovo : array [1..18] of string;

Sx,Sy,Sxy,Sxx,Sx3,Sx4,Sxxy:real;

Slnx,Slny,Slnxy,Slnxx,Sxlny:real;

a,b,d1,d2,d3,c,sigmaYY,xm,sigmaX1,dispP:real;

e,sigmay,dispF,ym,nu,z,w,ta,tb,tc:real;

q:char;

PROCEDURE analis;

Label 10;

Var

xmm,sigmaY1,sigmaZ1:real;

sigmaX,sigmaXX,sigmaA,sigmaB,sigmaC:real;

v,yv:real;

begin

i:=0;e:=0;dispF:=0;ym:=0;xm:=0;xmm:=0;

dispP:=0;sigmaX1:=0;sigmaY1:=0;sigmaZ1:=0;nu:=0;z:=0;w:=0;

for i:=1 to n do

begin

if k=1 then yr[i]:=kof[1,1]+kof[2,1]*x[i];

if k=2 then yr[i]:=kof[1,2]*exp(kof[2,2]*ln(x[i]));

if k=3 then yr[i]:=kof[1,3]*exp(x[i]*ln(kof[2,3]));

if k=4 then yr[i]:=kof[1,4]*exp(kof[2,4]*x[i]);

if k=5 then yr[i]:=kof[1,5]+kof[2,5]*x[i]+kof[3,5]*SQR(x[i]);

yo[i]:=yr[i]-y[i];

e:=e+Abs(y[i]-yr[i])/y[i]*100/n;

dispF:= dispF + sqr(y[i]-yr[i])/(n-p);

ym:=ym + y[i]/n;

xm:=xm + x[i]/n;

xmm:=xmm + sqr(x[i])/n;

end;

tab[k,1]:=e;

tab[k,3]:=dispF;

sigmay:= sqrt(dispF);

tab[k,2]:=sigmay;

tab[k,4]:=ym;

for i:=1 to n do

begin

dispP:=dispP + sqr(y[i]-ym)/(n-1);

sigmaY1:=sigmaY1 + sqr(y[i]-ym)/(n-2);

sigmaX1:=sigmaX1 + sqr(x[i]-xm)/(n-1);

sigmaZ1:=sigmaZ1 + sqr(x[i]*x[i]-xmm)/(n-1);

end;

tab[k,5]:=dispP;

nu:=dispF/dispP;

nu:=sqrt(1-nu);

tab[k,6]:=nu;

z:=ln(sqr(nu)/(1-sqr(nu)))/2*(n-p)/(p-1);

tab[k,7]:=z;

w:=dispP/dispF;

tab[k,8]:=w;

sigmaYY:=0;sigmaX:=0;sigmaXX:=0;

sigmaYY:=sqrt(sigmaY1);

sigmaX:=sqrt(sigmaX1);

sigmaXX:=sqrt(sigmaZ1);

sigmaA:=0;sigmaB:=0;sigmaC:=0;

ta:=0;tb:=0;tc:=0;tab[k,11]:=0;

if k<>5 then goto 10;

sigmaC:=sigmaYY/(sqrt(n-1)*sqr(sigmaXX));

tc:= abs(c/sigmaC);

tab[k,11]:=tc;

10: sigmaA:=sigmaYY*sqrt(1/n+sqr(xm)/((n-1)*sqr(sigmaX)));

ta:=abs(a/sigmaA);

sigmaB:=sigmaYY/(sqrt(n-1)*sqr(sigmaX));

tb:=abs(b/sigmaB);

tab[k,9]:=ta;

tab[k,10]:=tb;

end;

PROCEDURE ocenka;

LABEL 18,19,20,21,22,23,24,25,26;

VAR v,yv:real;

begin

v:=0;

clrscr;

{TextColor(4);}

writeln(' РАСЧЕТЫ ДЛЯ ФАКТОРА N ',O:3);

18: {TextColor(1); }

writeln(' ВЫБЕРИТЕ НАИЛУЧШУЮ МОДЕЛЬ ');

writeln;

writeln('Код Показатели');

write('мод. e sigmay dispF ym dispP nu z F ');

writeln(' ta tb tc ');

for i:=1 to 5 do

begin

write(i:2);

for j:=1 to 11 do

begin

if (j=11) and (i<5)then

begin

write(' ');

goto 20;

end;

write(tab[i,j]:7:1);

end;

20: writeln;

end;

writeln;

19: write(' Введите код выбранной модели ');

readln(k);

write(' Введите значение " x " для планового года ');readln(v);

writeln;

yv:=0;

if k=1 then goto 21;

if k=2 then goto 22;

if k=3 then goto 23;

if k=4 then goto 24;

if k=5 then goto 25;

writeln('Вы неправильно ввели код.');

goto 19;

21: yv:=kof[1,1] + kof[2,1]*v;

writeln(' Модель 1 y=',kof[1,1]:5:2,' + ',kof[2,1]:5:2,'* x');

write(f1,' y=',kof[1,1]:7:2,' + ',kof[2,1]:6:2,'* x');

writeln(f1,yv:10:2);

write(f2,yv:7:2);

goto 26; 16

22: yv:=kof[1,2]*exp(kof[2,2]*ln(v));

writeln(' Модель 2 y=',kof[1,2]:5:2,'*exp(',kof[2,2]:5:2,'*x)');

write(f1,' y=',kof[1,2]:7:2,'*exp(',kof[2,2]:7:2,'*x)');

writeln(f1,yv:9:2);

write(f2,yv:7:2);

goto 26;

23: yv:=kof[1,3]*exp(v*ln(kof[2,3]));

writeln(' Модель 3 y=',kof[1,3]:5:2,'*exp(x*ln(',kof[2,3]:5:2,')');

write(f1,' y=',kof[1,3]:7:2,'*exp(x*ln(',kof[2,3]:7:2,')');

writeln(f1,yv:9:2);

write(f2,yv:7:2);

goto 26;

24: yv:=kof[1,4]*exp(kof[2,4]*v);

writeln(' Модель 4 y=',kof[1,4]:5:2,'*exp(',kof[2,4]:5:2,'*x)');

write(f1,' y=',kof[1,4]:7:2,'*exp(',kof[2,4]:7:2,'*x)');

writeln(f1,yv:9:2);

write(f2,yv:7:2);

goto 26;

25: yv:=kof[1,5] + kof[2,5]*v + kof[3,5]*sqr(v);

write(' Модель 5 y=',kof[1,5]:5:2,' + ');

writeln(kof[2,5]:5:2,'*x + ',kof[3,5]:5:2,'*SQR(x)');

write(f1,' y=',kof[1,5]:7:2,' + ');

write(f1,kof[2,5]:7:2,'*x+',kof[3,5]:7:2,'*SQR(x)');

writeln(f1,yv:9:2);

write(f2,yv:7:2);

26: writeln;

TextColor(4);

writeln(' П Р О Г Н О З ');

writeln;

TextColor(1);

writeln(' x(план)=',v:5:2,' y(план)=',yv:5:2);

writeln;

write(' Точечная оценка прогноза " y " ');

writeln(yv:5:2);writeln;

end;

PROCEDURE pechat;

Label 15;

Var e1:real;

Begin

writeln(' y(факт) y(расч) y(откл) y(откл) %');

for i:=1 to n do

begin

write(y[i]:7:2);

write(yr[i]:10:2);

write(yo[i]:10:2);

e1:=Abs(y[i]-yr[i])/y[i]*100/n;

write(e1:10:2);

writeln;

end;

GotoXY(50,2);

writeln('Средняя относительная');

GotoXY(50,3);

writeln(' ошибка аппроксимации');

GotoXY(50,4);

writeln(' е=',e:5:2,'%');

GotoXY(50,5);

writeln('Среднее квадратическое');

GotoXY(50,6);

write('отклонение - ');writeln(sigmay:9:2);

GotoXY(50,8);

write('Дисперсия - ');writeln(dispF:9:2);

GotoXY(50,10);

write('Полная дисперсия -');writeln(dispP:5:2);

GotoXY(50,12);

writeln('Математическое ожидание');

GotoXY(50,13);

write('показателя y - ');writeln(ym:5:2);

GotoXY(1,15);

writeln(' Показатель оценки надежности модели nu ',nu:8:2);

writeln(' Z-критерий Фишера ',z:9:2);

15: writeln(' F - критерий Фишера ',w:9:2);

writeln(' Показатели оценки значимости расчетных коэффициентов:');

write(' Коэффициент " а " t=');writeln(ta:5:2);

write(' Коэффициент " b " t=');writeln(tb:5:2);

if k=5 then

writeln(' Коэффициент " с " t=',tc:5:2,' ');

end;

Begin

TextBackGround(7);

clrscr;

n:=0;

Assign(f,'a:\razd_5\prog2d.rez');

reset(f);

readln(f,m);

writeln(m:5);

readln(f,n);

writeln(n:5);

Assign(f1,'a:\razd_5\prog3.rez');

Assign(f2,'a:\razd_5\prog4d.rez');

append(f2);

rewrite(f1);

writeln(f1,' N ФАКТОРА(П/П) ВИД ФУНКЦИИ ЗНАЧЕНИЯ (ПЛАНИРУЕМЫЕ)');

writeln(f1);

O:=1;

12: clrscr;

TextColor(4);

if O=m+1 then goto 8;

writeln(' РАСЧЕТЫ ДЛЯ ФАКТОРА N ',O:2);

write(f1,O:2);

9: readln(f,slovo[O]);

TextColor(1);

writeln(' ',slovo[O]);

i:=0;

write(' ');

for i:=1 to n do

begin

y[i]:=0;

read(f,y[i]);

write(y[i]:5:0);

end;

writeln;

readln(f);

readln(f,slovo[O+1]);

writeln(' ',slovo[O+1]);

write(' ');

for i:=1 to n do

begin

read(f,x[i]);

write(x[i]:5:0);

end;

readln(f);

writeln;

Sx:=0;Sy:=0;Sxy:=0;Sxx:=0;Sx3:=0;Sx4:=0;Sxxy:=0;

Slnx:=0;Slny:=0;Slnxy:=0;Slnxx:=0;Sxlny:=0;

for i:=1 to n do

begin

Sx:=Sx + x[i];

Sy:=Sy + y[i];

Sxy:=Sxy + x[i]*y[i];

Sxx:=Sxx + x[i]*x[i];

Sx3:=Sx3 + x[i]*x[i]*x[i];

Sx4:=Sx4 + x[i]*x[i]*x[i]*x[i];

Sxxy:=Sxxy + y[i]*x[i]*x[i];

Slnx:=Slnx + ln(x[i])/ln(10); 17

Slny:=Slny + ln(y[i])/ln(10);

Slnxy:=Slnxy +( ln(x[i])/ln(10))*(ln(y[i])/ln(10));

Slnxx:=Slnxx + (ln(x[i])/ln(10))*(ln(x[i])/ln(10));

Sxlny:=Sxlny + x[i]*(ln(y[i])/ln(10));

end;

writeln;

TextColor(4);

writeln(' МЕНЮ');

TextColor(1);

writeln(' Вид функции Код');writeln;

writeln(' y = a + b*x[i] 1');

writeln(' y = a*exp(b*ln(x[i])) 2');

writeln(' y = a*exp(x[i]*ln(b)) 3');

writeln(' y = a*exp(b*x[i]) 4');

writeln(' y = a + b*x[i] + c*SQR(x[i]) 5');writeln;

writeln(' Окончание работы 0');writeln;

0: k:=0;write(' Введите код ');readln(k);writeln;

clrscr;

TextColor(4);

writeln(' РАСЧЕТЫ ДЛЯ ФАКТОРА N ',O:2);

11: TextColor(1);

a:=0;b:=0;c:=0;d1:=0;d2:=0;d3:=0;p:=0;

if k=1 then goto 1;

if k=2 then goto 2;

if k=3 then goto 3;

if k=4 then goto 4;

if k=5 then goto 5;

if k=0 then goto 7;

writeln('Вы неправильно ввели код.');goto 0;

1: b:=(Sy*Sx - n*Sxy)/(Sx*Sx - n*Sxx);

a:=(Sy - b*Sx)/n;

p:=2;

writeln(' Модель 1 y= ',a:5:2,'+',b:5:2,'* x[i]');

kof[1,1]:=a;

kof[2,1]:=b;

kof[3,1]:=0;

goto 6;

2: b:=(Slny*Slnx - n*Slnxy)/(Slnx*Slnx - n*Slnxx);

a:=exp(ln(10)*(Slny - b*Slnx)/n);

p:=2;

writeln(' Модель 2 y= ',a:5:2,'*exp(',b:5:2,'*x[i])');

kof[1,2]:=a;

kof[2,2]:=b;

kof[3,2]:=0;

goto 6;

3: b:=exp(ln(10)*(Slny*Sx - n*Sxlny)/(Sx*Sx - n*Sxx));

a:=exp(ln(10)*(Slny - ln(b)*0.43429*Sx)/n);

p:=2;

writeln(' Модель 3 y= ',a:5:2,'*exp(x[i]*ln(',b:5:2,')');

kof[1,3]:=a;

kof[2,3]:=b;

kof[3,3]:=0;

goto 6;

4: b:=(Slny*Sx - n*Sxlny)/(Sx*Sx - n*Sxx);

a:=exp(ln(10)*(Slny - b*0.43429*Sx)/n);

p:=2;

writeln(' Модель 4 y= ',a:5:2,'*exp(',b:5:2,'*x[i])');

kof[1,4]:=a;

kof[2,4]:=b;

kof[3,4]:=0;

goto 6;

5: d1:=n*Sx3 - Sx*Sxx;

d2:=n*Sxx - Sx*Sy;

d3:=(n*Sxxy-Sy*Sxx+d1*(Sx*Sy-n*Sxy)/d2);

c:=d3/(n*Sx4 - Sxx*Sxx - (d1*d1)/d2);

b:=(n*Sxy - Sx*Sy - c*d1)/d2;

a:=(Sy - Sx*b - Sxx*c)/n;

p:=3;

writeln(' Модель 5 y=',a:5:2,'+',b:5:2,'*x[i]+',c:5:2,'*SQR(x[i])');

kof[1,5]:=a;

kof[2,5]:=b;

kof[3,5]:=c;

goto 6;

6: writeln;

analis;

pechat;

writeln;

goto 0;

7: writeln;

write(' Вы хотите выбрать модель и сделать прогноз(y/n)?');readln(q);

if q='y' then

begin

k:=0;

ocenka;

end;

write(' Вы будете проводить расчеты по остальным линиям(y/n)?');

readln(q);

if q='n' then goto 8;

O:=O+1;

goto 12;

8: writeln(f2);

close(f2);

close(f1);

close(f);

end.

18

Файл исходных данных :

2

15

Вектор Y

56.00 63.00 66.00 75.00 81.00 88.00 94.00 105.00 111.00 123.00 132.00 144.00 155.00 167.00 175.00

Вектор X

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Вектор Y

32.00 35.00 48.00 41.00 54.00 57.00 61.00 64.00 77.00 71.00 83.00 89.00 92.00 97.00 103.00

Вектор X

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Файл результатов :

N ФАКТОРА(П/П) ВИД ФУНКЦИИ ЗНАЧЕНИЯ (ПЛАНИРУЕМЫЕ)

1 y= 53.11*exp(x*ln( 1.09) 197.74

2 y= 26.59 + 5.04* x 107.28

Получили прогнозные величины факторов на плановый 16-ый год.

19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]