- •Антонюк в.А., Задорожный с.С.
- •Первая программа на с. История языка программирования с.
- •Среда программирования «Microsoft Visual Studio.Net».
- •Структура программы.
- •Пример простейшей программы:
- •Представление данных.
- •Операции.
- •Ввод и вывод алфавитно-цифровой информации.
- •Математические функции.
- •Практическое задание №1.
- •Условия в вычислениях. Ветвящиеся и итерационные алгоритмы Условная операция присваивания. Операторы if ... Else и switch.
- •Ветвящиеся алгоритмы.
- •Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while.
- •Практическое задание №2.
- •Функции.
- •Определение функции.
- •Прототипы функций.
- •Вызов по значению и вызов по ссылке.
- •Вычисление функций путем разложения в ряд.
- •Поиск корней функции методом деления отрезка пополам.
- •Поиск корней функции методом касательных.
- •Практическое задание №3.
- •Массивы и указатели. Работа с файлами. Объявления массивов и указателей.
- •Доступ к элементам массива.
- •Передача массивов функциям.
- •Указатели.
- •Динамическое выделение и освобождение памяти.
- •Практическое задание.
- •Потоковые функции.
- •Низкоуровневый ввод и вывод.
- •Ввод и вывод символов, строк, слов.
- •Форматированный ввод и вывод.
- •Потоки cin, cout, cerr.
- •Практическое задание №4.
- •Структуры и объединения. Синтаксис структур.
- •Доступ к элементам структуры.
- •Передача структур в функции.
- •Структуры и битовые поля.
- •Объединения.
- •Дополнительные средства (typedef и enum).
- •Введение в объектно-ориентированное программирование. Принципы объектно-ориентированного программирования.
- •Терминология объектно-ориентированного программирования.
- •Структура как простейший класс.
- •Inline методы.
- •Указатель this.
- •Конструкторы и деструкторы.
- •Перегрузка методов класса.
- •Перегрузка операций.
- •Практическое задание.
- •Производные классы. Полиморфизм
- •Виртуальные функции
- •Использование дружественных функций.
- •Практическое задание.
- •Работа в объектно-ориентированной среде.
- •Объектно-ориентированные стековые операции.
- •Объектно-ориентированные связанные списки.
- •Практическое задание.
- •Классы iostream.
- •Потоковый ввод-вывод.
- •Буферизованные потоки.
- •Строковые потоки.
- •Двоичные файлы.
- •Вычисления в интерактивном режиме.
- •Графика в системе matlab.
- •3. Программирование m-функций.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •Глава 7. Дополнительные возможности системы matlab Объекты и классы. Переопределение операций.
- •Написание расширений matlab на языке c
- •Программные интерфейсы
- •Настройка среды для сборки проекта
- •Пример программы
- •Вызов команд среды matlab из mex-файла
-
Написание расширений matlab на языке c
Существует несколько способов взаимодействия системы MATLAB с внешними программами:
-
Во-первых, можно написать расширение MATLAB на обычных языках программирования, таких как С/С++, Fortran и т.п.
-
Наоборот, можно вызвать вычислительное ядро MATLAB из своей программы и получить результат вычислений среды MATLAB в свою программу. В этом случае MATLAB выступает как своего рода вычислительный сервер для внешней программы.
-
Средой MATLAB можно управлять при помощи команд DDE (Dynamic Data Exchange) или ActiveX (OLE) Automation.
-
Наконец, можно просто обмениваться данными со средой MATLAB через MAT-файлы, структура которых описана в документации к системе.
Нетрудно видеть, что предоставляемый набор способов взаимодействия с системой внешних программ является весьма полным и гибким. Практически все эти способы описаны в документации к системе, однако, так как наиболее часто используется первый способ, сосредоточимся на нем.
Обычно, пользователь-программист работает с системой MATLAB непосредственно, кодируя необходимые алгоритмы на встроенном языке MATLAB. Встроенный язык весьма удобен для написания математических алгоритмов – писать и отлаживать на нем программу обычно занимает значительно меньше времени, чем на обычных языках программирования.
Однако, довольно часто эффективность подобных программ оставляет желать лучшего. Как правило, подобная ситуация возникает, когда алгоритм плохо векторизуется, например, при обработке матриц нельзя выразить этот алгоритм, пользуясь векторными операторами языка MATLAB, и приходится писать вложенные циклы, перераспределять память и т.п. В этом случае программа на языке С будет исполняться во много раз быстрее аналогичной программы на языке MATLAB. А ведь довольно часто время счета математической задачи может исчисляться сутками.
Кроме того, иногда возникают ситуации, когда те или иные сложные алгоритмы уже были реализованы на других языках программирования. В этом случае также будет быстрее не переписывать весь алгоритм на языке MATLAB, но написать относительно небольшой «переходник» от MATLAB к уде существующему на языке С модулю и вызвать его из среды MATLAB напрямую.
Для того, чтобы написать модуль, расширяющий набор функций MATLAB, нужно создать обычную динамическую библиотеку (DLL) для Microsoft Windows со специальным набором функций (интерфейсом). Данная библиотека может быть создана при помощи многих компиляторов языка С/С++, однако, наиболее часто используется компилятор разработки компании Microsoft – Visual C++, одной из последних версий которого (5.0) мы и воспользуемся для подготовки наших примеров.
В документации по системе MATLAB для подобных расширений употребляется термин MEX-файл (Matlab EXtension), и сама MATLAB по этому расширению имени файла может определить, что данный модуль является ее расширением. Хотя, специально назначать MEX в качестве расширения имени файла необязательно, MATLAB может прекрасно работать и со стандартным расширением подобных динамических библиотек – DLL.
Папка \matlab\extern на диске, на котором установлена система, содержит все необходимые файлы-заголовки для программ на С (каталог \matlab\extern\include), а также несколько примеров модулей (\matlab\extern\examples), реализующих некоторые расширения системы, которые приведены целиком в виде исходных текстов программ на С.
Кроме того, имеется папка \matlab\extern\src в которой приведен исходный текст некоторых вспомогательных функций, весьма облегчающий отладку модулей расширения MATLAB.