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

Ответы по информатике / табулирование

.doc
Скачиваний:
17
Добавлен:
02.05.2014
Размер:
88.06 Кб
Скачать

Задание №1. Табулирование математических функций

ВНИМАНИЕ! Вариант задания соответствует номеру ПК, за которым выполняется лабораторная работа

Задание

Разработать программу табулирования функции y=f(x). Результаты расчетов проверить с помощью MS Excel.

Варианты задачи:

Вариант

Функция

Интервал табулирования

Шаг табулирования

1

x=[2; 3]

h=0.1

2

x=[0; 2]

h=0.2

3

x=[0; 0.85]

h=0.05

4

x=[1; 2]

h=0.1

5

x=[1.2; 2]

h=0.1

6

x=[0; 1]

h=0.1

7

x=[0.5; 1]

h=0.05

8

x=[0; 1]

h=0.1

9

x=[0.4; 1]

h=0.05

10

x=[0.2; 1]

h=0.05

11

x=[0; 1]

h=0.1

12

x=[2; 3]

h=0.1

Пример решения задачи:

Для начала разработаем блок-схему алгоритма решения задачи. Среди возможных вариантов наиболее предпочтительными являются три варианта, основанные на использовании различных циклических конструкций, а именно: цикл с параметром (рис.1a), цикл с предварительным условием (рис.1б), и цикл с постусловием(рис.1в).

а)

б)

в)

Рис. 1. Варианты алгоритмов решения задачи

Реализуем один из них в виде программы на языке С++. В качестве функции зададим зависимость f(x)=X^2-2*X+1,

Рис.2. Код программы на языке С

Проведем проверку работоспособности: зададим границы интервала a=1, b=3 и шаг табулирования h=0.2.

Рис. 3. Окно выполнения программы

При налализе работы программы мы увидим, что правая граница диапазона 3 не попала в область табулирования. Причину этого можно понять, внимательно рассмотрев результат вычисления функции на предыдущем шаге. Вместо ожидаемого результата 3,24 мы получили величину f(x)=3.240002. Это произошло потому, что величина X вычисляется как a+n*h, где n - номер шага табулирования. Поскольку велчина шага h в двоичном представлении принимает вид более длинный, нежели его десятичное представление, видимо часть двоичных знаков, слабо влияющая на относительную погрешность вычислений была отброшена. Тем не менее этой погрешности хватило для того, чтобы x=a+10*h было больше величины правого края диапазона табулирования. И не смотря на правильно с математической точки зрения разработанный алгоритм, практическая его реализация за счет дискретной формы представления дробных чисел приводит к неправильному результату.

Возможны несколько способов решения этой проблемы. Первый способ - увеличение точности вычислений, за счет применения вместо типа переменной float типа, имеющего более высокую точность представления - double. Код программы в этом случае будет выглядеть так:

Рис.4. Улучшенный код программы на языке С

Рис. 5. Результат выполнения модифицированной программы

В данном примере требуемый результат достигнут, однако возможны случаи, когда увеличения точности вычислений за счет увеличения точности представления дробных данных в ПК окажется недостаточным. В этом случае можно применить некоторую доработку, заключающуюся в оценке погрешности вычислений. Будет выглядеть это так:

Рис. 7. Результат выполнения программы с доработанным алгоритмом

Последний приведенный алгоритм рассмотрен как альтернативное решение по отношению к увеличению точности хранимых значений. Однако, в реальной практике, эти два способа могут дополнять друг друга.