Решение серьезной инженерной задачи с использованием ЭВМ – достаточно длительный и сложный процесс. С определенной степенью условности его можно разбить на ряд последовательных этапов.
1. Постановка проблемы. Первоначально прикладная задача бывает сформулирована в слишком общем или расплывчатом виде: исследовать данное явление, спроектировать устройство, обладающее заданными свойствами, спрогнозировать поведение данного объекта и т.п. На первом этапе происходит конкретизация постановки задачи, формулируется цель исследования, так, чтобы найденное решение было полезным и в то же время могло быть получено с помощью существующих методов и в реальные сроки.
2. Выбор известной или построение новой математической модели, описывающей исследуемый объект или явление. Цель исследования ставит задачу словесно, или неформально. Для решения же задачи с помощью ЭВМ необходимо дать ее формализованное описание на языке математики, с помощью формул, графиков или иных математических объектов. Такое формализованное описание называют математической моделью объекта.
В качестве примера можно привести любую школьную задачу по математике. Обычно такие задачи имеют два вида: прикладные задачи, формулируемые словесно (бригада рабочих копает яму, один рабочий может вырыть яму за 15 дней и т.д.) и числовые примеры (решить уже составленное уравнение, преобразовать выражение и т.п.). Задачи второго вида сформулированы математически, т.е. для них уже имеется модель (которая, возможно, что-то описывает) и надо выполнить определенные действия с этой моделью. В задачах же первого вида модель еще предстоит построить, т.е. что-то надо обозначить за х или у, составить одно или несколько уравнений, которые затем требуется решить. Процесс составления подобных соотношений, т.е. модели, и составляет содержание данного этапа.
Часто имеется возможность выбора подходящей модели среди известных и принятых для описания соответствующих процессов, но нередко требуется и существенная модификация известной модели, а иногда необходимо создание принципиально новой модели.
3. Постановка вычислительной задачи. Чтобы уяснить понятие вычислительной задачи, рассмотрим пример. Необходимо найти значения двух интегралов:
; , n ³ 0, n – целое.
Интегрирование по частям приводит нас к системе разностных уравнений
I(n) = (n / 2) [ I(n – 1) + K(n – 1)],
K(n) = (n / 2) [– I(n – 1) + K(n – 1)].
Для поиска начальных условий воспользуемся известными формулами:
;
.
Таким образом, в результате преобразований проблема свелась к решению достаточно стандартной задачи – системы разностных уравнений с известными начальными условиями.
Подобные типовые задачи, которые уже не требуют каких-то аналитических выкладок, а сводятся лишь к более или менее простым вычислениям, называются вычислительными задачами. Таковыми можно считать расчет по набору явных формул, решение одного или системы алгебраических или дифференциальных уравнений, операции с матрицами, минимизация функции одной или нескольких переменных и др.
4. Выбор известного или построение нового численного метода. Поставленная вычислительная задача, несмотря на свою “типичность”, может быть очень сложной и поэтому нужны специальные численные методы ее решения. Обычно численные методы сводятся к замене (как правило – приближенной) исходной сложной задачи одной или несколькими более простыми, для которых известны методы решения. Ответ получается либо в результате выполнения набора конечных операций, либо как предел некоторой бесконечной числовой последовательности (подробнее о классах численных методов будет изложено в п. 4).
Для решения одной и той же вычислительной задачи обычно может быть использовано несколько методов. Необходимо знать особенности этих методов, критерии, по которым оценивается их качество, чтобы выбрать наиболее эффективный способ решения проблемы. Кроме того, необходима определенная эрудиция в области существующих численных методов, чтобы иметь возможность в них ориентироваться. Данные обстоятельства свидетельствуют в пользу необходимости изучения специалистами в области технических дисциплин основ вычислительной математики.
5. Алгоритмизация и программирование. Как правило, выбранный на предыдущем этапе численный метод, содержит только принципиальную схему решений задачи, не включающую многие детали, без которых невозможна реализация метода на ЭВМ. Детальная проработка всех этапов численной схемы позволяет разработать алгоритм решения вычислительной задачи. Составление программы сводится к переводу этого алгоритма на выбранный язык программирования.
6. Отладка программы. Основу этого этапа составляет тестирование программы – проверка ее правильности на специально подготовленных тестовых задачах, имеющих известные решения.
Подчеркнем важность тщательной подготовки тестовых задач. Как пишет в своей классической книге “Надежность программного обеспечения” Г. Майерс, ни в коем случае не следует использовать в качестве тестов “случайные наборы данных, которые можно тут же после использования выбросить, если, конечно, вы не хотите следом за ними выбросить и саму программу”.
7. Счет по программе. Обработка и интерпретация результатов. Полученные в результате расчетов необработанные выходные данные, как правило, представляют собой большие массивы чисел, содержательная интерпретация которых практически непосильна для человека. Поэтому обработку полученных результатов также рекомендуется возложить на ЭВМ. Зачастую первоочередной интерес представляет лишь небольшая часть полученной информации (например, значение одной из функций в выделенных точках) или некоторая, пусть даже грубая, интегральная характеристика объекта. Для того, чтобы исследователь мог воспользоваться результатами расчетов, их необходимо представить в виде компактных таблиц, графиков или в иной удобной для восприятия форме. При этом надо максимально использовать возможности ЭВМ для подготовки такой информации.
В заключение процитируем два основных тезиса, выдвинутых Р. В. Хеммингом еще в 60-х годах 20 столетия, и которыми, по нашему глубокому убеждению, следует постоянно руководствоваться при решении прикладных задач:
- прежде, чем считать – подумай, что будешь делать с ответом;
- цель расчетов – не числа, а понимание.
КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ
1. Для следующих прикладных задач постройте математическую модель проблемы, сформулируйте вычислительную задачу, найдите решение.
1.1. Имеется фанерный круг заданного диаметра D (рис.1.1). Выпилить из него прямоугольник максимальной площади.
1.2. Саша и Алеша собирали грибы. Оба мальчика собрали 40 грибов, Саша – на 10 больше, чем Алеша. Сколько грибов собрал каждый?
1.3. Футболист, стоя на песчаном пляже, держит в руках мяч на высоте h0 = 1 м над землей. Затем он ударом ноги посылает мяч вертикально вверх с начальной скоростью v0 = 20 м/с. На какой высоте над землей будет находиться мяч через 1, 2, 5 сек?
|
2. Для следующих вариантов задач разработайте алгоритм, составьте и отладьте программу, получите ответ. При отладке составьте несколько (не менее трех) тестовых примеров, каждый из которых служит определенной цели, например, проверке работы конкретных ветвей программы, проверке правильности окончания цикла и т.д.
1. Дан одномерный вещественный массив А(30). Вычислить:
1) произведение индексов нулевых элементов;
2) количество нулевых элементов, расположенных после первого минимального.
2. Дан одномерный вещественный массив B(40). Вычислить:
1) произведение максимального и минимального элементов;
2) количество повторений первого элемента.
3. Дан одномерный вещественный массив C(20). Вычислить:
1) сумму элементов, превосходящих своих соседей;
2) наибольший отрицательный элемент.
4. Дан одномерный целочисленный массив D(30). Вычислить:
1) количество нечетных элементов, расположенных перед максимальным элементом;
2) сумму элементов, кратных 3 или 4.
5. Дан одномерный вещественный массив А(25). Вычислить:
1) произведение элементов, превосходящих среднее арифметическое значение элементов массива;
2) наибольший положительный элемент.
6. Дан одномерный вещественный массив B(30). Вычислить:
1) сумму индексов целых элементов;
2) произведение ненулевых элементов, расположенных перед первым максимальным элементом.
7. Дан одномерный целочисленный массив C(40). Вычислить:
1) элемент наиболее близкий к минимальному положительному элементу массива, но не совпадающий с ним;
2) сумму нечетных элементов, расположенных после первого минимального элемента.
8. В массиве X[n,m] все элементы, кроме граничных, заменить суммой непосредственно примыкающих к ним элементов по вертикали, горизонтали и диагонали.
9. В каждом столбце и каждой строке матрицы P[n,n] содержится строго по одному нулевому элементу. Перестановкой строк добиться расположения всех нулей по главной диагонали матрицы.
10. В массиве K[n] в порядке убывания представлены достоинства денежных знаков валютной системы некоторой страны. Реализовать выдачу в этой системе заданной суммы m минимальным числом денежных знаков.
11. Дан вещественный массив А(n). Сформировать массив В по правилу и найти сумму положительных элементов массива В.
12. Дан целочисленный массив В(m). Сформировать массив D из нечетных отрицательных элементов массива В и найти .
13. Дан одномерный массив A(n), упорядоченный по возрастанию. Включить в него элемент х, так, чтобы упорядоченность массива не нарушилась.
14. Дан вещественный массив А(n). Найти и сформировать массив С из элементов массива А по модулю меньших 2.
15. Дан вещественный массив С(m). Определить максимальный элемент и сформировать массив из индексов максимальных элементов.
16. Дан вещественный массив С(n). Сформировать массив А по правилу
.
Найти .
17. Дан вещественный массив С(m). Поменять в нем местами минимальные элементы с максимальными.
18. Даны вещественные массивы A(n) и С(m). Объединить эти массивы, поместив все элементы массива А между C(k) и C(k+1).
19. Даны вещественные массивы А(m) и B(m). Решить все уравнения A(j)×X(j) = B(j). Ответ вывести в таблицу из 3-х колонок: A(j), B(j), X(j).