Концепция практикума по вычислительной математике

advertisement
Концепция программно-методического продукта
«Лабораторный практикум по вычислительной математике»
Для сотрудников кафедры выч. математики, участвующих в проекте
Содержание
1 Причины и цели разработки нового практикума ...........................................................1
1.1 Недостатки старого практикума ...............................................................................1
1.2 Достоинства старого практикума, которые желательно сохранить ......................2
1.3 Новые цели разработки практикума ........................................................................2
2 Общие концепции нового практикума ............................................................................3
2.1 Использование различных трактовок понятия лабы ..............................................3
2.2 Аккуратный подход к использованию математического пакета ...........................5
2.3 Методические материалы в практикуме ..................................................................6
2.4 Разделение практикума на программы ....................................................................6
2.5 Последовательность лаб и тем лекций разных лекторов .......................................9
3 Технические средства реализации практикума ............................................................10
3.1 Java.............................................................................................................................11
3.2 С++.............................................................................................................................11
3.3 МATLAB ...................................................................................................................11
3.4 MathCAD (возможен вместо MATLAB) ................................................................12
3.5 Распределение лаб между различными средствами .............................................13
Для большинства методистов важно прочитать лишь выделенное желтым
Перечень изменений документа
Дата
25.06
.2006
28.06
.2006
29.06
.2006
04.07
.2006
22.07
.2006
29.08
.2006
22.10
.2006
Версия
0.1
0.2
0.3
0.4
0.5
0.6
0.7
Автор
Евдокимов
Евдокимов
Евдокимов
Евдокимов
Евдокимов
Евдокимов
Евдокимов
Описание изменений
Измененные
разделы
Создание структуры документа и ее первичное все
наполнение
Добавление концепции справочных материалов. 2.3; 3.5
Распределение лаб по средствам реализации
Небольшие изменения в наборе лаб. Добавле- 3.5; 3.5 (стания средств, связанных с подпроектом Source
рый), 2.1
Структурирование набора лаб. Добавление 3.5, 2.4, 2.5
разделов, описывающего лабы и их связь с темами
Изменение последовательности и мелкая кор- 3.5, 2.4, 2.5
ректировка описаний лаб осеннего семестра
Изменение набора/содержания лаб по замеча- 3.5, 2.4, 2.5,
ниям Пирогова; выставление приоритетов лаб
1.1
Учет замечаний, высказанных на методических 2.1, 3.5, 3.5
семинарах, удаление связанного с Source
(удален)
1 Причины и цели разработки нового практикума
1.1 Недостатки старого практикума
1. Отсталость в плане графического интерфейса. Программы морально устарели и
отбивают интерес к вычислительной математике (из уровня этих программ студенты делают вывод, что в нашей области совсем нет никаких ресурсов: ни денег, ни современных специалистов, поэтому изучать наш предмет нет никакого смысла; никакая красивая теория их не убедит в
обратном). Не стоит отмахиваться от этой ситуации, ссылаясь на то, что интерфейс в науке неважен. Студенты ведь отчасти правы: вычислительная математика всегда «нужна обществу» только
Концепция практикума по вычислительной математике. Версия 0.7
1
вместе с реализующими ее программами. И пока мы не будем прививать студентам интереса к вычислительным программам и к их написанию, к нам студенты будут относиться так же плохо, как
относятся к высшим математикам и другим «теоретикам» (это слово сейчас почти ругательное).
2. Мелкие недостатки, которые хочется исправить, но нельзя (так как их авторов
давно уже нет, а нынешние студенты за доработку старых лаб не возьмутся)
3. Недостатки методики исследования. Наиболее очевидные:
а) невозможность или сложность сравнения расчетов на одном графике (по разным методам, с разными шагами и т.п.);
б) невозможность показа зависимости результата расчетов от шага/параметра;
в) невозможность сохранения в файл всех данных варианта задачи и дальнейшей
загрузки из этого файла (в частности, было бы удобно накопить несколько вариантов, чтобы можно было показать их преподавателю);
г) невозможность изменения времени расчета как одной из характеристик метода;
д) ..
4. Отсутствие поддержки написания программного кода студентами и других
трактовок лабораторных работ, отличных от «готовой учебной программы».
1.2 Достоинства старого практикума, которые желательно сохранить
1. Отлично организованная справка, причем из любого места интерфейса (справку
следует сделать еще лучше за счет гиперссылок).
2. Возможность пошагового выполнения расчета (есть не во всех лабах).
3. «Демо-версии» с показом последовательности действий пользователя (сделать это
снова будет сложно, так что пока эту возможность следует лишь «иметь ввиду»).
4. Достаточно продуманная структура меню (она превратится в структуру «закладок», «панелей с разделителями» и т.п. частей современного интерфейса)
5. Показ настроек текущего варианта задачи в любой момент времени.
6. Заставки, иллюстрирующие смысл лабы (может быть, другие, но заставки
должны быть – это важно для демонстрации проекта).
1.
2.
3.
4.
1.3 Новые цели разработки практикума
Хотя бы часть лаб должна быть уникальной с какой-либо точки зрения (неординарной, не имеющей аналогов, содержащей новую идею) – этого хочет ректорат и
это позволит впоследствии лучше «продвигать продукт в другие вузы».
Хотя бы часть лаб должна быть доступна из Интернет (реклама продукта на словах гораздо менее эффективна, чем реклама продукта в действии)
Необходим компромисс между двумя трактовками лаб – между
а) точкой зрения В.В.Демченко, который заставляет студентов «с нуля» писать 3
программы в каждом семестре, и
б) точкой зрения половины сотрудников кафедры, которые считают, что программы студентам писать вообще не нужно, достаточно проиллюстрировать теорию в
готовых программах.
Более того, практикум должен быть разнообразным. Это намного увеличивает интерес студентов, ведь для многих интерес делать лабы заключается не в изучении
вычислительной математики, а в том, что им интересно копаться в различных программах, изучать новые технологии (если эти технологии современные и востребованные, например, – математические пакеты). Кроме того, различный взгляд на
близкий материал (из мат. пакета, из готовой программы, из исходного кода собственной программы) позволяет глубже и быстрее понять этот материал. С точки
зрения преподавателя, разнообразие лаб позволяет выбрать из них наиболее близкие к его личному подходу. Однако слишком большое разнообразие тоже мешает,
так как теряется много учебного времени на освоение новых лаб студентами.
Концепция практикума по вычислительной математике. Версия 0.7
2
5. Необходимо разработать программный комплекс так, чтобы потом не приходилось
уже его обновлять таким же кардинальным образом. Другими, словами, практикум должен содержать в себе механизм собственного постепенного обновления. Это можно рассматривать как проявление первой цели разработки (обеспечение уникальности). Обновления программ, конечно, будут происходить силами
студентов базовой специализации (для которых это есть учебная задача по базовому курсу), а также студентов, проходящих вычислительную математику. Опыт показал, что без наличия внутреннего механизма обновления результаты работы студентов над новыми лабами невозможно использовать. Следует заметить, что эти
соображения неприменимы к лабам, выполненным в математическом пакете (в
частности, пакеты устаревают или теряют популярность намного быстрее, чем
языки программирования, так что нет смысла делать «расширяемыми» лабы, реализуемые в мат. пакете).
6. Кроме обновления программного кода, нужна возможность преподавателю многое обновлять в лабе (без обращения к программистам). Это предполагается за
счет хранения в XML структуры интерфейса и данных задачи (по умолчанию).
2 Общие концепции нового практикума
2.1 Использование различных трактовок понятия лабы
Практикум должен содержать лабораторные работы, которые в различной степени
содержат две крайности, указанные в разделе 1.3: 1) написание программ «с нуля» и
2) использование полностью готовой программы (без возможности отклониться от «учебного маршрута»). Сами по себе, эти крайности будут использоваться следующим образом:
1. Одна программа за семестр должна писаться студентом «с нуля» (какая именно
программа – может варьироваться в зависимости как от преподавателя, так и от студента – это уменьшит списывание). При этом соответствующая тема будет оформлена также и в виде готовой программы – хотя бы для того, чтобы можно было сравнить результаты студентов с правильными результатами. Другими словами, освоение
какой-то темы студентами путем программирования не отменяет потребность в
наличии по этой теме лабораторной работы в ее классическом понимании.
Для написания программ студентами «с нуля» часть документации проекта и часть
кода на C++ и/или Java будет оформлена, соответственно, в виде рекомендаций по
написанию программы и в виде шаблонов и кусков наименее интеллектуального кода, которые рекомендуется использовать. Подобный подход уже 2 года апробируется в рамках базового курса «Технологии компьютерного моделирования».
Кроме того, для того, чтобы можно было адекватно оценивать написанные студентами программы, разработанные лабораторные работы могут быть использованы в качестве «эталонных» проверочных программ (для этого будет реализован показ таблиц чисел, а также будут созданы файлы к лабам по всем вариантам заданий).
2. Большинство лаб будет оформлено в виде готовой программы на языке Java или
C++, что позволит студентам освоить максимальное количество тем за год. При этом
будут реализованы стандартные возможности типа сравнения результатов и производительности расчетов при разных численных методах и при разных шагах/параметрах. Однако в этом подходе никаких возможностей отклонения от «учебного маршрута» не предусматривается.
Кроме этих крайностей самих по себе, будут использоваться следующие приемы:
1. Надо, чтобы студенты почаще сами писали вычислительные алгоритмы, но при этом
не тратили время на визуализацию, ввод/вывод, создание общей структуры программы и т.п. При этом они должны иметь возможность видеть понятный написанный за
них код, который реализует другие куски программы (и при необходимости его поменять). Для этой цели идеально подходит использование математического пакета
Концепция практикума по вычислительной математике. Версия 0.7
3
(по причине компактности и наглядности кода). Другими словами, несколько лабораторных надо сделать так, чтобы студенты программировали алгоритмы и получали
результаты в математическом пакете (подробнее в разделе 2.2).
2. Как альтернативный вариант, можно также предложить давать студентам недоделанные программы на каком-либо языке программирования (не в пакете). Но в текущей ситуации этот подход нецелесообразен: лабораторные такого типа имеются
лишь на Fortrane и на Java (используются в базовом курсе, а также отчасти в курсе
«Нелинейные вычислительные процессы» – в его рамках этот подход и будет развиваться). Однако студентам, проходящим вычислительную математику, однозначно
нужен язык С/С++, а по этому языку у нас нет подходящих специалистов, готовых
заняться разработкой подобных «недоделанных программ» (здесь требуется очень
высокое качество кода и очень подробные комментарии к нему).
3. Также стоит решать задачу разработки интересных лаб и с другого конца – со стороны готовых программ (не требующих компиляции). Готовые программы, как было
сказано выше, должны использоваться в большом количестве лаб, чтобы сэкономить
учебное время. Однако некоторые из программ не должны быть «слишком учебными», не должны слишком сильно облегчать задачу студентам, они должны быть
максимально похожими на профессиональные программы, которые можно использовать для решения того или иного вида прикладных вычислительных задач. Вопервых, это покажет студентам, что далеко не достижения вычислительной математики по данной теме заложены в их курс (и что в жизни применяются далеко не
учебные подходы к решению вычислительных задач). Во-вторых, это будет стимулировать самостоятельное исследование студентов: им будет дано описание относительно сложного инструмента, указано, что требуется в итоге, однако «учебного
маршрута» дано не будет (тогда работа студента будет ближе к работе профессионального вычислителя).
Например, имеет смысл сделать «профессиональной» программу для решения задач Коши для ОДУ
(по ней есть несколько хороших заделов). Не-чисто-учебный характер этой лабы будет проявляться в
следующем: а) наличие очень большого количества иерархически упорядоченных методов (перебрать
которые полностью невозможно), а также возможность вводить метод со своими коэффициентами; б)
большое количество редактируемых опций метода (которые не используются в простых лабах и требуют глубокого понимания работы алгоритмов): методы изменения шага, методы решения алгебраических уравнений на шаге и их многочисленные опции.
Вторым примером «профессиональной» расчетной программы может служить уравнение теплопроводности или какая-то смешанная задача, ранее отсутствовавшая в курсе, например, конвективнодиффузионное уравнение как иллюстрация метода расщепления по физическим процессам.
4. Желательно предусмотреть в практикуме возможность выделиться для студентов,
наиболее толковых в плане вычислительного программирования. Таких студентов обычно бывает от 0 до 3 в каждой группе, и персональный подход к ним позволяет: а) дать им гораздо больше полезных знаний/навыков, чем среднестатистическому студенту; б) избежать ситуаций, когда эти лучшие студенты делают задания за
всю группу (при этом группа совершенно расслабляется и не осваивает программу
даже по минимуму). Здесь есть две основные возможности:
а) Для студентов, имеющие большое желание именно программировать, можно иногда давать задание по разработке/улучшению того или иного численного метода к
лабе (это один из механизмов постепенного обновления практикума, см. раздел 1.3).
б) Для студентов, знакомых с выбранным для практикума математическим пакетом
(MATLAB или MathCAD), можно предусмотреть задания по решению задачи «с
нуля» в этом пакете, причем без использования подробных указаний (которые сделать затруднительно). При условии знания студентом пакета трудозатраты на решение задачи «с нуля» почти такие же, как при решении задачи в готовой программе.
Требование использовать именно «выбранный для практикума пакет» обусловлено
тем, что результат должен быть по возможности применен для создания в пакете новой лабораторной работы по соответствующей теме.
Концепция практикума по вычислительной математике. Версия 0.7
4
Таким образом, как при использовании языка программирования, так и при использовании математического пакета можно выделить 3 методических подхода:
 расчеты на полностью законченной программе;
 редактирование студентом имеющейся программы (выше обосновано, что для языка
программирования, в отличие от пакета, это нецелесообразно, – за исключением персональных заданий особо толковым студентам);
 требование к студенту написать свою программу и уже затем проводить расчеты.
2.2 Аккуратный подход к использованию математического пакета
Общепризнано, что писать вычислительные программы в мат. пакетах на порядок
быстрее, чем на языках программирования (при условии, что пакет известен человеку в
той же мере, что и язык). Преимущество наблюдается не только во встроенных в пакеты
высокоуровневых средствах визуализации и ввода/вывода, но и в библиотеках математических функций, которые делают реализацию численных методов очень компактной. Соответственно, использование мат. пакета сильно экономит как время на разработку
лаб (типа «готовая программа»), так и учебное время (на написание или редактирование программ студентами). Есть также очень полезные возможности мат. пакетов, которые вообще невозможно хорошо реализовать в обычных программах; к ним относятся,
прежде всего, символьные вычисления. Кроме того, в случае использования пакета автоматически обеспечивается общность «лабораторной среды», благодаря которой студентам
не надо учиться каждой программе-лабе. Открытость кода программ в мат. пакете позволяет студентам лучше разобраться с тем, как реализуется предлагаемая им теория. Сами
по себе навыки работы в широко известном мат. пакете многие студенты признают полезными и с удовольствием их приобретают (чего нельзя сказать о навыках использования
«самодельных» программ кафедры). Работа в пакете является также крайне полезной для
подготовки студентов к выполнению НИР на многих базовых кафедрах (пакеты используются при выполнении 15-30% бакалаврских дипломов – как в МФТИ, так и в других вузах).
Тем не менее, нецелесообразно использовать математический пакет в качестве
единственного средства реализации лаб. Это обусловлено следующими факторами:
1. В вузах России существует большое количество практикумов по вычислительной
математике на математических пакетах, поэтому показать новизну данного практикума будет затруднительно (если не использовать ничего кроме мат. пакета).
2. Лицензии на мат. пакеты являются очень дорогими даже для учебных заведений, поэтому их применение может быть ограничено финансово-политическими факторами.
3. Мат. пакеты изменяются (а также теряют конкурентоспособность) намного быстрее,
чем обычные языки программирования, поэтому практикум, сделанный в формате
определенной версии какого-либо пакета, во-первых, требует довольно частого перевода на новые версии пакета (раз в 3-4 года), а во-вторых, может через несколько лет
потерять привлекательность вместе с потерей пакетом своего места на рынке.
4. Разработка готовых лаб на мат. пакете имеет следующий важный недостаток: практически невозможно обеспечить общий «каркас» всех лабораторных работ, который
мог бы затем легко пополняться (в то время как это легко сделать за счет средств
объектно-ориентированного языка программирования). В случае пакета для разработки новой лабы можно использовать лишь библиотеки функций, созданные при
разработки предыдущих лаб; и отсутствие иных возможностей повторного использования кода замедляет развитие практикума.
5. Достаточно большое время необходимо на освоение пакета в той мере, в которой это
необходимо для написания студентом своей программы и даже для редактирования
существующей программы (а такие формы лаб, как упоминалась выше, являются необходимыми для полноценного практикума).
Концепция практикума по вычислительной математике. Версия 0.7
5
6. Для решения многих практических задач (на базовых кафедрах) мат. пакеты принципиально не подходят, поэтому не следует лишать студентов возможности познакомиться с вычислительными программами на обычном языке программирования.
Таким образом, мат. пакет как средство реализации практикума имеет как очень
большие преимущества (в основном, с точки зрения скорости разработки и возможностей
«красивой» демонстрации практикума), так и очень большие недостатки (в основном, с
точки зрения дальнейшего использования практикума). Поэтому планируется достичь
компромисса путем разработки лишь части практикума в мат. пакете, а остальной
части – на обычном языке программирования. Более подробно распределение лаб
практикума между этими двумя средствами обосновывается в разделе 3.5
2.3 Методические материалы в практикуме
Методические материалы практикума (прежде всего, указания студентам по выполнению лаб) формируются на базе существующего (печатного) сборника лабораторных работ по вычислительной математике. Материалы (тексты) разрабатываются в некотором
смысле отдельно от реализующих лабы программ, чтобы можно было использовать их
независимо (в частности, при переиздании сборника или при публикации в виде электронного учебника/задачника на сайте). Однако оформляются они в том формате, в котором их можно непосредственно использовать в справочной системе лаб (программ). Таким форматом (пригодным как для справочной системы, так и для сайта) служит формат
HTML.
Предлагается в каждой лабораторной иметь следующие разделы справки:

«Учебник» – краткое описание задачи и теории ее решения, предваряемое абзацем
аннотации к задаче и завершаемое списком литературы, на которую должны быть
ссылки в тексте теории.

«Задание» – часть старого «задачника», содержащая общую постановку задачи
студентам без указания конкретных названий методов, значений параметров и т.п.

«Варианты» – а) четко выделенные из старого «задачника» и из других источников перечни методов и параметров задачи/методов, которые подлежат варьированию (в зависимости от варианта или в рамках одного варианта);
б) 2-4 перечня вариантов, каждый из которых может быть либо перечнем отличий
данного варианта от других (часто варианты различаются решаемой системой
уравнений), либо перечнем указаний о том, что и как нужно варьировать (какие из
всех методов использовать, какие параметры в каком диапазоне изменять);
в) перечни «учебных маршрутов», каждый из которых представляет собой комбинацию из пунктов перечней пункта б); (этот пункт необязателен, поскольку преподаватель может легко получить сам большое число комбинаций вариантов). Пункты б) и в) принципиально не включаются в данный раздел, если лаба носит «не
слишком учебный» («профессиональный») характер – см. разделы 2.1 и 3.5.

«Решение» – раздел справки, не относящийся к методическим материалам и получаемый из «математического» описания требований к программе.

«Интерфейс» – раздел справки, не относящийся к методическим материалам и получаемый из «интерфейсного» описания требований к программе.

«Вопросы» – требуемые при сдаче контрольные вопросы по темам «учебника».
2.4 Разделение практикума на программы
Следует заметить, что «программы», «лабы» и «темы курса» – это не совпадающие
понятия. Лабой называется та работа, за которую студент получает оценку. В некоторых
случаях последовательность лаб отличается от последовательности тем (тем более, что
разные лекторы дают разную последовательность). А в некоторых случаях одна и та же
лаба может выполняться с помощью двух программ; и напротив, одна программа может
использоваться в двух лабах. При желании преподаватель может давать студентам лабы
Концепция практикума по вычислительной математике. Версия 0.7
6
именно в той последовательности, к которой привык, и может не обращать внимания,
например, на то, что разные лабы оказались в одной программе.
Предлагается несколько изменений в разделении практикума на программы (по
сравнению с разделением старого практикума). Новое разделение позволяет меньше усилий затратить на реализацию программ (в условиях расширения их функций по сравнению со старым практикумом), а
также иллюстрирует вычислительную общность некоторых задач, формально различных с точки зрения математической постановки. В частности, многие методы решения систем нелинейных уравнений используют
методы поиска минимума функции соответствующего числа переменных; а многие методы решения краевых задач для обыкновенных дифференциальных уравнений используют решение задачи Коши.
Кроме того, вводится понятие «циклов лабораторных работ», чтобы программы были лучше структурированы. Для удобства программы ниже имеют двухуровневую нумерцию, а лабы упорядочены линейно. Ниже номер лабы указывается жирным для каждой
программы, хотя это соответствие зависит от потока (факультета) и от личных предпочтений преподавателя. Условно возможные варианты последовательности лаб можно разделить на три типа: «потоками типа 1» ниже называются варианты курса, где алгебраические уравнения рассматриваются первыми лабами (потоки Пирогова, Косарева и Демченко, учебник Рябенького); «потоками типа 2» – где решение алгебраических уравнений
идет ПОСЛЕ приближения функций, но ДО численного дифференцирования и интегрирования (пока это гипотетический вариант курса); «потоками типа 3» – где решение алгебраических уравнений идет непосредственно перед дифференциальными уравнениями (потоки Петрова и Лобанова, учебник Бахвалова). Есть и другие варианты (например, в учебнике Самарского линейные системы идут первыми, а нелинейные – последними, т.е.
непосредственно перед дифф. уравнениями).
В нижеприведенном описании программ (курсивом) указывается также степень близости программы к старому практикуму и приоритет лабы (приоритет основан на наличии прототипов некоторых программ и на возможности апробировать лабы на занятиях со
студентами, которое возможно не ранее чем весной).
1. Цикл «Алгебраические уравнения и системы» (осень). Цикл, в отличие от старого
практикума, включает поиск спектра (в рамках лабы по линейным системам), локализацию корней (являющуюся важным элементом практического решения нелинейных
уравнений) и поиск экстремума функции многих переменных, поскольку решение этой
задачи является основным элементом метода решения нелинейных систем. В данном
цикле все расчеты с итерационными методами имеют режим пошагового выполнения.
1.1. «Линейные системы уравнений. Спектр матриц». Лаба №2 для потоков типа
1, №4 для потоков типа 2 и №6 для потоков типа 3. Сюда входят четыре части:
прямые методы решения линейных систем, быстрые прямые методы для nдиагональных матриц, итерационные методы, расчет спектра матриц. Число методов больше, чем в старом практикуме. Размерность матриц не ограничивается,
предусматривается возможность автоматического заполнения n-диагональных
матриц большой размерности. Приоритет: высокий (т.к. на базе этой программы
должна делаться лаба по эллиптическим уравнениям, необходимая к апрелю).
1.2. «Нелинейные уравнения. Локализация корней». Лаба №3 для потоков типа 1,
№5 для потоков типа 2 и №7 для потоков типа 3. Уравнения можно задавать
как в виде коэффициентов полинома (в этом случае иллюстрируются методы локализации корней), так и в виде произвольной функции одной переменной (в этом
случае проще иллюстрировать различия между методами). Старый практикум
использовал только второй подход. Приоритет: средний (к сентябрю 2007).
1.3. «Нелинейные системы. Поиск минимума». Лаба №4 для потоков типа 1, №6
для потоков типа 2 и №8 для потоков типа 3. Эта программа в старом практикуме отсутствовала. Методы решения систем предполагают произвольное число
уравнений, однако пока предлагается задавать лишь два уравнения, каждое из которых может быть кривой второго порядка или, в вырожденном случае, прямой
Концепция практикума по вычислительной математике. Версия 0.7
7
линией. Выбор начального приближения (локализация корней) проводится пользователем графически (на основе двумерной визуализации). С помощью трехмерной визуализации иллюстрируется как процесс поиска минимума (функции двух
переменных, заданной независимо от системы), так и методы решения нелинейных систем типа градиентного или случайного спуска (в этом случае минимизируемая функция равна квадрату вектор-функции системы уравнений). Приоритет:
низкий.
2. Цикл «Приближение функций» (осень).
2.1. «Интерполяция». Включает алгебраическую интерполяцию и сплайнинтерполяцию. Эта лабу желательно давать до численного дифференцирования и
интегрирования (поскольку полиномиальная интерполяция используется там при
выводе формул). То есть рекомендуемый номер лабы – №5 для потоков типа 1 и
№2 для потоков типа 2,3. Приоритет: средний.
2.2. «Среднеквадратичное приближение. Переопределенные системы уравнений».
Как и в старом практикуме, здесь стоит сделать упор на самое распространенное
приложение теории переопределенных систем – на среднеквадратичное приближение одномерных дискретных функций. В потоках типа 1 лаба идет под №6 (хотя есть и другой вариант – давать ее сразу после линейных систем под №3). В потоках типа 2 эта лаба под №3 может служить переходным звеном между интерполяционным приближением (которая в большинстве учебников рассматривается
вместе со среднеквадратичным приближением) и линейными системами уравнений. В потоках типа 3 данная лаба тоже имеет №3 (здесь есть нелогичность: переопределенные системы отделяются от обычных систем другими лабами).
Какую приближающую функцию использовать (y = k*x+b или? y = ak*xk+ak-1*xk1
+..+a0 или? произвольная функция) – выносится на обсуждение. Приоритет:
низкий.
3. Цикл «Дискретные функции» (осень). Цикл объединяет лабы, которые рассматривают дискретизацию функций одной переменной и их преобразование в дискретном
виде. Следует заметить, что тема «Погрешности вычислений», несмотря на ее выделение в отдельную программу – лабу №1, проходит красной нитью через многие лабы
первых трех циклов (программы этих циклов позволяют исследовать погрешность, в
том числе, в зависимости от разрядности чисел). Особенно подробно эта тема может
быть рассмотрена на программах по дифференцированию, по интерполяции и по решению систем линейных уравнений (и даже в программе по интегрированию можно
убедиться, что неустранимая погрешность мала).
3.1. «Погрешности вычислений». Включает численное дифференцирование (простейшая аппроксимация) и приближение функции с помощью ряда. Лаба имеет
№1 для всех потоков. Аналогично старому практикуму. Приоритет: средний (к
сентябрю 2007).
3.2. «Численное дифференцирование». Данная программа обычно соответствует лабе №7 для потоков типа 1,2 и №4 для потоков типа 3. Лабу по дифференцированию в потоках типа 3 можно давать также под №2 (это является логичным продолжением лабы №1, но не очень удобно по другой причине: в начале семестра
студенты не могут понимать величину погрешности с точки зрения интерполяционных формул). В старом практикуме данная программа отсутствовала, однако
она желательна для придания практикуму законченного вида (для покрытия им
100% тем лекций). Кроме того, данная лаба дает дополнительные методические
возможности по изучению погрешности. Приоритет: низкий.
3.3. «Численное интегрирование». Данная лаба обычно следует за лабой по дифференцированию (то есть рекомендуется №8 для потоков типа 1,2 и №5 для потоков типа 3; см. выше). По сравнению со старым практикумом, предлагается сдеКонцепция практикума по вычислительной математике. Версия 0.7
8
лать данную программу более похожей на другие лабы цикла. Это предполагает
показ значения интеграла не только в последней точке, но и на всем отрезке интегрирования (на графике). Приоритет: низкий.
4. Цикл «Обыкновенные дифференциальные уравнения» (зима). Режим пошагового
выполнения в данном цикле отсутствует (так как результаты шагов по времени хорошо
видны на графиках). Исключением являются «шаги», понимаемые как приближение к
решению на всем отрезке (однократное решение задачи Коши) – это может показываться в пошаговом режиме.
4.1. «Задача Коши для нелинейной системы ОДУ». Лаба №9 (для всех потоков).
Сюда включаются не только разнообразные методы решения ОДУ (одношаговые
и многошаговые, в том числе для жестких систем), но и методы вычисления шага,
разные методы решения системы алгебраических уравнений на шаге. Приоритет:
очень высокий (к ноябрю 2006).
4.2. «Краевая задача для линейного ОДУ 2-го порядка. Спектральная задача
Штурма-Лиувилля». Часть лабы №10. Метод прогонки (в обе стороны) и все
другие методы для линейных задач. Приоритет: высокий (к ноябрю 2006).
4.3. «Краевая задача для системы ОДУ». Часть той же лабы №10. Программа с точки зрения интерфейса расширением программы для задачи Коши. Она рассматривает те методы/эффекты (в т.ч. отсутствующие в старом практикуме), которые
используются/проявляются в случае нелинейной системы и в случае порядка системы уравнений, превышающего 2 (в частности, рассматривается жесткая краевая
задача). Приоритет: низкий (к февралю 2007 все равно некоторые методы не
успеть).
5. Цикл «Одномерные эволюционные уравнения в частных производных» (весна).
5.1. «Уравнение переноса». Лаба №11. Приоритет: высокий (к марту 2007).
5.2. «Волновое уравнение». Лаба №12. Программа будет являться расширением
предыдущей программы. Выносится на обсуждение: что лучше вводить, волновое
уравнение или систему из двух уравнений? Приоритет: высокий (к марту 2007).
5.3. «Уравнение теплопроводности». Лаба №13. Теперь в этой лабе будет не только
линейное уравнение, как в старом практикуме, но и нелинейное уравнение с коэффициентом ~uk. Приоритет: высокий (к марту 2007).
5.4. «Конвективно-диффузионное уравнение». Лаба №14. Иллюстрирует метод расщепления по физическим процессам. Здесь же нелинейные уравнения, в т.ч. Хопфа. Приоритет: низкий (скорее всего, в 2007 не будет использоваться преподавателями).
6. Цикл «Многомерные уравнения в частных производных» (весна).
6.1. [«Двумерное уравнение теплопроводности». Иллюстрируется метод расщепления
по координатам (метод дробных шагов, метод переменных направлений). Лаба
№15 возможна в перспективе]
6.2. «Уравнение Пуассона». Лаба №16. Здесь рассматриваются разные шаблоны, а
также многочисленные методы решения сеточных уравнений. [В перспективе,
возможно, превратится из «чисто учебной» в «профессиональную» программу,
дополнившись большой частью (или отдельной лабой №16?) «Вариационные и
проекционно-сеточные методы» или «Метод конечных элементов»] Приоритет:
высокий (к апрелю 2007).
2.5 Последовательность лаб и тем лекций разных лекторов
Как уже говорилось, приведенная выше нумерация лаб относительно произвольна и
не всегда диктует преподавателю последовательность проведения лаб. Ниже приводится
таблица, позволяющая соотнести номера лаб, которые были указаны в разделе 2.4 (для поКонцепция практикума по вычислительной математике. Версия 0.7
9
токов типа 1–3), с номерами тем для лекторов разных потоков (факультетов). Номера, которыми лабы (и соответствующие программы) будут кодироваться в проекте, совпадают с
номерами лаб для «потока типа 1».
Серым показаны граница между семестрами (первые лабы весеннего семестра) в
данном потоке. Пустые ячейки соответствуют одинаковой последовательности тем и лаб.
Тема №1 «погрешности» может рассматриваться не только в лабе №1, но в других (№5,
№7, если следовать нумерации потока 1).
1
1
2
3
4
№
2
1
4
5
6
5
6
7
8
9
10
11
12
13
14
[15]
16
2
3
7
8
Лабораторная работа
Название
3
1 Погрешности
6 СЛАУ. Спектр матриц
7 НАУ. Локал-ция корней
8 СНАУ. Поиск минимума
2 Интерполяция
3 Ср.-кв. приближение
4 Дифференцирование
5 Интегрирование
Зад. Коши для нелин.
СОДУ
Кр. задача для ОДУ
Уравнение переноса
Волновое уравнение
Уравнение теплопроводности
Нелин. конв.-диффуз.
уравнение
[Ур. теплопроводности
в 2D] – в будущем
Уравнение Пуассона
[МКЭ – в будущем]
Особенности или номер темы в курсе лектора
В.И.Косарев
В.В.Демченко А.И.Лобанов,
В.Б.Пирогов
(тип 1 на 85%)
(тип 1 на 90%) (тип 1 на 100%) И.Б.Петров (3)
1
1
1
1
2
2 (нет спектра) 6 (подробно)
2
4 (почти нет)
3
7
4
5
4
нет
5 (нет min)
6
3
7
8
5
6
7
8
нежест. – осень
(только метод
стрельбы)
(спектр задача
отдельно)
(сначала методы
построения схем)
(единая тема;
нелин. нет)
нет
нет
нет
3
нет
2
5
(очень подробно)
(отчасти повторяет осень)



6
3
(нет)
8
(есть
метод нет
расщепления)
после ур. теплопроводности
(+ конеч. эл.)
(+ конеч. эл.)
Из существенных отличий набора лаб от набора тем всех курсов можно отметить
следующее. Тема «Метод расщепления по физическим процессам» (иллюстрируемая лабой «Конвективно-диффузионное уравнение») явно фигрирует лишь в потоке Петрова. И
напротив, тема «Двумерное уравнение теплопроводности» в лабах пока не отражена (возможна лишь в конце проекта при наличии ресурсов).
3 Технические средства реализации практикума
[Данный раздел неинтересен для большинства участников проекта]
Ввиду недостаточного числа «идеально подходящих» участников проекта, необходимо использовать всех имеющихся людей и по максимуму использовать все имеющиеся
у них наработки. Следует по возможности ничего не делать «с нуля»; а то, что «с нуля»,
следует делать наиболее экономным способом. Из этого следует, что необходимо использовать довольно разнообразные программные средства: два языка программирования
(C++ и Java; а также Fortran для проверочных программ) и один математический пакет
(MATLAB). Причины выбора этих инструментов указаны в подразделах этого раздела.
Примечание. В курсе «Нелинейных вычислительных процессов» будет использоваться язык программирования Fortran (на нем написаны все имеющиеся лабы; писать на
Fortran дешевле, чем на C++, но практически невозможно писать графический интерфейс),
а также математический пакет – прежде всего, для аналитического преобразования формул и для представления областей устойчивости, монотонности и n-ого порядка аппроксимации (имеются наработки в MathCAD, хотя логичнее тот же MATLAB).
Концепция практикума по вычислительной математике. Версия 0.7
10
3.1 Java
Достоинства:
1. На этом языке пишут все студенты базовой специализации при кафедре, причем есть и
другие каналы поиска Java-программистов (которые уже привели к двум желающим
участвовать в проекте, причем потенциальных кандидатов еще много).
2. На этом языке имеется ряд прототипов (задача Коши для ОДУ, линейное и нелинейное
уравнения теплопроводности).
3. На этом языке у нас (у А.Евдокимова) имеются как собственные математические библиотеки (нелинейные АУ, ОДУ), так и библиотеки по графическому интерфейсу.
4. Один и тот же код, написанный на Java, можно использовать как для Интернет-версии
лабы (апплет), так и в рамках обычного приложения.
5. В Java больше всех остальных языков развиты возможности по подключению к программе новых модулей («плагинов») – вплоть до редактирования собственного исходного кода с его компиляцией и загрузкой без перезапуска программы. Это позволяет
не только реализовать механизм обновления программ, но и дать студентам возможность писать код для систем уравнений и (если потребуется) для численных методов.
6. Программы на Java является межплатформенными, так что они без всяких изменений
(даже без перекомпиляции) могут быть запущены под Linux.
7. Для Java существуют хорошие свободные средства разработки, то есть не требуется
покупка лицензии (вопрос лицензионной чистоты важен, так как планируется дальнейшая продажа практикума в другие вузы).
Недостатки:
1. Большие требования по памяти (а также чуть меньшая скорость вычислений) мешают
применению Java к вычислительно сложным задачам (на базе уравнений в частных
производных).
2. Число свободно распространяемых математических библиотек для Java меньше такого
числа для Си и Fortran.
3. На Java не пишут большинство студентов МФТИ (в курсе информатики используется
язык Си, который ближе к С++, чем к Java).
3.2 С++
Достоинства:
1. На С++ написаны все те прототипы лаб, которые сейчас используются в практикуме.
2. На С++ можно писать эффективно с вычислительной точки зрения.
3. Имеется С++-код, прилагаемый к известному учебнику Numerical Receipts.
4. На С++ относительно легко делать графический интерфейс.
Видимо, стоит использовать среду разработки Microsoft Visual Studio (Visual C++):
1. Эта среда обычно используется студентами в курсе информатики для написания собственный программ (у МФТИ есть академическая лицензия от Microsoft, которую,
правда, нельзя использовать для разработки коммерческих продуктов).
2. Эту среду удобно использовать в практикуме для изменения вычислительных алгоритмов (если это потребуется).
Недостатки:
1. Затруднительность портирования программ под Linux (в случае, если это потребуется), особенно в случае использования продукта Microsoft.
2. Разработка на С++ дороже, так как требует очень высокой квалификации (как по
причине сложности языка, так и по причине того, что легко допустить ошибку).
3. Недостаток в данный момент на кафедре C++-программистов, за исключением высококвалифицированных ученых.
3.3 МATLAB
Достоинства:
Концепция практикума по вычислительной математике. Версия 0.7
11
1. Большинство экспертов признают, что среди 4 самых распространенных пакетов для
вычислительных задач лучше всего подходит MATLAB (остальные пакеты либо
более сильны в символьных вычислениях, либо имеют более наглядный пользовательский интерфейс, да и то последнее утверждение весьма спорно).
2. MATLAB – самый распространенный пакет в практических приложениях, в т.ч. среди ученых, занимающихся мат. моделированием (лишь среди ученых-теоретиков более распространены Maple и Mathematica). Во многом, это благодаря существованию и постоянному пополнению плагинов к пакету (toolboxes), которые приспособлены к конкретным практическим задачам. Распространенность пакета важна для заинтересованности студентов в
его изучении.
3. MATLABу нет равных с точки зрения расширяемости и организации его файлов: в
частности, достаточно сложная программа может выглядеть очень компактно и понятно, если правильно спроектировать вызываемые в ней функции.
4. MATLAB имеет богатые возможности настройки разнообразных графиков.
5. На MATLABе можно достаточно легко генерировать свой графический интерфейс,
что делает его похожим на обычную (привычную пользователям) программу
6. Версии MATLAB существуют под несколько платформ, поэтому практикум на основе этого пакета может быть использован под Linux.
Недостатки:
1. Поиск показал отсутствие серьезных русскоязычных методических разработок по
применению MATLAB именно к вычислительной математике (он иногда применяется лишь в простых курсах, где студенты используют готовые функции MATLAB, но
не реализуют численные методы). Это, видимо, связано с тем, что MATLAB сложнее (чем
MathCAD) для «рядового преподавателя», поэтому некому делать такие разработки. Впрочем, этот
недостаток может оказаться достоинством, поскольку разрабатываемый практикум
должен обладать существенной новизной.
2. Первое знакомство с MATLABом происходит очень долго – вследствие его Unixподобной ориентации на интерфейс командной строки.
3. Пока не найдено ни одного специалиста по MATLAB на кафедре.
3.4 MathCAD (возможен вместо MATLAB)
Достоинства и недостатки MathCAD противоположны тому, что написано для MATLAB:
Достоинства:
1. Максимальная наглядность интерфейса (способствующая очень быстрому пониманию готовых документов MathCAD); в т.ч. запись формул в их естественном виде,
неприменение имен функций для большинства математических операторов, в том
числе при символьных вычислениях.
2. Расположение кода численных методов рядом с их результатами, форматированными комментариями, аналитическими выкладками и т.п. (это способствует лучшему
усвоению материала)
3. Имеется большой задел по написанию учебных документов на MathCAD (часть их
используется в курсе «Нелинейные вычислительные процессы» и в курсе «Применение компьютеров в научных исследованиях» на ФАКИ).
Недостатки:
1. Трудоемкость написания сложных программ в MathCAD «с нуля» (людям, умеющим
программировать, проще делать сложные задачи в любом другом пакете, хотя для
простых задач MathCAD «экономичнее»).
2. Затруднительность отладки программ в MathCAD.
3. Относительно небольшой (по сравнению с другими пакетами) набор встроенных
функций и возможностей научной визуализации.
4. Невозможность использования лаб на основе MathCAD под ОС Linux.
Концепция практикума по вычислительной математике. Версия 0.7
12
3.5 Распределение лаб между различными средствами
Программы на языке Java, а тем более программы в математических пакетах, требуют достаточно много вычислительных ресурсов, поэтому наиболее ресурсоемкие лабы по
уравнениям в частных производных будут реализованы, в основном, на языке C++.
Среди них много сложных тем, поэтому только некоторые их этих тем (наиболее простые)
претендуют на повторение в виде указаний студентам по разработке программы «с нуля»
(видимо, это одномерные линейные задачи: решение уравнения переноса явными методами, а также уравнения теплопроводности неявными методами с использованием прогонки). Что касается тем, сложных в программном смысле (например, требующих сложной,
но стандартной визуализации), то здесь наиболее правильным выбором является готовая
программа в математическом пакете (см. ниже).
Лабы на Java будут делаться с использованием общего «контейнера» учебных программ (обладающего достаточно большим количеством общих для разных лаб функций
по визуализации, сохранению в файлы, сравнению расчетов, измерении скорости и др.).
Как следствие, чем более похожими друг на друга (по структуре) будут лабы на Java – тем
более просто будет устроен «контейнер» лаб (это не только сократит затраты на его разработку, но и сделает более понятным в использовании). Поэтому на Java будут реализованы те лабы, которые имеют много общего: это лабы, вычисляющие (непрерывные и сеточные) функции одной переменной и проводящие операции с ними.
В математическом пакете, конечно, можно делать абсолютно все лабы (даже требовательность к вычислительным ресурсам является не очень существенным фактором,
поскольку мощность компьютеров сейчас вполне достаточна). Однако по рассмотренным
выше причинам (см. раздел 2.2) все лабы делать в пакете не имеет смысла, поэтому следует выбирать те лабы, по отношению к которым либо пакет дает дополнительные возможности, либо обычная программа требует слишком больших трудозатрат. Большие трудозатраты требуются обычно на многомерную графику, в то время как стандартные функции
мат. пакета реализуют такую графику без всяких проблем. Есть также возможности мат.
пакетов, которые невозможно хорошо реализовать в обычных программах; к ним относятся, прежде всего, символьные вычисления, которые позволяют проводить аналитические
выкладки (для дифференцирования исходной задачи, для решения уравнений аппроксимации численного метода и т.д.). На данный момент символьное дифференцирование и
решение уравнений аппроксимации решено делать на Java, а от многомерной решенное
отказаться, поэтому все лабы практикума будут делаться НЕ в математическом пакете (однако некоторые лабы будут дублироваться в мат. пакете с тем, чтобы заинтересованные студенты могли выбрать более перспективный «инструмент» выполнения лабы).
В нижеприведенной таблице зеленым цветом показаны ячейки, для которых рекомендуется разработка данной лабораторной работы на базе данного средства и методики.
Неокрашенные непустые ячейки – это места, для которых это сделать удобно, если возникнет необходимость. Если в ячейке таблицы указано «проф.», будет использоваться «не
слишком учебная» («профессиональная») программа; в остальных случаях («уч.») имеется
четкий «учебный маршрут». Если в ячейке таблицы написано «ред.», это означает, что код
программы будет редактироваться студентами (если «(ред.)» – может редактироваться).
Концепция практикума по вычислительной математике. Версия 0.7
13
№
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Лабораторная работа
Название
Погрешности вычислений
СЛАУ. Спектр матриц
НАУ. Локализация корней
СНАУ. Поиск минимума
Интерполяция
Ср.-кв. приближение
Дифференцирование
Интегрирование
Зад. Коши для Нелин. СОДУ
Кр. задача для ОДУ и СОДУ
Уравнение переноса, волновое уравнение
Линейное и нелинейное (uk)
уравнения теплопроводности
Конв.-дифф. уравнение
[2D ур. теплопроводности]
Уравнение Пуассона
Итого лаб:
Приоритет
средний
высокий
средний
низкий
средний
низкий
низкий
низкий
оч. выс.
низ./выс
высокий
Применение программы
Написание программы
Java
C++
Пакет Язык (С/C++ или др.) Пакет
уч.
уч.
уч. (ред.) уч. ред. с нуля (но не спектр)
с нуля
уч.
уч. ред. используя код СЛАУ
уч.
с нуля
уч.
уч. ред.
с нуля
уч.
уч. (ред.) уч.
уч.
уч.
уч.
уч.
уч.
уч.
с нуля
уч.
уч.
(слишком легко?)
уч.
с нуля (нежест, явные)
проф. уч.
(используя ЗК, СНАУ)
уч.?
уч.{лин.} уч.
с нуля (ур.переноса) с нуля
уч. (ред.) уч. ред.
высокий
уч. (ред.) уч. ред. с нуля
низкий
оч. низ.
высокий
проф.
уч.
7
уч.
4
с нуля
с нуля
4
Концепция практикума по вычислительной математике. Версия 0.7
14
Download