МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИНАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Інститут ІКНІКафедра АСУ
ЗВІТ
До лабораторної роботи № 1На тему: «Абсолютна та відносна похибка»З дисципліни: «Чисельні методи»
Мета роботи: вивчити поняття абсолютної та відносної похибки та методи їх оцінювання.
Варіант № 3
F = 3x12 + 2x22 + 4x32 + 3x1x2 - 2x2 +sin( x1 – x3 *x2 );
Оцінити абсолютну та відносну похибку обчислення величини F при умові
А) заданих точних цифр введених значень величин аргументів x1 , x2 , x3
Б) заданих значеннях величин аргументів x1 , x2 , x3 з похибкою
=N*10- 3, де N–номер студента у журналі старости.
В) провести обчислення для серії даних на проміжку довжиною N з кроком h=N*10-1 та зміни похибки за законом = N*10-(3+h). Привести графік зміни похибки у залежності від зміни похибки початкових даних
Г) зробити висновки
Протокол виконання
/
Алгоритм знаходження похибок
А) Для знаходження похибок аргументів використовується формула
δ ≤ ,
де ат – перша значуща цифра числа а; n – к-ть точних десяткових знаків
Б) Для знаходження похибок величини F потрібно використати наступні формули, щоб знайти абсолютні похибки піднесення в степінь, множення та експоненти, знайти їх суму і отримати абсолютну похибку величини F.
∆u= mxm - 1∆x, де m – степінь
А = (х1 + ∆ х1 ) (х2 + ∆ х2) ... (хп + ∆хп); u = х1х2… хn | ∆u | = | А – u|
В) Використовуючи алгоритм з попреднього пункту отримаємо дані, змінюючи похибку X.
Код програми
#include <iostream>
#include <math.h>
#include <windows.h>
const double x1 = 2.54;
const int x2 = 5;
const int x3 = 6;
const int N = 3;
using namespace std;
double A_pow(double x, int st, double A_x);
double A_mnoj(double x, double y, double A_x);
double A_fank(double x, double y, double A_x);
void Problem(double A_x);
int main(void)
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i;
double A_x, F, F_A, F_V, h;
A_x = 0.006; // абсолютна похибка
cout << "\n\n\"Початкова похибка(без зміни) та з похибкою = " << A_x << "\"\n";
Problem (A_x);
for (i = 1;i <= N;i++) {
h = (i)*0.1;
A_x = N * pow(10, -(3 + h));
cout << "\n\n\"Крок <" << i << "> з похибкою = " << A_x << "\"\n";
Problem (A_x);
}
cout << endl;
system("pause");
return 0;
}
void Problem(double A_x) {
double F, F_A, F_V;
F = (3 * pow(x1, 2)) + (2 * pow(x2, 2)) + (4 * pow(x3, 2)) + (3 * x1 * x2) - (2 * x2) + sin(x1 – x2*x3);
F_A = ((4 * A_pow(x1, 2, A_x)) + (5 * A_pow(x2, 2, A_x)) + (4 * A_pow(x3, 2, A_x)) + (3 * A_mnoj(x1, x2, A_x)) - (2 * A_x) + A_fank(x1, -x2*x3, A_x));
F_V = F_A / F;
cout << "\nF = " << F << "\n"
<< "\n\n Абсолютна похибка функції = " << F_A
<< "\n Відносна похибка функції = " << F_V;
}
double A_pow(double x, int st, double A_x) {
return st * pow(x, st - 1)*A_x;
}
double A_mnoj(double x, double y, double A_x) {
double A, u;
A = ((x + A_x)*(y + A_x));
u = x * y;
return fabs(A - u);
}
double A_fank(double x, double y, double A_x) {
double pohidna1, pohidna2;
pohidna1 = (fabs(cos(x - y))*A_x);
pohidna2 = (fabs(cos(x - y) - 1)*A_x);
return pohidna1 + pohidna2;
}
Висновки
Під час виконання лабораторної роботи вивчено поняття абсолютної та відносної похибки та методи їх оцінювання. На основі отриманих результатів можна зробити висновок, що із збільшенням величини N, тобто зменшенням абсолютної похибки точність вимірювань збільшується.