- •Алгоритмічні мови та програмування Методичні вказівки
- •Алгоритмічні мови та програмування Методичні вказівки
- •03056, Київ, вул..Політехнічна, 12, корп. 17
- •Порядок виконання роботи
- •Загальні відомості для виконання лабораторної роботи
- •0X число (шістнадцяткове),
- •0 Число(число (вісімкове),
- •Результат виконання
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Додаток 1
- •Додаток 2
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Доступ до елемента масиву
- •Запис вектора у стовпець (рядок) масиву
- •Зміна стовпців масиву
- •Додаткові засоби
- •Теоретична частина
- •Порядок виконання роботи
- •Теоретична частина
- •Порядок виконання роботи
- •Додаток
- •Порядок виконання роботи
- •Результати виконання програми
- •Результати виконання програми
- •Порядок виконання роботи
- •Добирання формул за дослiдними даними згiдно методу найменших квадратiв
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Порядок виконання роботи
- •//Функція
- •//Динамічні масиви
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
Добирання формул за досл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
РОБОТА ІЗ ФАЙЛАМИ
Мета роботи :ознайомлення із способами встановлення текстових та бінарних файлів і способами запису /читання даних різного типу