
Инф Лабы Лукьянов / Образец отчёта ЛР2
.docxМинистерство образования и науки
Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра автоматизированных систем управления (АСУ)
ПРИБЛИЖЁННЫЕ ВЫЧИСЛЕНИЯ
Отчёт о лабораторной работе № 2
по дисциплине «Программирование»
Студент гр. 435-1
____________________ Нектов И.К.
«____» ______________ 2015 г.
Руководитель
Доцент каф. АСУ
___________________ Сибилёв В.Д.
«____» ______________ 2015 г.
Томск 2015
1 Тема и цель лабораторной работы
1.1 Тема: приближённые вычисления.
1.2 Цель: Написать и отладить программу на С, выполняющую табулиро-вание определённой индивидуальным заданием функции вещественной пере-менной. Алгоритм вычисления приближённого значения функции реализовать в виде отдельной программной единицы.
Индивидуальное задание 6. Написать функцию, возвращающую значение
|
(1) |
вычисленное
с заданной точностью .
Функцию протестировать в интервале [A,
B] с шагом r. Значения
в программу вводить с клавиатуры.
Результаты вычислений выводить в виде
таблицы.
2 Свойства ряда и расчётные формулы
2.1 Обозначим
Очевидно, для любого натурального n
при x0
слева и
при x0
справа.
Следовательно,
в точке x=0
функция y(x)
имеет разрыв второго рода. Функция имеет
две ветви. Для обеих ветвей ось Oy
является асимптотой. Правее асимптоты
функция положительна, т.е. правая ветвь
целиком лежит в I
четверти координатной плоскости и ось
Ox
её вторая асимптота. Левее асимптоты
Oy
ряд знакопеременный (знак слагаемого
зависит от номера n).
При этом для любого x
,
и для любого
n
монотонная функция x.
Любой конечный отрезок ряда при x<0
имеет отрицательное значение. Т.е., левая
ветвь функции y(x)
целиком лежит в III
четверти и ось Ox
её вторая асимптота.
2.2. При
x
> 0
все слагаемые ряда положительны, а при
x
< 0
ряд знакопеременный. Для любого значения
n
Следовательно,
Функция y(x)
не обладает свойством чётности/нечётности.
2.3 Получим
рекуррентные формулы для вычисления
значения функции. Обозначим
частичную сумму ряда:
Нетрудно видеть, что
Пусть
.
Получим
выражение для вычисления значения
.
Слагаемые ряда образуют рекуррентную последовательность
|
(3) |
|
(4) |
Формулы (2) – (4) определяют рекуррентную последовательность частичных сумм ряда, сходящуюся к значению функции y(x) в заданной точке x.
3 Вычисление значения ряда
3.1 Для вычисления значения функции y(x) воспользуемся рекуррентным алгоритмом вычисления значения бесконечной суммы с заданной точностью. Следует учесть, что при малых x значения y(x) могут оказаться недопустимо большими.
3.2 Алгоритм
Входные данные:
x – значение аргумента функции. Точка вещественной оси, в которой должно быть вычислено значение ряда;
eps – допустимая погрешность вычисления. 0 < eps < 1.
Выходные данные:
s – приближённое значение ряда. Вещественное.
Рабочие переменные:
a – значение очередного слагаемого. Вещественное.
n – счётчик слагаемых. Целое.
НАЧАЛО
1. Если значение x недопустимо мало, то выдать сообщение о недопус-тимом значении аргумента и завершить работу.
2. Положить a = 1/(3*x), s = a, n = 1.
3. Пока |a| > eps
НАЧ_Ц
a = a / (2*x*(2*n+3)*(n+1));
s = s+a;
n = n+1;
КОН_Ц
4. Возвратить значение s.
КОНЕЦ
3.3 Проверка алгоритма
Первый шаг гарантирует невозможность аварийного завершения программы. Разумно считать недопустимым значение |x| < eps.
При входе в цикл переменная s имеет значение первого слагаемого ряда. Если его абсолютное значение меньше eps, то тело цикла не исполняется и алгоритм завершается.
В противном случае вычисляется значение слагаемого: a = a/(2*x*5*2). Это выражение соответствует формуле (3) при n=1. Действительно, вычислено второе слагаемое.
В результате последней операция итерации переменная n принимает значение номера текущего слагаемого. Именно это значение должно использоваться на следующей итерации для вычисления значения очередного слагаемого. Таким образом, если на предыдущей итерации вычислено и добавлено к сумме значение n-того слагаемого, удовлетворяющее условию |a| > eps, то на очередной итерации будет вычислено и добавлено в сумму n+1 – ое слагаемое.
3.3 Реализация алгоритма на С
double series(double x, double eps)
{
if(fabs(x)<eps) return DBL_MAX; /// Недопустимо малое значение x.
double a, s;
s=a=1.0/(x+x+x); /// Операция + значительно короче операции *
x+=x; /// Избегаем вычисления 2*x на каждом шаге цикла
int n;
for(n=1; fabs(a)>eps; n++)
s += (a /= x*(2*n+3)*(n+1));
return s;
}
4 План тестирования
4.1 Цель тестирования
Убедиться в том, что для некоторых наборов допустимых значений переменной x наборы значений, возвращаемые функцией series() обладают свойствами, установленными в пп. 2.1, 2.2.
Таблица 4.1 – Требования к набору данных для тестирования
Свойства функции y(x) |
Свойства набора данных для тестирования series() |
Функция y(x) имеет разрыв второго рода в точке x = 0. |
Должен включать значения x(-, ), >0 достаточно малое |
y(x) имеет две ветви, лежащие в I и Ш четвертях. |
Должен включать достаточно боль-шие положительные и отрицательные значения x. |
Асимптотами ветвей являются оси координат. |
|
y(x) не обладает свойством чётности/нечётности. |
Должен включать положительные и отрицательные значения x, совпадаю-щие по абсолютной величине. |
Для любого положительного z верно |y(-z)| < y(z). |
4.2 Заключение
Для тестирования функции series() достаточно получить таблицу возвраща-емых ею значений в интервале [-B, B] где B положительное число порядка единиц.
5 Алгоритм табулирования
5.1 Требования
Алгоритм должен обеспечивать вычисление значений функции в заданном интервале значений аргумента с постоянным шагом. Вычисленные значения должны отображаться на устройстве вывода в виде таблицы следующего формата:
<значение аргумента> <значение функции>
5.2 Алгоритм
Входные данные: L, R – границы интервала табулирования, вещественные, L < R;
D – шаг табулирования, вещественная, D <= R – L;
Eps – допустимая погрешность вычисления значения функции, вещественная, 0 < Eps < 1.
Выходные данные: таблица значений функции.
Рабочие переменные: y – значение функции в текущей точке интервала [L, R].
x – текущее значение аргумента функции.
Предположение.
Существует подпрограмма-функция f(), возвращающая значение функции y(x). Подпрограмма возвращает максимальное значение типа данных, если значение аргумента недопустимо близко к нулю.
НАЧАЛО
1. Ввести значения L и R с проверкой условия L < R.
2. Ввести значение D с проверкой условия D <= R – L.
3. Ввести значение Eps с проверкой условия 0 < Eps < 1.
4. Напечатать заголовок таблицы.
5. Положить x=L.
5. Пока x <= R
НАЧ_Ц
Положить y = f(x, eps);
Если значение y равно максимальному значению типа данных,
то печатать в строке таблицы сообщение о разрыве.
Иначе печатать значение y.
Положить x=x+1.
КОН_Ц
КОНЕЦ
6 Программа табулирования
Листинг программы в соответствии с требованиями МУ.
7 Протокол тестирования
Скриншоты тестовых прогонов.
8 Выводы