Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Теоретична частина роботи

 

1.1 Загальні відомості

Лінійна апроксімація (многочленами) має вигляд:

Метод найменших квадратів (МНК) для функцій заданих таблицею значень

.......
......

Матричне зображення:

 

;

 

; ;

;

 

 

1.2 Розрахункові формули:

, де

; ; невідомих коефіцієнтів

2 Практична частина роботи:

 

2.1 Схема розрахунку:

головна програма

 

       
 
 
   

 

 


2.2 Текст програми

 

Лістинг 1 – файл dannie.PAS

 

UNIT dannie;

 

INTERFACE

uses matr_and_vekt_operations;

 

procedure Trancp_matrici(mas: massiv; var mas_result: massiv; m, n: integer);

procedure Readvektors_s_faila(fpath: string; var vect: vector; var t: integer);

procedure Vivod_vektors(vect: vector; t: integer);

procedure Vivod_matrici(mas: massiv; m, n: integer);

procedure Umnoj_dvuh_matric(mas, masb: massiv; var mas_result: massiv; m, n: integer);

procedure Umjen_vektora_na_matricu(mas: massiv; vect: vector; var vect_result: vector; m, n: integer);

 

IMPLEMENTATION

 

procedure Readvektors_s_faila(fpath: string; var vect: vector; var t: integer);

var f: text; g: integer;

begin

assign(f, fpath);

reset(f);

readln(f, t);

for g: =1 to t do

read(f, vect[g]);

close(f);

end;

 

procedure Vivod_vektors(vect: vector; t: integer);

var g: integer;

begin

for g: =1 to t do

write(vect[g]: 7: 4, ' ');

writeln;

end;

 

procedure Vivod_matrici(mas: massiv; m, n: integer);

var i, j: integer;

begin

for i: =1 to n do

begin

for j: =1 to m do

write(mas[i, j]: 7: 4, ' ');

writeln;

 

end;

end;

 

procedure Umnoj_dvuh_matric(mas, masb: massiv; var mas_result: massiv; m, n: integer);

var i, j, k: integer;

sum: real;

begin

for i: =1 to n do

for k: =1 to n do

begin

sum: =0;

for j: =1 to m do

sum: =sum+(mas[k, j]*masb[j, i]);

mas_result[i, k]: =sum;

end;

end;

 

procedure Trancp_matrici(mas: massiv; var mas_result: massiv; m, n: integer);

var i, j: integer;

begin

for i: =1 to m do

for j: =1 to n do

mas_result[j, i]: =mas[i, j];

end;

 

procedure Umjen_vektora_na_matricu(mas: massiv; vect: vector; var vect_result: vector; m, n: integer);

var i, j: integer;

begin

for i: =1 to n do

begin

vect_result[i]: =0;

for j: =1 to m do

vect_result[i]: =vect_result[i]+(mas[i, j]*vect[j]);

end;

end;

 

END.

 

 
 

 

 


Лістинг 2 – файл zapisX.PAS

 

UNIT zapisX;

 

INTERFACE

uses matr_and_vekt_operations, dannie;

procedure fun(var mas: massiv; vect: vector; t, n: integer);

 

IMPLEMENTATION

 

procedure fun(var mas: massiv; vect: vector; t, n: integer);

var i, j: integer;

begin

for i: =1 to t do

begin

mas[i, 1]: =1;

for j: =2 to n+1 do

mas[i, j]: =mas[i, j-1]*vect[i];

end;

end;

 

 

END.

 

 

       
   
 
 

 

 


Лістинг 3 – файл Gaus.PAS

 

Unit Gaus;

interface

uses matr_and_vekt_operations, dannie;

const ebs = 0.05;

procedure doGaus(d: integer; mas: massiv; b: vector; var x: vector);

 

implementation

 

procedure doGaus(d: integer; mas: massiv; b: vector; var x: vector);

var i, j, k, kmax: integer;

amax, c: real;

error: boolean;

xk: vector;

begin

for k: =1 to d do

begin

error: =true;

amax: =abs(mas[k, k]);

kmax: =k;

for i: =k+1 to d do

if (abs(mas[i, k])) > amax then

begin

amax: =abs(mas[i, k]);

kmax: =i;

end;

if (amax< ebs) then

error: =false

else

begin

if kmax < > k then

begin

for i: =k to d do

begin

c: =mas[kmax, i];

mas[kmax, i]: =mas[k, i];

mas[k, i]: =c;

end;

c: =b[kmax];

b[kmax]: =b[k];

b[k]: =c;

end;

amax: =mas[k, k];

for j: =k to d do

mas[k, j]: =mas[k, j]/amax;

b[k]: =b[k]/amax;

for i: =k+1 to d do

begin

amax: =mas[i, k];

 

for j: =k+1 to d do

mas[i, j]: =mas[i, j]-mas[k, j]*amax;

mas[i, k]: =0;

b[i]: =b[i]-b[k]*amax;

end;

end;

end;

if error=true then

begin

for k: =d downto 1 do

begin

xk[k]: =b[k];

for i: =k+1 to d do

xk[k]: =xk[k]-mas[k, i]*x[i];

x[k]: =xk[k];

end;

end

else

writeln('!!! OshibkA!!! ');

end;

end.

 

Лістинг 4 – файл lab1_5S.PAS

 

Program lab1;

uses crt, dannie, matr_and_vekt_operations, zapisX, gaus;

const n=7; {stepen polinoma, na4inaya s 0}

var x, y, b, a, f, r: vector; t, i, j: integer;

masx, masxtr, masa: massiv;

s, yapr, eps: real;

 

Begin

clrscr;

Readvektors_s_faila('xi.txt', x, t);

Readvektors_s_faila('yi.txt', y, t);

fun(masx, x, t, n);

Trancp_matrici(masx, masxtr, t, n+1);

Umnoj_dvuh_matric(masxtr, masx, masa, t, n+1);

Umjen_vektora_na_matricu(masxtr, y, b, t, n+1);

doGaus(n+1, masa, b, a);

for i: =1 to t do

begin

f[i]: =a[1];

for j: =2 to n+1 do

f[i]: =f[i]+(a[j]*exp((j-1)*ln(x[i])));

r[i]: =abs((y[i]-f[i])*100/y[i]);

end;

writeln('|-------------------------------------------------------|');

writeln('| num | xi | yi | ai | yAPR | OTNeps % |');

writeln('|-------------------------------------------------------|');

for i: =1 to t do

writeln('| ', i: 2, ' ', x[i]: 7: 4, ' ', y[i]: 7: 4, ' ', a[i]: 7: 4, ' ', f[i]: 7: 4, ' ', r[i]: 7: 4, ' |');

writeln('|-------------------------------------------------------|');

s: =0;

for i: =1 to t do

s: =s+sqr(abs(y[i]-f[i]));

eps: =sqrt(s/t)*100;

writeln;

writeln('Srednyaya kvadrati4eskaya pogreshnosT = ', eps: 7: 4, ' %');

readln;

End.

 

2.3 Результати виконання програми:

 

В результаті виконання програми отримані наступні результати:

 

 

При цьому функція має вигляд:

 

<== предыдущая лекция | следующая лекция ==>
Исключения | Урок 6. Еловая ветка
Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.028 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал