Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Инф Лабы Лукьянов / Образец отчёта ЛР2

.docx
Скачиваний:
16
Добавлен:
13.12.2016
Размер:
45.93 Кб
Скачать

Министерство образования и науки

Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра автоматизированных систем управления (АСУ)

ПРИБЛИЖЁННЫЕ ВЫЧИСЛЕНИЯ

Отчёт о лабораторной работе № 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 <= RL;

Eps – допустимая погрешность вычисления значения функции, вещественная, 0 < Eps < 1.

Выходные данные: таблица значений функции.

Рабочие переменные: y – значение функции в текущей точке интервала [L, R].

x – текущее значение аргумента функции.

Предположение.

Существует подпрограмма-функция f(), возвращающая значение функции y(x). Подпрограмма возвращает максимальное значение типа данных, если значение аргумента недопустимо близко к нулю.

НАЧАЛО

1. Ввести значения L и R с проверкой условия L < R.

2. Ввести значение D с проверкой условия D <= RL.

3. Ввести значение Eps с проверкой условия 0 < Eps < 1.

4. Напечатать заголовок таблицы.

5. Положить x=L.

5. Пока x <= R

НАЧ_Ц

Положить y = f(x, eps);

Если значение y равно максимальному значению типа данных,

то печатать в строке таблицы сообщение о разрыве.

Иначе печатать значение y.

Положить x=x+1.

КОН_Ц

КОНЕЦ

6 Программа табулирования

Листинг программы в соответствии с требованиями МУ.

7 Протокол тестирования

Скриншоты тестовых прогонов.

8 Выводы

Соседние файлы в папке Инф Лабы Лукьянов