Концепция программно-методического продукта «Лабораторный практикум по вычислительной математике»

Вид материалаПрактикум
3Технические средства реализации практикума
3.4MathCAD (возможен вместо MATLAB)
3.5Распределение лаб между различными средствами
В математическом пакете
Лабораторная работа
Подобный материал:
1   2   3   4   5   6

3Технические средства реализации практикума


[Данный раздел неинтересен для большинства участников проекта]

Ввиду недостаточного числа «идеально подходящих» участников проекта, необходимо использовать всех имеющихся людей и по максимуму использовать все имеющиеся у них наработки. Следует по возможности ничего не делать «с нуля»; а то, что «с нуля», следует делать наиболее экономным способом. Из этого следует, что необходимо использовать довольно разнообразные программные средства: два языка программирования (C++ и Java; а также Fortran для проверочных программ) и один математический пакет (MATLAB). Причины выбора этих инструментов указаны в подразделах этого раздела.

Примечание. В курсе «Нелинейных вычислительных процессов» будет использоваться язык программирования Fortran (на нем написаны все имеющиеся лабы; писать на Fortran дешевле, чем на C++, но практически невозможно писать графический интерфейс), а также математический пакет – прежде всего, для аналитического преобразования формул и для представления областей устойчивости, монотонности и n-ого порядка аппроксимации (имеются наработки в MathCAD, хотя логичнее тот же MATLAB).

3.1Java


Достоинства:
  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


Достоинства:
  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.4MathCAD (возможен вместо MATLAB)


Достоинства и недостатки MathCAD противоположны тому, что написано для MATLAB:

Достоинства:
  1. Максимальная наглядность интерфейса (способствующая очень быстрому пониманию готовых документов MathCAD); в т.ч. запись формул в их естественном виде, неприменение имен функций для большинства математических операторов, в том числе при символьных вычислениях.
  2. Расположение кода численных методов рядом с их результатами, форматированными комментариями, аналитическими выкладками и т.п. (это способствует лучшему усвоению материала)
  3. Имеется большой задел по написанию учебных документов на MathCAD (часть их используется в курсе «Нелинейные вычислительные процессы» и в курсе «Применение компьютеров в научных исследованиях» на ФАКИ).

Недостатки:
  1. Трудоемкость написания сложных программ в MathCAD «с нуля» (людям, умеющим программировать, проще делать сложные задачи в любом другом пакете, хотя для простых задач MathCAD «экономичнее»).
  2. Затруднительность отладки программ в MathCAD.
  3. Относительно небольшой (по сравнению с другими пакетами) набор встроенных функций и возможностей научной визуализации.
  4. Невозможность использования лаб на основе MathCAD под ОС Linux.

3.5Распределение лаб между различными средствами


Программы на языке Java, а тем более программы в математических пакетах, требуют достаточно много вычислительных ресурсов, поэтому наиболее ресурсоемкие лабы по уравнениям в частных производных будут реализованы, в основном, на языке C++. Среди них много сложных тем, поэтому только некоторые их этих тем (наиболее простые) претендуют на повторение в виде указаний студентам по разработке программы «с нуля» (видимо, это одномерные линейные задачи: решение уравнения переноса явными методами, а также уравнения теплопроводности неявными методами с использованием прогонки). Что касается тем, сложных в программном смысле (например, требующих сложной, но стандартной визуализации), то здесь наиболее правильным выбором является готовая программа в математическом пакете (см. ниже).

Лабы на Java будут делаться с использованием общего «контейнера» учебных программ (обладающего достаточно большим количеством общих для разных лаб функций по визуализации, сохранению в файлы, сравнению расчетов, измерении скорости и др.). Как следствие, чем более похожими друг на друга (по структуре) будут лабы на Java – тем более просто будет устроен «контейнер» лаб (это не только сократит затраты на его разработку, но и сделает более понятным в использовании). Поэтому на Java будут реализованы те лабы, которые имеют много общего: это лабы, вычисляющие (непрерывные и сеточные) функции одной переменной и проводящие операции с ними.

В математическом пакете, конечно, можно делать абсолютно все лабы (даже требовательность к вычислительным ресурсам является не очень существенным фактором, поскольку мощность компьютеров сейчас вполне достаточна). Однако по рассмотренным выше причинам (см. раздел 2.2) все лабы делать в пакете не имеет смысла, поэтому следует выбирать те лабы, по отношению к которым либо пакет дает дополнительные возможности, либо обычная программа требует слишком больших трудозатрат. Большие трудозатраты требуются обычно на многомерную графику, в то время как стандартные функции мат. пакета реализуют такую графику без всяких проблем. Есть также возможности мат. пакетов, которые невозможно хорошо реализовать в обычных программах; к ним относятся, прежде всего, символьные вычисления, которые позволяют проводить аналитические выкладки (для дифференцирования исходной задачи, для решения уравнений аппроксимации численного метода и т.д.). На данный момент символьное дифференцирование и решение уравнений аппроксимации решено делать на Java, а от многомерной решенное отказаться, поэтому все лабы практикума будут делаться НЕ в математическом пакете (однако некоторые лабы будут дублироваться в мат. пакете с тем, чтобы заинтересованные студенты могли выбрать более перспективный «инструмент» выполнения лабы).

В нижеприведенной таблице зеленым цветом показаны ячейки, для которых рекомендуется разработка данной лабораторной работы на базе данного средства и методики. Неокрашенные непустые ячейки – это места, для которых это сделать удобно, если возникнет необходимость. Если в ячейке таблицы указано «проф.», будет использоваться «не слишком учебная» («профессиональная») программа; в остальных случаях («уч.») имеется четкий «учебный маршрут». Если в ячейке таблицы написано «ред.», это означает, что код программы будет редактироваться студентами (если «(ред.)» – может редактироваться).

Лабораторная работа

Приоритет

Применение программы

Написание программы



Название

Java

C++

Пакет

Язык (С/C++ или др.)

Пакет

1

Погрешности вычислений

средний

уч.













2

СЛАУ. Спектр матриц

высокий

уч.

уч. (ред.)

уч. ред.

с нуля (но не спектр)

с нуля

3

НАУ. Локализация корней

средний

уч.

уч.

уч. ред.

используя код СЛАУ

с нуля

4

СНАУ. Поиск минимума

низкий

уч.




уч. ред.




с нуля

5

Интерполяция

средний

уч.

уч. (ред.)

уч.







6

Ср.-кв. приближение

низкий

уч.

уч.

уч.







7

Дифференцирование

низкий

уч.

уч.

уч.

с нуля




8

Интегрирование

низкий

уч.




уч.

(слишком легко?)




9

Зад. Коши для Нелин. СОДУ

оч. выс.

проф.

уч.

уч.

с нуля (нежест, явные)




10

Кр. задача для ОДУ и СОДУ

низ./выс

уч.?

уч.{лин.}

уч.

(используя ЗК, СНАУ)




11

Уравнение переноса, волновое уравнение

высокий




уч. (ред.)

уч. ред.

с нуля (ур.переноса)

с нуля

12

Линейное и нелинейное (uk) уравнения теплопроводности

высокий




уч. (ред.)

уч. ред.

с нуля

с нуля

13

Конв.-дифф. уравнение

низкий




проф.










14

[2D ур. теплопроводности]

оч. низ.
















15

Уравнение Пуассона

высокий

уч.




уч.




с нуля




Итого лаб:




7

4

4












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