Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сука лаби.docx
Скачиваний:
17
Добавлен:
12.05.2015
Размер:
848.39 Кб
Скачать

Добирання формул за дослiдними даними згiдно методу найменших квадратiв

При математичнiй обробцi експериментальних даних може виникнути задача добирання емпiричної формули. У таких випадках найчастiше задаються виглядом формули, а потiм, використовуючи результати дослiдiв, визначають значення рiзних постiйних величин, якi входять до формули.

Рис.14.1

Розглянемо приклад.

Припустимо, що y пропорцiйний x, тобто y = k*x (рис. 14.1). За мiру вiдхилення функцiї вiд експериментальних даних для i-ого дослiду вибираємо величину (yi -k*xi)2. Мiрою загальної помилки S у опису дослiдних даних функцiєю y=k*x може правити сума мiр вiдхилень для усiх дослiдiв , тобто

Метод визначення констант, якi входять до формули, на вимогу, щоб загальне вiдхилення S було найменшим, називається методом найменших квадратiв.

Визначимо те значення k, для якого S мiнiмально :

У випадку добирання функцiї у виглядi y=k *x + b за методом найменших квадратiв отримаємо:

Для кращого наближення на окресленiй дiлянцi вводяться ваговi коефiцiєнти i:

Подальшi викладки для y = k * x + b провести самостiйно. Для розрахункiв і брати у межах 0.5 < і <15.

ДОДАТОК 2

Створити два вектори ,коефіцієнти k і b розраховуються у С програмі ,

у меню Insert вибрати Graph , у якому вибрати X-Y Plot і отримати шаблон графіка .Заповнити шаблон необхідною інформацією ,наприклад , для осі ординат задати y, k*x + b .

two vectors x i y

line's coefficients k i b

Скорочений запис виразів

Для форматування графіка треба двічі тицьнути на ньому лівою мишкою і увійти у вікно Formatting Currently Selected X-Y Plot .У меню Traces для Symbol задати жирну крапку , для Type задати points для експериментальних даних . Для апроксимуючої прямої встановити суцільну лінію : у Line тип лінії , у Line Weight ширину лінії , у Type liners (лінії) .

ДОДАТОК 3

Програма (файл lab12gra.cpp)

/*Виведення графiкiв для роботи 12*/

#include <iostream.h>

#include <stdlib.h>

#include <graphics.h>

#include <conio.h>

#define n 10

#define m 4

//Виведення таблицi iз позначеннями осей

void grtab(int x1, int y1, int x2, int y2, int xt, int yt, float XM, float YM)

{

int dx, dy, x, y, i;

dx = (x2 - x1) / xt; dy = (y2 - y1) / yt;

setlinestyle (SOLID_LINE, 0, THICK_WIDTH);

setcolor (8); x2 = x1 + dx*xt; y2 = y1 + dy*yt;

rectangle (x1, y1, x2, y2);

setlinestyle (SOLID_LINE, 0 ,NORM_WIDTH);

y = y1 + dy;

for(i = 1; i < yt; i++)

{

line(x1, y, x2, y); y += dy;

}

x = x1 + dx;

for(i = 1; i < xt; i ++)

{

line(x, y1 ,x ,y2); x += dx;

}

char c1[5]; float a, b = 0;

/* горизонтальна шкала*/

settextjustify (LEFT_TEXT, TOP_TEXT);

settextstyle (SMALL_FONT, HORIZ_DIR, 4);

x = x1 - 3; y = y2 + 3; a = XM/xt; setcolor(9);

for(i = 0;i < xt; i ++)

{

gcvt(b, 4, c1); outtextxy (x, y, c1);

x += dx; b += a;

}

/* вертикальна шкала*/

settextjustify (RIGHT_TEXT, BOTTOM_TEXT);

x = x1 - 8; y = y1 + dy; a=YM/yt; b = YM - a;

for(i = yt - 1; i >= 0 ; i--)

{

gcvt(b, 4, c1); outtextxy (x, y,c1);

y + = dy; b -= a;

}

/*позначення осей*/

settextstyle (2, 0, 6);

settextjustify (LEFT_TEXT, TOP_TEXT);

outtextxy (x2, y2, "X");

settextjustify (RIGHT_TEXT, TOP_TEXT);

outtextxy (x1 - 8, y1 - 10, "Y");

settextjustify (0, 2);

outtextxy (x1 + 32, y1 + 32, "Y = K*X + B");

}

/*Функцiя виведення графiка функцii*/

void grfun (int x1, int y1, int x2, int y2, float XM,\

float YM, float X[], float Y[], float k[], float b[])

{ int x, y, i, j; float mx, my, xx, yy;

mx = (x2-x1)/XM; my = (y2-y1)/YM; //розрахунок масштабiв

setfillstyle (1,BLUE);

for(i = 0; i < n; i ++)

{

x = x1 + X[i]*mx;

y = y2 - Y[i]*my; fillellipse(x, y, 3, 3);

}

for(j = 0; j < m; j ++)

{

moveto(x1, y2 - my*b[j]); setcolor(j+1);

for(xx = X[0]; xx <= X[n-1]; xx += 0.05)

{

yy = b[j] + k[j]*xx;

x = x1 + xx*mx; y = y2 - yy*my;/*перетворення систем координат*/

lineto(x,y);

}

}

}

int main()

{

int driver, mode, i, xm, ym, smx, smy, x1, x2, y1, y2;

int xt, yt, dspx, dspy, xasp, yasp, x;

float X[n], Y[n], b[m], k[m], XM, YM;

clrscr();

cout << "\n Введiть масив x= ";

for (i = 0; i < n; i ++) cin >> X[i];

cout << "\n Введiть масив y= ";

for (i = 0;i < n; i ++) cin >> Y[i];

driver=DETECT;

initgraph(&driver,&mode, "k:\\bc\\bgi");

xm = getmaxx(); smx = xm + 1; ym = getmaxy(); smy = ym + 1;

dspx = smx/8; dspy = smy/8;

x1 = dspx; y1 = dspy; x2 = smx - dspx; y2 = smy - 2*dspy;

restorecrtmode();

cout << "\n Введiть кiлькостi рядкiв xt та стовпцiв yt для таблицi ";

cin >> xt >> yt;

сout << "\n Введiть найбiльшi значення xmax та ymax для таблицi ";

cin >> XM >> YM;

cout << "\n Введiть масив b = ";

for(i = 0;i < m; i ++) cin >> b[i];

cout << "\n Введiть масив k = ";

for(i = 0; i < m; i ++) cin >> k[i];

setgraphmode(mode);

setbkcolor(15);

//виклик функцій

grtab(x1,y1,x2,y2,xt,yt,XM,YM);

grfun(x1,y1,x2,y2,XM,YM,X,Y,k,b); getch();

closegraph(); return 0;

}

Лабораторна робота №15

РОБОТА ІЗ ФАЙЛАМИ

Мета роботи :ознайомлення із способами встановлення текстових та бінарних файлів і способами запису /читання даних різного типу