Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая Аппроксимация Ляшик ТНГ-02 Вар.14.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
1.56 Mб
Скачать

5. Использование функции линейн.

5.1 Назначение функции линейн. Рассмотрим назначение функции линейн.

Эта функция использует метод наименьших квадратов, чтобы вычислить прямую линию, которая наилучшим образом аппроксимирует имеющиеся данные.

Функция возвращает массив, который описывает полученную прямую. Уравнение для прямой линии имеет следующий вид:

y=m1*x1 + m2*x2 + …b или y=m*x + b

где зависимое значение y является функцией независимого значения x. Значения m – это коэффициенты, соответствующие каждой независимой переменной x, а b – это постоянная. Заметим, что y,x и m могут быть векторами.

Функция ЛИНЕЙН возвращает массив {mn; mn-1; ….; m1 ; b}. ЛИНЕЙН может также возвращать дополнительную регрессионную статистику.

5.2 Получение числовых характеристик зависимости.

Для построения числовых характеристик создаем табличную формулу, которая будет занимать 5 строк и 2 столбца(см. таблицу 10).В этот интервал вводим функцию ЛИНЕЙН. Для этого была выполнена следующая последовательность действий:

  1. Выделяем область A58:B62.

  2. Вызываем Мастера функций.

  3. Выбираем функцию ЛИНЕЙН.

  4. Определяем аргументы функции:

    • В качестве изв_знач_x указываем B2:B16.

    • В качестве изв_знач_y указываем C2:C16.

    • Третье поле константа оставляем пустым.

    • В четвертом поле стат набираем истина.

  5. Нажимаем кнопку Закончить.

  6. Устанавливаем курсор в строку формул.

  7. Нажимаем комбинацию клавиш Ctrl + Shift + Enter, чтобы обеспечить ввод табличной формулы.

Результатом выполнения данных действий является таблица 10.

Таблица 10.

Поясним назначение некоторых величин, расположенных в таблице 10.

Величины расположенные в ячейках A58 и B58 характеризуют соответственно наклон и сдвиг.

А58 – коэффициент детерминированности.

А59 – F – наблюдаемое значение.

B60 – число степеней свободы.

A61 – регрессионная сумма квадратов.

B62 – остаточная сумма квадратов.

6 .Блок-схема.

Далее проверим свои вычисления с помощью программы написанной на языке Turbo Pascal, а для этого составим блок-схему:

Рис 5. Блок-схема.

Программа на языке Turbo Pascal.

program kursovik;

uses crt;

type mas_1=array[1..15] of real;

mas_2=array[1..3,1..3] of real;

mas_3=array[1..2,1..2] of real;

var f,f1:text;

apprLIN,

A1_apprLIN,

A2_apprLIN,

C_apprEXP,

A2_apprEXP:mas_3;

apprKVAD,

A1_apprKVAD,

A2_apprKVAD,

A3_apprKVAD:mas_2;

X,Y:mas_1;

i,j:byte;

A1LIN,A2LIN,

CEXP,A1EXP,A2EXP,

A1KVAD,A2KVAD,A3KVAD,

kor_lin, {коэффициент корреляции }

deter_lin, {коэф. детерминированности

линейной аппроксимации}

deter_kvad, {коэф. детерминированности

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

deter_exp, {коэф. детерминированности

экспоненциальная аппроксимация}

x2, {сумма квадратов х}

x3, {сумма кубов х}

x4, {сумма четвертых степеней х}

xy, {сумма произведений х на у}

x2y, {сумма произведений квадрата х на у}

lny, {сумма логарифмов у }

xlny, {сумма произведений х на логарифм у}

xsum, {сумма х}

ysum, {сумма у}

xsr, {среднее значение х}

ysr, {среднее значение у}

S1, {(x_i-x)*(y_i-y)}

S2, {(x_i-x)^2}

S3, {(y_i-y)^2}

LIN, {лин}

KVAD, {квадрат}

EXPON:real; {экспоненц}

{ функция возведения в целую степень }

function stepen(chislo:real;pokazat:integer):real;

var result:real;

istep:byte;

begin

result:=1;

for istep:=1 to pokazat do

result:=result*chislo;

stepen:=result;

end;

{ функция, возращающая значение опредилителя 2-ого порядка}

function det_2(mat:mas_3): real;

var result:real;

begin

result:=mat[1,1]*mat[2,2]-mat[1,2]*mat[2,1];

det_2:=result;

end;

{ функция, возращающая значение опредилителя 3-его порядка}

function det_3(mat:mas_2):real;

var M_d:mas_3; {минор элемента ij}

k_det3,i0_det3,j0_det3,j_det3:byte;

result:real;

begin

result:=0;

for j_det3:=1 to 3 do

begin

for i0_det3:=1 to 2 do

begin

k_det3:=0;

for j0_det3:=1 to 2 do

begin

if j_det3=j0_det3 then k_det3:=1;

M_d[i0_det3,j0_det3]:=mat[i0_det3+1,j0_det3+k_det3];

end;

end;

result:=stepen(-1,1+j_det3)*det_2(M_d)*mat[1,j_det3]+result;

end;

det_3:=result;

end;

{{{{{{ОСНОВНАЯ ПРОГРАММА}

begin

{ чтение исходных данных из файла }

assign(f,'parametr.txt');

reset(f);

readln(f);

for i:=1 to 15 do readln(f,x[i],y[i]);

close(f);

{ вычисление необходимых в расчетах параметров}

xsum:=0;ysum:=0;x2:=0;x3:=0;x4:=0;xy:=0;x2y:=0;

for i:=1 to 15 do

begin

x2:=x2+((X[i])*(X[i])); {сумма квадратов х}

x3:=x3+((X[i])*(X[i])*(X[i])); {сумма кубов х}

x4:=x4+((X[i])*(X[i])*(X[i])*(X[i])); {сумма четвертых степеней х}

xy:=xy+X[i]*Y[i]; {сумма произведений х на у}

x2y:=x2y+((X[i])*(X[i])*Y[i]); {сумма произведений квадрата х на у}

lny:=lny+ln(Y[i]); {сумма логарифмов у }

xlny:=xlny+X[i]*ln(Y[i]); {сумма произведений х на логарифм у}

xsum:=xsum+X[i];

ysum:=ysum+Y[i];

end;

xsr:=xsum/15; {среднее значение х}

ysr:=ysum/15; {среднее значение у}

{ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТОВ ПРОИЗВОДИТЬСЯ ПО ФОРМУЛЕ КРАМЕРА}

{ЛИНЕЙНАЯ АППРОКСИМАЦИЯ}

apprLIN[1,1]:=15; {матрица коэффициентов}

apprLIN[1,2]:=xsum;

apprLIN[2,1]:=xsum;

apprLIN[2,2]:=x2;

A1_apprLIN:=apprLIN;

A1_apprLIN[1,1]:=ysum;

A1_apprLIN[2,1]:=xy;

A2_apprLIN:=apprLIN;

A2_apprLIN[1,2]:=ysum;

A2_apprLIN[2,2]:=xy;

A1LIN:=det_2(A1_apprLIN)/det_2(apprLIN);

A2LIN:=det_2(A2_apprLIN)/det_2(apprLIN);

{КВАДРАТИЧНАЯ АППРОКСИМАЦИЯ}

apprKVAD[1,1]:=15; {матрица коэффициентов}

apprKVAD[1,2]:=xsum;

apprKVAD[1,3]:=x2;

apprKVAD[2,1]:=xsum;

apprKVAD[2,2]:=x2;

apprKVAD[2,3]:=x3;

apprKVAD[3,1]:=x2;

apprKVAD[3,2]:=x3;

apprKVAD[3,3]:=x4;

A1_apprKVAD:=apprKVAD;

A1_apprKVAD[1,1]:=ysum;

A1_apprKVAD[2,1]:=xy;

A1_apprKVAD[3,1]:=x2y;

A2_apprKVAD:=apprKVAD;

A2_apprKVAD[1,2]:=ysum;

A2_apprKVAD[2,2]:=xy;

A2_apprKVAD[3,2]:=x2y;

A3_apprKVAD:=apprKVAD;

A3_apprKVAD[1,3]:=ysum;

A3_apprKVAD[2,3]:=xy;

A3_apprKVAD[3,3]:=x2y;

A1KVAD:=det_3(A1_apprKVAD)/det_3(apprKVAD);

A2KVAD:=det_3(A2_apprKVAD)/det_3(apprKVAD);

A3KVAD:=det_3(A3_apprKVAD)/det_3(apprKVAD);

{ЭКСПОНЕНЦИАЛЬНАЯ АППРОКСИМАЦИЯ}

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

при линейной аппроксимации}

C_apprEXP:=apprLIN;

C_apprEXP[1,1]:=lny;

C_apprEXP[2,1]:=xlny;

A2_apprEXP:=apprLIN;

A2_apprEXP[1,2]:=lny;

A2_apprEXP[2,2]:=xlny;

CEXP:=det_2(C_apprEXP)/det_2(apprLIN);

A2EXP:=det_2(A2_apprEXP)/det_2(apprLIN);

A1EXP:=exp(CEXP);

{ коэффициент корреляции }

for i:=1 to 15 do

begin

S1:=S1+(X[i]-xsr)*(Y[i]-ysr);

S2:=S2+stepen((X[i]-xsr),2);

S3:=S3+stepen((Y[i]-ysr),2);

end;

kor_lin:=S1/(sqrt(S2)*sqrt(S3));

{ коэффициент детерминированности}

for i:=1 to 15 do

begin

LIN:=LIN+sqr(A1LIN+A2LIN*X[i]-Y[i]);

KVAD:=KVAD+sqr(A1KVAD+A2KVAD*X[i]+A3KVAD*stepen(X[i],2)-Y[i]);

EXPON:=EXPON+sqr(A1EXP*exp(A2EXP*X[i])-Y[i]);

end;

deter_lin:=1-LIN/S3; {линейная аппроксииация}

deter_kvad:=1-KVAD/S3;{квадратичная аппроксимация}

deter_exp:=1-EXPON/S3; {экспоненциальная аппроксимация}

{ВЫВОД РЕЗУЛЬТАТОВ}

clrscr;

writeln('ЛИНЕЙНАЯ АППРОКСИМАЦИЯ');

writeln(' 1.коэффициенты:');

writeln(' A1=',A1LIN:10:5);

writeln(' A2=',A2LIN:10:5);

writeln(' 2.коэф. корреляции:',kor_lin:10:5);

writeln(' 3.коэф. детерминированности:',deter_lin:10:6);

writeln;

{}

writeln('КВАДРАТИЧНАЯ АППРОКСИМАЦИЯ');

writeln(' 1.коэффициенты:');

writeln(' A1=',A1KVAD:10:5);

writeln(' A2=',A2KVAD:10:5);

writeln(' A3=',A3KVAD:10:5);

writeln(' 2.коэф. детерминированности:',deter_kvad:10:5);

writeln;

{}

writeln('ЭКСПОНЕНЦИАЛЬНАЯ АППРОКСИМАЦИЯ');

writeln(' 1.коэффициенты:');

writeln(' A1=',A1EXP:10:5);

writeln(' C= ',CEXP:10:5);

writeln(' A2=',A2EXP:10:5);

writeln(' 2.коэф. детерминированности:',deter_exp:10:5);

writeln;

{ вывод результатов в файл}

assign(f1,'pararez.txt');

rewrite(f1);

writeln(f1,'ЛИНЕЙНАЯ АППРОКСИМАЦИЯ');

writeln(f1,' 1.коэффициенты:');

writeln(f1,' A1=',A1LIN:10:5);

writeln(f1,' A2=',A2LIN:10:5);

writeln(f1,' 2.коэф. корреляции:',kor_lin:10:5);

writeln(f1,' 3.коэф. детерминированности:',deter_lin:10:5);

writeln(f1);

{}

writeln(f1,'КВАДРАТИЧНАЯ АППРОКСИМАЦИЯ');

writeln(f1,' 1.коэффициенты:');

writeln(f1,' A1=',A1KVAD:10:5);

writeln(f1,' A2=',A2KVAD:10:5);

writeln(f1,' A3=',A3KVAD:10:5);

writeln(f1,' 2.коэф. детерминированности:',deter_kvad:10:5);

writeln(f1);

{}

writeln(f1,'ЭКСПОНЕНЦИАЛЬНАЯ АППРОКСИМАЦИЯ');

writeln(f1,' 1.коэффициенты:');

writeln(f1,' A1=',A1EXP:10:5);

writeln(f1,' C=',CEXP:10:5);

writeln(f1,' A2=',A2EXP:10:5);

writeln(f1,' 2.коэф. детерминированности:',deter_exp:10:5);

writeln(f1);

close(f1);

end.