Главная страница

Практикум по матлабу. практикум по матлабу. Физических процессов с использованием


Скачать 1.13 Mb.
НазваниеФизических процессов с использованием
АнкорПрактикум по матлабу
Дата21.06.2021
Размер1.13 Mb.
Формат файлаpdf
Имя файлапрактикум по матлабу.pdf
ТипУчебное пособие
#219898
страница10 из 17
1   ...   6   7   8   9   10   11   12   13   ...   17
a = polyfit(x,y,1);
% Вычисление коэффициентов
y1 = polyval(a,x);
% Расчет аппроксимирующих значений
Подробнее об этих функциях и их возможностях вы можете узнать во встроен- ной помощи (
help polyfit) или в [
2
,
3
,
6
].
90

D.
Моделирование распределения случайных
величин
Датчик случайных чисел
rand является встроенной функцией системы MATLAB.
При каждом обращении возвращает случайное число из равномерного распределе- ния на интервале (0,1).
Легко построить функцию, гене-
Рис. 17. Функция отбраковки рирующую равномерное распреде- ление на произвольном интервале
[А,В]:
Х=А+(В-А)*rand.
Пусть нужно получить значения случайной величины Х, распреде- ленной на интервале [А,В] с плот- ностью f
(X) (рис.
17
). Выберем прямоугольник АВСD, высота ко- торого Н не меньше максималь- ного значения функции f
(X) на
[А,В].
Будем набрасывать на прямоугольник точки равномерно по его площади и бра- ковать те из них, которые попадают выше кривой f
(X). Значения Х для приня-
тых точек и будут реализовать искомое распределение, т.е получаемые значения
X будут распределены на интервале [A,B] с плотностью f
(X).
Участок программы, реализующий этот алгоритм, может выглядеть, например, сле- дующим образом:
.......................
x=A+(B-A)*rand;
while (f(x) < H*rand)
x=A+(B-A)*rand;
end;
.......................
При этом функция f
(X) должна быть описана в смысле функции MATLAB.
При каждом обращении он будет давать значение X из требуемого распределения.
Ясно, что чем больше площадь над кривой f
(X), тем реже мы будем браковать точки. Поэтому лучше всего выбрать Н равным максимальному значению f
(X).
Указанный способ позволяет генерировать и многомерные распределения случай- ных величин.
91

Еще одна важная задача, возникающая при моделировании угловых распреде- лений, – это реализация равномерного (изотропного) распределения в простран- стве. Если задавать направление единичным вектором, выходящим из начала ко- ординат, то концы таких векторов расположены на поверхности единичной сферы.
Равная вероятность для любого направления означает, что конец вектора – случай- ная точка
Ω, равномерно распределенная на поверхности этой сферы. Вероятность того, что
Ω окажется в любом элементе поверхности dS , равна dS/4π. Выбирая на поверхности сферы сферические координаты
(θ, ϕ) с полярной осью ОZ, име- ем dS
= sin θdθdϕ, где 0 ≤ θ ≤ π, 0 ≤ ϕ ≤ 2π. Для получения (розыгрыша)
случайного направления нам понадобятся два случайных числа. Соответствующий участок программы имеет вид
.................
C=2.0*rand-1;
Fi=2.0*pi*rand;
.................
Здесь
Fi – угол ϕ , а С – косинус угла θ.
В системе MATLAB есть также встроенная функция, задающая нормальное распределение –
randn(m,n). Эта функция генерирует матрицу m x n случайных чисел с нормальным распределением. Это распределение имеет нулевое среднее и единичную дисперсию.
92

E.
Краткий справочник по функциям MATLAB
Краткий справочник по функциям MATLAB содержит 20 основных групп функ- ций. По команде
help осуществляется вывод списка этих групп. По команде help
<имя группы> выводится список функций, содержащихся в этой группе. Поря- док, в котором приведены далее группы функций, может служить указателем для всего краткого справочника.
Функция
Действие
Группы функций
general команды общего назначения ops операторы и специальные символы lang конструкции языка elmat элементарные матрицы и действия с матрицами specmat специальные матрицы elfun элементарные математические функции specfun специальные математические функции matfun матричные функции -численные методы линейной алгебры datafun обработка данных и преобразование Фурье polyfun полиномиальные функции и интерполяция sparfun работа с разреженными матрицами plotxy двумерная графика plotxyz трехмерная графика graphics графические функции общего назначения color управление цветом и освещением sounds функции работы со звуком strfun функции работы со строковыми переменными iofun функции ввода/вывода низкого уровня demos демонстрации и примеры
Клавиши редактирования
(Ctrl+P)
Вызов предыдущей строки
(Ctrl+N)
Вызов следующей строки
Команды общего назначения
Управление командами и функциями demo запуск демонстрационных примеров help онлайновая помощь lookfor поиск ключевых слов в помощи
93

Функция
Действие path исполняемая команда операционной системы what список M-, MAT-, и MEX-файлов в директории
Управление переменными и рабочим пространством clear очистка переменных и функций в памяти length длина вектора load восстановить переменные с диска save сохранить переменные рабочей области на диске size размерность матрицы who список текущих переменных whos список текущих переменных, развернутая форма.
Работа с файлами и операционной системой cd сменить текущую рабочую директорию delete удалить файл diary сохранить в файле протокол текущей сессии dir листинг текущей директории
!
Выполнять команду DOS
Управление командным окном clc
Очистить командное окно echo
Печатать выполняемые команды программы
Запуск и выход из MATLAB’а quit выйти из MATLAB’а startup файл, выполняемый при запуске MATLAB’а
Операторы и специальные символы
Арифметические и матричные операторы
*
умножение матриц
.*
поэлементное умножение матриц
ˆ
возведение матрицы в степень

возведение элементов матрицы в степень kron тензорное произведение матриц
\
левое деление матриц
/
правое деление матриц
./
поэлементное деление матриц

эрмитовское сопряжение
.’
транспонирование
Операторы отношения
94

Функция
Действие
>
больше
<
меньше
>
=
больше или равно
<
=
меньше или равно
==
равно
˜=
не равно
Логические операторы
&
и (AND)
|
или (OR)
˜
не (NOT)
xor исключающее или (XOR)
Специальные символы десятичная точка родительская директория продолжение (перенос на следующую строку)
%
комментарий
Логические функции all истина, если верно для всех элементов матрицы any истина, если верно хотя бы для одного элемента матрицы exist проверяет, существует ли переменная или функция find находит индексы ненулевых элементов finite истина для конечных элементов
Языковые конструкции и отладка
MATLAB как язык программирования eval выполнить строку feval выполнить функцию function определить функцию global сделать переменную глобальной nargchk установить кол-во входных аргументов
Операторы управления break выйти из цикла end конец цикла или условного оператора error выдать сообщение и прекратить выполнение функции for цикл с заданным числом повторений if,else, elseif условные операторы
95

Функция
Действие return возврат в вызвавшую функцию while цикл с неопределенным числом повторений
Интерактивный ввод input ожидает ввод пользователя pause ожидает нажатия клавиши (или заданное время)
Матрицы и операции с ними
Элементарные матрицы eye единичная матрица linspace вектор с равноотстоящими элементами logspace вектор с равноотстоящими в логарифмическом масштабе элементами meshgrid задает двумерную сетку для 3d-графика ones матрица единиц rand равномерно распределенные случайные числа randn нормально распределенные случайные числа zeros нулевая матрица
:
вектор с равноотстоящими элементами
Специальные переменные и константы ans результат последней операции eps относительная точность вычислений с плавающей запятой flops счетчик числа операций с плавающей запятой i,j мнимая единица inf бесконечность nargin кол-во входных параметров функции nargout кол-во выходных параметров функции pi число π
realmax максимальное действительное число realmin минимальное действительное число
Дата и время clock время cputime затраченное время процессора date дата etime затраченное время tiс,toс запуск-останов времени
Операции с матрицами
96

Функция
Действие diag выделить диагональ fliplr отразить матрицу по строкам flipud отразить матрицу по столбцам reshape изменить размер rot90
повернуть матрицу на 90 градусов tril выделить нижнюю треугольную часть матрицы triu выделить верхнюю треугольную часть матрицы
Математические функции
Элементарные математические функции abs модуль acos арккосинус acosh гиперболический арккосинус angle угол asin арксинус asinh гиперболический арксинус atan арктангенс atanh гиперболический арктангенс conj сопряжение cos косинус cosh гиперболический косинус exp экспонента imag мнимая часть log натуральный логарифм log10
десятичный логарифм real действительная часть rem остаток от деления round округление до ближайшего целого sign сигнум-функция (знак)
sin синус sinh гиперболический синус sqrt квадратный корень tan тангенс tanh гиперболический тангенс
Спецфункции bessel функция Бесселя besselh функция Ганкеля
97

Функция
Действие betainс неполная бета-функция betaln логарифм бета-функции ellipj эллиптическая функция Якоби ellipke полный эллиптический интеграл erf функция ошибок erfinv обратная функция ошибок gamma гамма-функция gammaln логарифм гамма-функции gammainc неполная гамма-функция
Функции от матриц - линейная алгебра
Матричный анализ cond число обусловленности det определитель norm норма orth ортогонализация rank ранг trace сумма диагональных элементов
Системы линейных уравнений inv обратная матрица
\ or /
решение линейной системы
Собственные значения eig собственные значения и собственные вектора poly характеристический полином
Функции от матриц expm матричная экспонента, 4 варианта funm любая функция от матриц logm логарифм матрицы sqrtm корень из матрицы
Обработка данных и преобразование Фурье
Основные операции cumprod произведение элементов с накоплением cumsum сумма элементов с накоплением max максимальный элемент mean среднее значение min минимальный элемент
98

Функция
Действие prod произведение всех элементов sort сортировка по возрастанию std дисперсия sum сумма всех элементов trapz интегрирование методом трапеций
Конечные разности diff численное дифференцирование gradient градиент
Корреляция corrcoef коэффициенты корреляции cov матрица ковариации
Фильтрация и конволюция conv конволюция и умножение полиномов deconv деконволюция и деление полиномов filter цифровой фильтр
Преобразование Фурье abs модуль angle фаза fft дискретное преобразование Фурье fftshift сдвигает 0 в середину спектра ifft обратное дискретное преобразование Фурье nextpow2
ближайшая большая степень двойки
Полиномиальные и интерполяционные функции
Полиномиальные функции conv умножение полиномов deconv деление полиномов poly задать полином с известными корнями polyder производная полинома polyfit аппроксимация полиномом данных polyval вычислить полином polyvalm вычислить полином от матрицы roots корни полинома
Интерполяция данных interp1
интерполяция
Функции от функций
99

Функция
Действие
Нелинейные численные методы fmin минимизирует функцию одной переменной fmins минимизирует функцию нескольких переменных fzero находит 0 функции ode23
решает систему дифференциальных уравнений (несколько вариантов)
quad численно вычисляет интеграл
Двумерная графика
Элементарная x-y графика comet отрисовка плоской траектории fill рисует закрашенный многоугольник line рисует график loglog график с логарифмическими осями plot линейный график semilogx график с логарифмической осью х semilogy график с логарифмической осью y
Специализированные графики bar рисует диаграмму errorbar график экспериментальных данных с ошибкой измерения fplot график функции hist насчитывает и рисует гистограмму polar график в полярных координатах
Разметка графика grid показать сетку gtext выводит текст, перемещаемый с помощью мыши text выводит текст в заданные координаты title выводит название графика xlabel подпись оси x ylabel подпись оси y
Трехмерная графика comet3
отрисовка 3-мерной траектории plot3
рисует линии и точки в 3d contour рисует изолинии image выводит рисунок mesh
3d поверхность
100

Функция
Действие surf
3d поверхность с тенями colormap задает цветовую палитру
Графические функции общего назначения
Создание и контроль окна графика clf очистить окно close закрыть окно figure создать окно gcf получить дескриптор активного окна
Создание и контроль осей axes создать оси axis задать масштаб и внешний вид осей cla очистить активные оси gca получить дескриптор активных осей hold on/off рисовать поверх или стирая subplot разбить окно на несколько графиков
Операции управления графикой delete удалить объект drawnow нарисовать всю накопленную графику get получить свойства объекта reset восстановить свойства объекта (по умолчанию)
set установить свойства объекта print печатать график
Строковые функции
setstr преобразует число в строку strcmp сравнить строки int2str преобразует целое число в строку num2str преобразует число в строку str2num преобразует строку в число
Функции ввода/вывода
fclose закрыть файл fopen открыть файл fread читать бинарный файл fwrite писать в бинарный файл fgetl прочитать строку из файла fprintf писать данные в файл по формату
101

Функция
Действие 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 eachinput and output. */
x = mxGetPr(prhs[0]);
1   ...   6   7   8   9   10   11   12   13   ...   17


написать администратору сайта