Сделай Сам Свою Работу на 5

Инструменты проектирования





УДК 336.67

Печатается по решению Редакционно-издательского

Редакционно-издательского Совета факультета ВМК Казанского государственного университета

Протокол №1 от 5 февраля 2010 г.

Научный редактор

Доктор физ.-мат. наук, проф. И.Б.Бадриев

Авторы:

Доктор физ.-мат.наук В.Р.Фазылов

Кандидат физ.-мат. наук О.Н.Шульгина,

Кандидат физ.-мат. наук Н.К.Щербакова.

Рецензенты:

Кандидат физ.-мат. наук, доц. КГУ М.Н.Николаев,

Кандидат физ.-мат. наук, доц. ТГГПУА.А.Попов.

К настоящему времени издано и продолжает издаваться большое число учебников и учебных пособий, знакомящих с системой MATLAB. Однако большинства из них ограничивается описание возможностей системы и знакомству с основными принципами программирования в MATLABе. Целью настоящего учебного пособия явилось демонстрация возможностей MATLAB как инструмента, облегчающего разработку и анализ возможностей алгоритмов на примере алгоритмов решения некорректных задач.

Первая глава посвящена описанию основных принципов работы с MATLAB. Во Вторая глава посвящена методам решения некорректных задач. Алгоритм обработки экспериментальных данных методом опорных векторов с составным шагом описан в третьей главе. Там же показана его реализация средствами MATLAB. Четвертая глава посвящена методам интерполяции и аппроксимации данных. В пятой главе представлен алгоритм выделения элементарных составляющих из сложного сигнала.



Настоящее учебное пособие может быть полезно для студентов, обучающихся по специальностям “Математические методы в экономике” и “Прикладная математика”.

© Казанский государственный

университет, 2010

 

© Фазылов В.Р.,2010

 

Введение.

МATLAB [1,2] выполняет множество задач для поддержки научных и инженерных работ, начиная от сбора и анализа данных до разработки приложений. Среда MATLAB объединяет математические вычисления, визуализацию и мощный технический язык. Встроенные интерфейсы позволяют получить быстрый доступ и извлекать данные из внешних устройств, файлов, внешних баз данных и программ.

MATLAB содержит много функций для осуществления математических вычислений и анализа данных, включая:

  • Линейную алгебру и арифметику матриц, линейные уравнения, собственные значения, сингулярные значения и матричные разложения
  • Полиномы и интерполяцию – стандартные полиномиальные операции, такие как вычисление корней полиномов, дифференцирование, аппроксимация кривыми и разложение функций
  • Обработка сигналов – цифровые фильтры, быстрое преобразование Фурье и свертка
  • Анализ данных и статистика – описательная статистика, предварительная обработка данных, регрессия, аппроксимация кривыми, фильтрация данных
  • MATLAB-функции, работающие не с массивами данных, а с математическими функциями, включая функции построения графиков, оптимизации, нахождения нулей и численного интегрирования
  • Дифференциальные уравнения – решение дифференциальных уравнений, включая задачи с начальными значениями для обыкновенных дифференциальных уравнений и дифференциально-алгебраические уравнения, а также задачи с граничными условиями и смешанного типа для систем эллиптических и параболических уравнений с частными производными.

Унифицированный интерактивный язык и среда программирования



Язык MATLAB разработан для интерактивных и автоматических вычислений. С оптимизированными матричными функциями можно осуществить интерактивный анализ, в то же время языковые возможности структурирования программ позволят эффективно разрабатывать пользовательские алгоритмы и приложения. Универсальный язык позволяет решать множество задач, включая сбор данных, анализ, разработку алгоритмов, имитацию систем и разработку приложений. Возможности языка включают структуры данных, объектно-ориентированное программирование, инструменты разработки графического пользовательского интерфейса, функции отладки и возможность подключать C, C++, Fortran и Java процедуры.



Упрощение кода за счет векторизации

Многие математические функции MATLAB оперируют непосредственно с векторами и матрицами. В результате задачи, которые могли бы включать десятки строк и требовали интенсивных вычислений с циклами на языке С, требуют вызова только одной функции в MATLAB. Более короткие программы требуют меньше времени на их выполнение и легче настраиваются.

Интуитивный язык

Тот же самый язык используется в MATLAB при интерактивных вычислениях и при разработке программ в редакторе-отладчике.

Инструменты проектирования

MATLAB включает множество инструментов для поддержки разработки аналитических процедур, алгоритмов и законченных приложений. Эти инструменты включают:

  • Командное окно для интерактивных вычислений и проектирования
  • Окно Command History для записи всех команд в течение интерактивной MATLAB сессии
  • Инструмент Current Directory для нахождения и навигации по файлам и директориям
  • Редактор-отладчик M-файлов позволяет
    • разрабатывать и отлаживать M-файлы (функций и сценариев)
    • выделять различными цветами резервные слова и комментарии, проверяет скобки и позволяет пошаговое выполнение кода
    • нумеровать строки
    • устанавливать контрольные точки, останавливаться на ошибке или на предупреждении
    • вычислять переменные по месту нахождения
    • получать контекстно-чувствительную справка по функциям
  • Программа протоколирования производительности M-файлов
    • вычисляет время, затрачиваемое в каждой строке функции
    • выводит отчет (или график) распределения времени .

MATLAB содержит инструменты для:

  • Сбора данных
  • Анализа и обработки данных
  • Визуализации и цифровой обработки сигналов и изображений
  • Создания алгоритмов и проектирования
  • Моделирования и имитации
  • Программирования и разработки приложений

В настоящей работе на примере задач обработки экспериментальных данных показан весь цикл разработки алгоритмов при помощи MATLAB, начиная от написания и отладки программы и заканчивая анализом границ применимости алгоритма.

 

Глава 1. Основы работы с системой Matlab.

 

Система Matlab построена таким образом, что любые вычисления можно проводить в режиме прямых вычислений (командном режиме), то есть без подготовки программ. Работа с системой в режиме прямых вычислений носит диалоговый характер. Пользователь набирает на клавиатуре вычисляемое выражение, редактирует его в командной строке, если в этом возникает необходимость и завершает ввод нажатием клавиши Enter.

Основные правила работы в командном режиме:

· для приглашения ввода исходных данных или команды используется символ >>;

· встроенные функции (например, cos) записываются строчными буквами, а их аргументы записываются в круглых скобках;

· для блокировки вывода результата вычислений некоторого выражения после него нужно установить знак ; (точка с запятой);

· если не указана переменная, на которую записывается результат вычислений, то Matlab назначает такую переменную с именем ans;

· результат вычислений выводится в строках вывода (без знака >>).

Пример записи вычислений.

» 6+12

ans =

» y=1;

» f=cos(1)

f =

0.5403

Сеанс работы с MATLAB принято называть сессией. Сессия является текущим документом, отражающим работу пользователя с системой. Полученные в ходе сессии значения переменных и функций, расположенные в рабочей области памяти можно записать в файл с форматом .mat, используя команду save. Команда load позволяет загрузить данные из файла в рабочую область. Фрагменты сессии можно оформить в виде дневника командой diary.

Работа в режиме сессии не является программированием. В MATLAB процесс программирования путем задания последовательности действий, записанной в виде m-файла. Для создания m-файлов может использоваться как встроенный редактор, так и любой текстовый редактор, поддерживающий формат ASCII. Подготовленный и записанный на диск m-файл становится частью системы, и его можно вызвать как из командной строки, так и из другого m-файла. Существует два типа m-файлов: файлы-сценарии и файлы-функции.

Файл-сценарий является просто записью серии команд без входных и выходных параметров. Он имеет следующую структуру:

%Основной комментарий

%Дополнительный комментарий

Тело файла с любыми выражениями.

Свойства файлов-сценариев:

· они не имеют входных и выходных аргументов

· работают с данными из рабочей области;

· в процессе выполнения не компилируются.

Основной комментарий выводится при выполнении команд lookfor (поиск m-файла по ключевому слову) и help имя_каталога. Полный комментарий выводится при выполнении команды help имя_файла.

Пример файла-сценария.

%Plot with color yellow

%Строит график косинусоиды в интервале [xmin,xmax] желтого цвета

% c наброшенной масштабной сеткой

x=xmin:0.1:xmax;

plot (x,sin(x),’y’)

grid on

Этот файл нельзя запустить без предварительной подготовки, заключающейся в задании в сессии значений переменных xmin, xmax. Переменные, используемые в файлах-сенариях являются глобальными и действуют одинаково в командах сессии и в внутри файла-сценария. Поэтому заданные в сессии значения переменных используются и в теле функции. Имена файлов-сценариев нельзя использовать в качестве параметров функций, поскольку файлы-сценарии не возвращают значений.

Файл-функция является типичным объектом языка программирования системы MATLAB. Он содержит входные и выходные параметры и использует аппарат локальных переменных. Структура файла-сценария с одним выходным параметром имеет вид:

function var=f_name(Список_параметров)

%Основной комментарий

%Дополнительный комментарий

%Тело файла с любыми выражениями

var=выражение

Свойства файлов-функций:

· он начинается с объявления function, после которого указывается имя переменной var – выходного параметра, имя самой функции и список ее входных параметров;

· функция возвращает свое значение и может использоваться в виде name(Список_параметров) в математических выражениях;

· все переменные, используемые в файла-функциях являются локальными;

· правила ввода комментариев те же, что у файлов-сценариев;

· файл-функция служит средством расширения системы MATLAB;

· при обнаружении файла-функции он компилируется и эатем исполняется, а созданные машинные коды хранятся в рабочей области системы MATLAB.

Если выходных параметров больше одного, то они указываются в квадратных скобках после слова function.

function [va1,var2,…]=f_name(Список_параметров)

%Основной комментарий

%Дополнительный комментарий

%Тело файла с любыми выражениями

var1=выражение

var2=выражение

Такая функция во многом напоминает процедуру. Ее нельзя слепо использовать непосредственно в математических выражениях, поскольку она возвращает не единственный результат. Если функция используется как имеющая единственный выходной параметр, но имеет ряд выходных параметров, то для возврата значения будет использоваться первый из них.

Для языка системы MATLAB различие между командами (выполняемыми в сессии) и программными операторами (выполняемыми из m-файла) является условным. И команды и программные операторы могут выполнятся из программы и в режиме прямых вычислений.

MATLAB имеет интерактивную систему помощи, которая реализуется с помощью ряда команд. Одной из них является команда

»help

которая выводит весь список папок, содержащих m-файлы. Для получения справки по какому-либо конкретному объекту используются команды

»help имя

где имя- имя объекта, для которого требуется вывод справочной информации. Это может быть функция, константа и т.д.

Пример справки по функции sin.

» help sin

SIN Sine.

SIN(X) is the sine of the elements of X.

Overloaded methods

help sym/sin.m

В некоторых случаях удобен поиск m-функций по ключевым словам. Для этого служит команда

lookfor Ключевое слово

или

lookfor ‘Ключевые слова’.

MATLAB – система, специально предназначенная для проведения сложных вычислений с векторами, матрицами и массивами. При этом она по умолчанию предполагает, что каждая заданная переменная- это вектор , матрица или массив. Например, если задано X=1, то значит, что X– это вектор с единственным элементом, имеющим значение 1. если нужно задать вектор из трех элементов, то их значения следует перечислить в квадратных скобках, разделяя пробелами. Так, например, присваивание

» V=[6 8 9]

V =

6 8 9

задает вектор V, имеющий три элемента со значениями 6,8 и 9.

Для разграничения строк матрицы используется знак ; (точка с запятой).

» M=[1 2 3;4 5 6;7 8 9];

» M

M =

1 2 3

4 5 6

7 8 9

Для указания отдельного элемента вектора или матрицы используются выражения V(j) или M(i,j). Например,

» M(2,2)

ans =

» M(2,2)=10;

» M

M =

1 2 3

4 10 6

7 8 9

Выражение M(i) с одним индексом дает доступ к элементам матрицы, развернутой в один столбец.

» M(2)

ans =

Имеется также ряд особых функций для задания векторов и матриц. Например, функция magic(n) задает магическую матрицу, у которой сумма всех строк, всех столбцов и диагоналей равна одному и тому же числу.

» M=magic(4)

M =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

» sum(M) % Суммирование матрицы по столбцам

ans =

34 34 34 34

» sum(M') % '-означает транспонирование матрицы

ans =

34 34 34 34

» sum(diag(M)) % Функция diag выделяет главную

% диагональ матрицы

ans =

Для создания единичной матрицы служит функция eye:

» eye(3,4)

ans =

1 0 0 0

0 1 0 0

0 0 1 0

Для создания матриц, все элементы которых – единицы, используется функция ones:

» ones(4)

ans =

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

Описанный способ задания матриц позволяет выполнить операцию конкатенации – объединение малых матриц в большую.

» a=[1 2 3;4 5 6;7 8 9]

a =

1 2 3

4 5 6

7 8 9

» b=magic(3)

b =

 

8 1 6

3 5 7

4 9 2

» c=[a b]

c =

1 2 3 8 1 6

4 5 6 3 5 7

7 8 9 4 9 2

В случае необходимости произвести формирование упорядоченных числовых последовательностей используется оператор : (двоеточие):

Начальное_значение:Шаг:Конечное_значение.

Примеры использования оператора :

» 1:7

ans =

1 2 3 4 5 6 7

» j=1:3:15

j =

1 4 7 10 13

» i=20:-5:0

i =

20 15 10 5 0

» v=0:pi/2:2*pi

v =

0 1.5708 3.1416 4.7124 6.2832

» r=1:.2:0

r =

Empty matrix: 1-by-0

» r=1:-.2:0

r =

1.0000 0.8000 0.6000 0.4000 0.2000 0

Таким образом формируется возрастающая последовательность чисел с равномерным шагом. Если Шаг не задан, то он принимает значение 1. Если конечное значение указано меньшим, чем начальное значение, то выдается сообщение об ошибке.

В системе MATLAB использование операторов требует непременного учета того факта, что пользователь работает в матричной системе. Рассмотрим следующий характерный пример:

x =

1 2 3 4 5

» cos(x)

ans =

0.5403 -0.4161 -0.9900 -0.6536 0.2837

» sin(x)/x

ans =

-0.0862

» sin(x)./x

ans =

0.8415 0.4546 0.0470 -0.1892 -0.1918

Вычисление массива косинусов выполнилось корректно, но вычисление массива значений функции sin(x)/x вместо ожидаемого массива с шестью элементами в первом случае вернуло единственное значение. Причина в том, что оператор / вычисляет отношение двух матриц. Если они одной размерности, то результат будет одним числом, чтобы действительно получить вектор значений sin(x)/x, надо использовать специальный оператор поэлементного деления массивов – ./. В этом случае будет получен массив чисел. Также работает поэлементное сложение (.+), поэлементное вычитание (.-), поэлементное умножение (.*).

Далее приведен пример того, что правила матричной алгебры должны выть учтены при работе с переменными MATLAB. Знак ‘ означает транспонирование матриц

x =

1 2 3 4 5

» sin(x)*x

??? Error using ==> *

Inner matrix dimensions must agree.

» (sin(x))'*x

ans =

0.8415 1.6829 2.5244 3.3659 4.2074

0.9093 1.8186 2.7279 3.6372 4.5465

0.1411 0.2822 0.4234 0.5645 0.7056

-0.7568 -1.5136 -2.2704 -3.0272 -3.7840

-0.9589 -1.9178 -2.8768 -3.8357 -4.7946

» (sin(x))*x'

ans =

-4.7384

» a=[1 2 3; 4 5 6]

a =

1 2 3

4 5 6

» b=[6 7 8; 9 1 2]

b =

6 7 8

9 1 2

» d=a*b

??? Error using ==> *

Inner matrix dimensions must agree.

» d=a*b'

d =

44 17

107 53

Как и в любом языке программирования в языке системы MATLAB предусмотрены управляющие структуры. Условный оператор if в общем записывается следующим образом:

if Условие

Инструкции_1

elseif Условие

Инструкции_2

else

Инструкции_3

end

В качестве операторов отношения используются следующие операторы: == (равно), ~= (неравно), <, >, <=, >=.

Конструкция цикла for…end имеет вид:

for var=Выражение. Инструкция. … .Инструкция end

Выражение записывается в виде s:d:e, где s – начальное значение переменной цикла var, d – приращение этой переменной и e – ее конечное значение. Возможна и запись в виде s:e ( в этом случае d=1).

» for x=0:.25:1 x^2, end;

ans =

ans =

0.0625

ans =

0.2500

ans =

0.5625

ans =

Оператор continue передает управление в следующую итерацию цикла, пропуская операторы, которые следуют за ним. Причем во вложенных циклах он передает управление на следующую итерацию основного цикла. Оператор break может использоваться для досрочного прерывания выполнения цикла.

Цикл типа while повторяется до тех пор, пока выполняется Условие:

while Условие

Инструкцииe

end

Для осуществления ветвления используется конструкция с переключателем типа switch:

switch switch_выражение

case case_выражение

Список_инструкций

case { case_выражение1, case_выражение2, case_выражение3…}

Список_инструкций

otherwise

Список_инструкций

End

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.