- •Предисловие
- •Введение
- •Зачем нужен такой практикум?
- •О чем сказано далее
- •О системе MATLAB
- •Первые задачи
- •Фигуры Лиссажу
- •Биения
- •Волны
- •Основные графические объекты и их использование
- •Отрисовка движущихся кривых
- •Об использовании безразмерных переменных
- •Маятник
- •Свободные колебания
- •Вынужденные колебания
- •Переходные колебания
- •Резонанс
- •О случайном движении
- •Движение частиц в центральном поле
- •Траектория финитного движения
- •Влияние малого возмущения
- •Движение двух частиц
- •Случайные блуждания и диффузия
- •Закономерности случайных блужданий
- •Оценка параметров движения броуновской частицы в жидкости
- •Программа, изображающая случайные блуждания
- •Броуновские частицы в поле тяжести
- •Броуновское движение
- •Случайные силы
- •Корреляционные функции
- •Шары
- •Расчет движения шаров
- •Алгоритм расчета
- •Процедура Balls
- •Динамический хаос
- •Почему движение шаров становится непредсказуемым?
- •Как убедиться в появлении хаоса?
- •Функции распределения
- •Стохастический нагрев и стохастическое охлаждение
- •Потери пучка при прохождении через вещество
- •Эффективные сечения
- •Потери частиц пучка при прохождении слоя
- •Потери энергии
- •Распределение по углам и энергиям
- •Работа с сигналами и модель диодного выпрямителя
- •Работа с сигналами
- •Расчет простейших цепей
- •Статическая модель диода. Решение нелинейных уравнений
- •ПРИЛОЖЕНИЕ
- •Свободные колебания
- •Электрические и магнитные поля
- •Частица в магнитной ловушке
- •Фокусировка пучков частиц
- •Концентрация частиц
- •Приближенные методы решения систем дифференциальных уравнений
- •Моделирование распределения случайных величин
- •Компиляция файлов MATLAB
- •Список литературы
- •Работа в командном окне
- •Вход в систему MATLAB
- •Интерактивный доступ к справочной информации и документации
- •Команда hеlр
- •Команда lookfor
- •Меню Help
- •Редактирование и перевызов командной строки
- •Формат вывода
- •Копия протокола сессии
- •Введение матриц
- •Явное определение матриц
- •Функции построения матриц
- •Операции, выражения и переменные
- •Правила записи операторов
- •Матричные операции
- •Операции с массивами
- •Сохранение данных из рабочей области
- •Операторы for, while, if, case и операторы отношения
- •Цикл for
- •Цикл while
- •Условный оператор if
- •Оператор переключения case
- •Условия (операторы отношения)
- •Функция find
- •Функции MATLAB
- •Скалярные функции
- •Векторные функции
- •Матричные функции
- •M-файлы
- •Файлы-программы, или сценарии
- •Файлы-функции
- •Текстовые строки, сообщения об ошибках, ввод
- •Работа с m-файлами
- •Список путей доступа
- •Работа со списком путей доступа
- •Текущий каталог
- •Средство просмотра и редактирования путей доступа Path Browser
- •Использование редактора/отладчика
- •Отладка m-файлов
- •Сравнение алгоритмов: flops и etime
- •Графика
- •Плоские графики
- •Команда plot
- •Разметка графика и надписи
- •Управление осями при выводе графиков
- •Несколько графиков на листе
- •Специальные виды графиков
- •Столбиковые диаграммы
- •Ступенчатые кривые
- •Гистограммы
- •Изображение функций
- •Трехмерные изображения
- •Одномерная кривая
- •Сеточные поверхности
- •Изолинии
- •Дескрипторная графика (графика низкого уровня)
- •Графические объекты и их иерархия
- •Дескрипторы и работа с ними
- •Свойства графических объектов и работа с ними. Функции get и set
- •Движущиеся графики (анимация)
- •Разработка графического интерфейса пользователя
- •Создание внешнего вида интерфейса
- •Способы взаимодействия графического интерфейса с функциями пользователя
- •Общая структура функции NAME.M графического интерфейса
- •Функционирование графического интерфейса
- •Разработка функции Run
- •Разработка функции Exit
- •Разработка функции Edit
Функция Действие
fscanf |
читать данные из файла по формату |
F.Компиляция файлов MATLAB
MATLAB - язык, ориентированный на работу с матрицами. Вычисления, которые удается записать в матричном виде, выполняются достаточно быстро. Однако векторизовать программу удается не всегда, а в этом случае MATLAB будет проигрывать в скорости языкам более низкого уровня, например С.
Существует несколько способов ускорить вычисления:
•перевести текстовые m-файлы в p-файлы, содержащие внутренний код MATLAB
(pcode)
•откомпилировать m-файлы в dll-библиотеки (mcc)
•написать наиболее медленные части программы в виде функций на С или Фортране, откомпилировать их в dll-библиотеки и вызывать из MATLAB.
F.1. Использование команды pcode
Этот способ дает выигрыш в скорости, если программа очень длинная или имеется много вызовов различных функций в m-файлах. Если в программе многократно вызывается одна и та же функция, то она переводится в p-файл при первом вызове и хранится в этом виде для будущих вызовов. В этом случае выигрыш в скорости будет мал. Возможные форматы вызова:
•pcode file1 (file2 ...) переводит file1.m в file1.p и т.д., file1.m может находиться в любой директории, путь на которую указан в pathdef.m, file1.p создается в текущей директории
•pcode *.m переводит все m-файлы в текущей директории в p-файлы
•pcode file1 (file2 ...) -inplace создает p-файл в той же директории, где был m-файл.
F.2. Использование команды mcc
Второй способ позволяет перевести функции MATLAB в исполняемый код, что позволяет ускорить программу на 20-40%. Кроме того, полученную dll-библиотеку можно использовать в любом языке: например, вызывать графические функции
102
MATLAB из программы на С или Фортране. Для компиляции m-файлов необходимы:
•компилятор С, поддерживающий создание dll-библиотек (Borland C/C++ 5.x, Microsoft Visual C++ 4.2 или 5.0, Watcom C/C++ 10.6 или 11)
•MATLAB Compiler (необходимо указать при установке MATLAB)
Команда mcc с различными ключами также позволяет перевести m-файл в С- файл, откомпилировать программу MATLAB в исполняемый файл (который можно будет выполнять на компьютерах, где MATLAB не установлен), и др.
F.3. Использование команды mex
Третий способ не имеет прямого отношения к MATLAB. Можно написать любую функцию на С (или Фортране), включить ее в dll-библиотеку, а затем вызывать из MATLAB. Для создания dll-библиотеки необходимо кроме самой функции на С написать еще одну функцию, передающую входные аргументы вызывающей программы в функцию и возвращающую выходные аргументы вызывающей программе. При этом файл с программой на С (timestwo.c) имеет следующий формат:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#include "mex.h"
/*
*timestwo.c - пример взят из API-guide
*Функция умножает скаляр на 2.
*
*Это MEX-file для MATLAB.
*Copyright (c) 1984-1998 The MathWorks, Inc. */
/* $Revision: 1.5 $ */
void timestwo(double y[], double x[])
{
y[0] = 2.0*x[0];
}
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
103
double *x,*y; int mrows,ncols;
/* Check for proper number of arguments. */ if(nrhs!=1)
{
mexErrMsgTxt("One input required.");
}
else if(nlhs>1)
{
mexErrMsgTxt("Too many output arguments");
}
/* The input must be a noncomplex scalar double.*/ mrows = mxGetM(prhs[0]);
ncols = mxGetN(prhs[0]);
if( !mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows==1 && ncols==1) ) {
mexErrMsgTxt("Input must be a noncomplex scalar double.");
}
/* Create matrix for the return argument. */
plhs[0] = mxCreateDoubleMatrix(mrows,ncols, mxREAL);
/* Assign pointers to each input and output. */ x = mxGetPr(prhs[0]);
y = mxGetPr(plhs[0]);
/* Call the timestwo subroutine. */ timestwo(y,x);
}
Здесь описана функция timestwo, умножающая число на два, и функция mexFunction, которая принимает входной аргумент x и возвращает выходной y. Аргументами последней являются:
nlhs - число выходных аргументов dll-функции
nrhs - число входных аргументов
*plhs[ ] - массив указателей на первые элементы выходных аргументов
*prhs[ ] - массив указателей на первые элементы входных аргументов.
104
Имеется множество функций для передачи переменных разнообразных типов и вывода сообщений (например mxGetPr и mxGetPi - для получения указателей на реальную и мнимую часть входного массива, mxGetString - для получения указателя на строку, mxGetN и mxGetM для получения размеров массива, mxCreateNumericArray,
mxCreateDoubleMatrix, mxCreateString - для задания указателей на массивы, матрицы и строки, и т.д. Полный список можно посмотреть в файле
\matlab5.2\help\techdoc\AP IREF \AP IREF T OC.HT ML
Если откомпилировать этот файл, то функцию timestwo можно будет вызывать из MATLAB. Формат вызова mex:
mex -setup необходимо запускать после установки нового компилятора С (или фортрана), а также один раз после установки MATLAB.
mex file компилирует file.c и создает file.dll.
Различные дополнительные ключи можно узнать, набрав help mex в окне MATLAB.
105