Отчет по лабораторным работам по дисциплине Конструирование программ
Скачать 356.47 Kb.
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра Информационных Систем отчет по лабораторным работам по дисциплине «Конструирование программ»
Санкт-Петербург 2017 Лабораторная работа № 1. Определение абсолютной и относительной погрешностей приближенных чисел. Оценка погрешностей результатаПри проведении расчетов необходимо уметь практически оценивать погрешности ре- зультата. Разумная оценка погрешности позволяет удерживать оптимальное число знаков при вычислениях, оптимизируя трудоемкость расчетов. Абсолютная и относительная погрешности вычисляются непосредственно по формулам (1.2.1) и (1.2.2). Число верных знаков определяется в соответствии с теоремами 1-3 параграфа 1.2. Относительной погрешностью приближенного значения числа называется (1.2.2) Эта погрешность не зависит от масштаба величины единицы измерения. Непосредственное вычисление по формулам (1.2.1) и (1.2.2) невозможно, так как неизвестно. Часто задают величины верхние границы погрешностей и полагают (1.2.3) При записи приближенных чисел руководствуются следующими правилами. Пусть задано в виде конечной десятичной дроби . Значащими цифрами числа называются все цифры в его записи, начиная с первой ненулевой слева. Например, все значащие цифры подчеркнуты. Значащую цифру числа называют верной, если абсолютная погрешность числа не превосходит единицы разряда, соответствующего этой цифре. Задание № 1. Величина подъемной силы крыла самолета оценивается по формуле где - площадь проекции крыла на горизонтальную плоскость, - скорость натекания воздуха на крыло, - плотность атмосферы на заданной высоте, - угол атаки, отсчитываемый от направления нулевой подъемной силы, - коэффициент, зависящий от формы крыла. Требуется вычислить при заданных значениях и заданных абсолютных или относительных значениях этих величин. (В таблице 1 для нечетных вариантов задано , для четных . Задание_№_2.'>Задание № 2. Найти абсолютную погрешность вычисления функции при заданных значениях аргументов. 25.
Задание №1 #include #include using namespace std; double rnd(double num) { double rnd = 1; if (num >= 10) do { num /= 10; rnd /= 10; } while (num >= 10); else if (num < 1) { do { num *= 10; rnd *= 10; } while (num < 1); } return rnd; } int main() { double c, dc, da, p, dp, v, _v, s, ds, f, df, _f, rndf; int a; do { cout << "c = "; cin >> c; cout << "dc = "; cin >> dc; cout << "a = "; cin >> a; cout << "da = "; cin >> da; cout << "p = "; cin >> p; cout << "dp = "; cin >> dp; cout << "v = "; cin >> v; cout << "_v = "; cin >> _v; cout << "s = "; cin >> s; cout << "ds = "; cin >> ds; df = dc + da + dp + 2 * _v / v + ds; df = round(df * 10000) / 10000; f = c*a*p*v*v*s; _f = abs(f)*df; rndf = rnd(_f); _f = round(_f*rndf) / rndf; f = round(f*rndf) / rndf; cout << endl << "F = " << f << endl << "_F = " << _f << endl << "dF = " << df << endl; a = _getch(); } while (a != 27); return 0; } Задание №2 #include #include using namespace std; double sin(double a) { return a - (a*a*a) / 6 + (a*a*a*a*a) / 120 - (a*a*a*a*a*a*a) / 5040; } double func(double a, double b) { return sin(a*a*a) * sin((b + 1) / b); } double rnd(double num) { double rnd = 1; if (num >= 10) do { num /= 10; rnd /= 10; } while (num >= 10); else if (num < 1) { do { num *= 10; rnd *= 10; } while (num < 1); } return rnd; } int main() { double a, b, _a, _b, da, db, v, dv, _v, h = 0.01, rndv; do { cout << "a = "; cin >> a; cout << "_a = "; cin >> _a; cout << "b = "; cin >> b; cout << "_b = "; cin >> _b; da = _a / abs(a); db = _b / abs(b); v = func(a, b); dv = abs(a) * abs((func(a + h, b) - func(a - h, b)) / (2 * h))/ abs(v) *da + abs(b) * abs((func(a, b + h) - func(a, b - h)) / (2 * h))/ abs(v) *db; dv = round(dv * 10000) / 10000; _v = abs(v) * dv; rndv = rnd(_v); _v = round(_v * rndv) / rndv; v = round(v * rndv) / rndv; cout << "v = " << v << endl; cout << "dv = " << dv << endl; cout << "_v = " << _v << endl; a = _getch(); } while (a != 27); return 0; } |