Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Апроксимация 0,77.doc
Скачиваний:
49
Добавлен:
02.04.2015
Размер:
1.15 Mб
Скачать

Программа расчета на языке программирования Turbo Pascal.

PROGRAM Kurs5_1;

Uses crt; { Подключение вспомогательных модулей }

var { Переменные }

xi,yi : array [1..30] of real;

i,n,j:integer; { Целые }

alyn1,alyn2:real; { Вещественные }

akvadr1,akvadr2,akvadr3:real;

aexp1,aexp2:real;

xcp,ycp,x,y:real;

Sxi,Syi,Sxxi,Sxyi,Sxxxi,Sxxxxi,Sxxyi,Sxlnyi,Slnyi:real;

rrlyn,rrkvadr,rrexp,ro:real;

Soctl,Spolnl,Socts,Spolns,Socte,Spolne:real;

Sro1,Sro2,Sro3:real;

Doctl,Docts,Docte:real;

FLynT,FKvadrT,FExpT,Flyn,Fkvadr,Fexp,salyn1,salyn2,sakvadr1,sakvadr2,

sakvadr3,saexp1,saexp2:real;

tslyn,tskvadr,tsexp,talyn1,talyn2,takvadr1,takvadr2,takvadr3,taexp1,

taexp2:real;

tlyn,tlyn1,tlyn2,tkvadr,tkvadr1,tkvadr2,tkvadr3,texp,texp1,texp2:string;

MMM,f, datafile :text;

BEGIN { Начало программы }

ClrScr; { Очистка экрана }

{ Ввод данных: n,x[i],y[i],F,t}

writeln( ' Введите табличное значение F-критерия Фишера

readln(FLynT);

writeln( ' Введите табличное значение t-критерия Стьюдента

readln(tslyn);

writeln( ' Введите табличное значение F-критерия Фишера

readln(FKvadrT);

writeln( ' Введите табличное значение t-критерия Стьюдента

readln(tskvadr);

writeln( ' Введите табличное значение F-критерия Фишера

readln(FExpT);

writeln( ' Введите табличное значение t-критерия Стьюдента

readln(tsexp);

n:=25;

Assign (datafile,'data.in');

Reset(datafile);

for j:=0 to 25 do

readln(datafile,xi[j]);

for j:=0 to 25 do

readln(datafile,yi[j]);

{ Организация и открытие канала вывода МММ - файла D:\kurs }

Assign(MMM,'data.out');

rewrite(MMM);

Sxi:=0; { Расчетная часть }

Syi:=0;

Sxxi:=0;

Sxyi:=0;

Sxxxi:=0;

Sxxxxi:=0;

Sxxyi:=0;

Sxlnyi:=0;

Slnyi:=0;

for i:=1 to n do

begin

Sxi:=Sxi+xi[i];

Syi:=Syi+yi[i];

Sxxi:=Sxxi+xi[i]*xi[i];

Sxyi:=Sxyi+xi[i]*yi[i];

Sxxxi:=Sxxxi+xi[i]*xi[i]*xi[i];

Sxxxxi:=Sxxxxi+xi[i]*xi[i]*xi[i]*xi[i];

Sxxyi:=Sxxyi+xi[i]*xi[i]*yi[i];

Sxlnyi:=Sxlnyi+xi[i]*ln(yi[i]);

Slnyi:=Slnyi+ln(yi[i]);

end;

{ Расчет линейной апроксимации }

xcp:=Sxi/n;

ycp:=Syi/n;

Sro1:=0;

Sro2:=0;

Sro3:=0;

for i:=1 to n do

begin

Sro1:=Sro1+((xi[i]-xcp)*(yi[i]-ycp));

Sro2:=Sro2+sqr(xi[i]-xcp);

Sro3:=Sro3+sqr(yi[i]-ycp);

end;

ro:=Sro1/sqrt(Sro2*Sro3);

alyn2:=(n*Sxyi-Syi*Sxi)/(n*Sxxi-Sxi*Sxi);

alyn1:=(Syi-alyn2*Sxi)/n;

Soctl:=0;

Spolnl:=0;

for i:=1 to n do

begin

Soctl:=Soctl+sqr(yi[i]-(alyn1+(alyn2*xi[i])));

Spolnl:=Spolnl+(yi[i]-ycp)*(yi[i]-ycp);

end;

rrlyn:=1-(Soctl/Spolnl);

{ Оценка значимости коэффицентов линейной апроксимации }

Flyn:=rrlyn/(1-rrlyn)*(n-2);

Doctl:=Soctl/(n-2);

salyn1:=sqrt((Doctl*Sxxi)/(n*Sro2));

talyn1:=abs(alyn1)/salyn1;

salyn2:=sqrt(Doctl/Sro2);

talyn2:=abs(alyn2)/salyn2;

if Flyn>=FLynT then tlyn:= 'коэффицент значим'

else tlyn:= 'коэффицент не значим';

if talyn1>=tslyn then tlyn1:= 'коэффицент значим'

else tlyn1:= 'коэффицент не значим';

if talyn2>=tslyn then tlyn2:= 'коэффицент значим'

else tlyn2:= 'коэффицент не значим';

{ Расчет квадратичной апроксимации }

akvadr3:=(((n*Sxxyi-Syi*Sxxi)*(n*Sxxi-Sxi*Sxi)-(n*Sxyi-Syi*Sxi)*

(n*Sxxxi-Sxi*Sxxi)))/(((n*Sxxxxi-Sxxi*Sxxi)*(n*Sxxi-Sxi*Sxi)-

(n*Sxxxi-Sxxi*Sxi)*(n*Sxxxi-Sxxi*Sxi)));

akvadr2:=(n*Sxyi-(Syi*Sxi)-(akvadr3*(n*Sxxxi-(Sxxi*Sxi))))/(n*Sxxi-(Sxi*Sxi)

akvadr1:=(Syi-akvadr2*Sxi-akvadr3*Sxxi)/n;

Socts:=0;

Spolns:=0;

for i:=1 to n do

begin

Socts:=Socts+sqr(yi[i]-(akvadr1+akvadr2*xi[i]+akvadr3*xi[i]*xi[i]));

Spolns:=Spolns+sqr(yi[i]-ycp);

end;

rrkvadr:=1-(Socts/Spolns);

{ Оценка значимости коэффицентов квадратичной апроксимации }

Fkvadr:=rrkvadr/(1-rrkvadr)*((n-3)/2);

Docts:=Socts/(n-2);

sakvadr1:=sqrt((Docts*Sxxi)/(n*Sro2));

sakvadr2:=sqrt(Docts/Sro2);

sakvadr3:=0.3;

takvadr1:=abs(akvadr1)/sakvadr1;

takvadr2:=abs(akvadr2)/sakvadr2;

takvadr3:=abs(akvadr3)/sakvadr3;

if Fkvadr>=FKvadrT then tkvadr:= 'коэффицент значим'

else tkvadr:= 'коэффицент не значим';

if takvadr1>=tskvadr then tkvadr1:= 'коэффицент значим'

else tkvadr1:= 'коэффицент не значим';

if takvadr2>=tskvadr then tkvadr2:= 'коэффицент значим'

else tkvadr2:= 'коэффицент не значим';

if takvadr3>=tskvadr then tkvadr3:= 'коэффицент значим'

else tkvadr3:= 'коэффицент не значим';

{ Расчет экспоненциальной апроксимации }

aexp2:=(n*Sxlnyi-Sxi*Slnyi)/(n*Sxxi-Sxi*Sxi);

aexp1:=exp((Slnyi-aexp2*Sxi)/n);

Socte:=0;

Spolne:=0;

for i:=1 to n do

begin Socte:=Socte+sqr(yi[i]-(aexp1+aexp2*xi[i]));

Spolne:=Spolne+sqr(yi[i]-ycp);

end;

rrexp:=1-(Socte/Spolne);

{ Оценка значимости коэффицентов экспоненциальной апроксимации }

Fexp:=rrexp/(1-rrexp)*(n-2);

Docte:=Socte/(n-2);

saexp1:=sqrt((Docte*Sxxi)/(n*Sro2));

taexp1:=abs(aexp1)/saexp1;

saexp2:=sqrt(Docte/Sro2);

taexp2:=abs(aexp2)/saexp2;

if Fexp>=FExpT then texp:= 'коэффицент значим'

else texp:= 'коэффицент не значим';

if taexp1>=tsexp then texp1:= 'коэффицент значим'

else texp:= 'коэффицент не значим';

if taexp2>=tsexp then texp2:= 'коэффицент значим'

else texp2:= 'коэффицент не значим';

writeln(' Таблица результатов '); { Вывод результатов на экран и в файл D:\kurs }

writeln(MMM,' Таблица результатов ');

writeln(' Коэффициент корреляции (ro)= ',ro:50:4);

writeln(MMM,' ro ',ro:11:4);

writeln(' Коэффициент детерминированности лин.(rrlyn)= ',rrlyn:50:4,' ',tl

writeln(MMM,' rrlyn ',rrlyn:11:4,' ',tlyn);

writeln(' Коэффициент детерминированности квадр. (rrkvadr)= ',rrkvadr:50:4

writeln(MMM,' rrkvadr ',rrkvadr:10:4,' ',tkvadr);

writeln(' Коэффициент детерминированности эксп. (rrexp)= ',rrexp:50:4,' ',

writeln(MMM,' rrexp ',rrexp:11:46,' ',texp);

writeln(' xcp= ',xcp:50:4); writeln(MMM,' xcp ',xcp:11:4);

writeln(' ycp= ',ycp:50:4); writeln(MMM,' ycp ',ycp:11:4);

writeln(' alyn1= ',alyn1:11:4,' ',tlyn1); writeln(MMM,' alyn1 ',alyn1:11:

writeln(' alyn2= ',alyn2:11:4,' ',tlyn2); writeln(MMM,' alyn2 ',alyn2:11:

writeln(' akvadr1= ',akvadr1:11:4,' ',tkvadr1);

writeln(MMM,' akvadr1 ',akvadr1:11:4,' ',tkvadr1);

writeln(' akvadr2= ',akvadr2:11:4,' ',tkvadr2);

writeln(MMM,' akvadr2 ',akvadr2:11:4,' ',tkvadr2);

writeln(' akvadr3= ',akvadr3:11:4,' ',tkvadr3);

writeln(MMM,' akvadr3 ',akvadr3:11:4,' ',tkvadr3);

writeln(' aexp1= ',aexp1:11:4,' ',texp1);

writeln(MMM,' aexp1 ',aexp1:11:4,' ',texp1);

writeln(' aexp2= ',aexp2:11:4,' ',texp2);

writeln(MMM,' aexp2 ',aexp2:11:4,' ',texp2)

close(MMM); { Закрытие канала вывода МММ }

END.