Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Работа с редактором m-файлов



Любую последовательность команд в MATLAB можно оформить в виде m-файла,

называемого скрипт-файлом. Для создания и редактирования таких файлов служит специальный редактор m-файлов. Его пустое окно открывается командой New ( Новый файл ), которую можно ввести активизацией кнопки с тем же названием в панели инструментов или из позиции File меню окна MATLAB.

К примеру, введем такой скрипт-файл вычисления суммы чисел 2 и 3 и построения графика синусоиды:

2+3

x=0: 0.1: 15

y=sin(x)

plot(x, y)

Введенный файл можно пустить из окна редактора, исполнив команду

Run в позиции Debug ( Отладка ) меню окна редактора, или набрав имя файла в командной строке и нажав на Enter. В результате будет вычислено

выражение 2 + 3 и число 5 появится в окне сессии MATLAB. Будет также построен

в отдельном окне график синусоидальной функции.

 

Переменные в MATLAB

Переменные – это имеющие имена объекты, способные хранить некоторые, обычно разные по значению, данные. В зависимости от этих данных переменные могут быть числовыми или символьными, векторными или матричными. На языке программирования MATLAB можно задавать переменным определенные значения. Для этого используется операция присваивания, вводимая знаком равенства:

 

Имя-переменной = Выражение.

В MATLAB явное определение переменных не требуется. Определение происходит автоматически при первоначальном присваивании переменной значения или при инициализации переменной. Если в процессе вычислений обращаются к несуществующей переменной, MATLAB выдает сообщение об ошибке. Имена переменных и их значения могут быть получены при помощи команд who или whos, а также в графическом окне Workspace. Выводятся переменные, их размерности и занимаемый ими объем памяти.

Для удаления ранее определенных переменных из памяти применяют команду clear (имя переменной).

команда описание пример
Help функция Описание функции и применение > > help sin
Lookfor символы Поиск ключевого слова в файлах помощи Help > > lookfor inverse
whos Список применяемых переменных > > whos

 

Операторы и встроенные функции

MATLAB

Оператор – это специальное обозначение для определенной операции над данными – операндами. Например, простейшими арифметическими операторами являются знаки суммы +, вычитания -, умножения * и деления /. Операторы используются совместно с операндами. Например, в выражении 2+3 знак + является оператором сложения, а числа 2 и 3 – операндами

Функции это имеющие уникальные имена объекты, выполняющие определенные преобразования своих аргументов и при этом возвращающие результаты этих преобразований. Возврат результата – отличительная черта функций. При этом результат вычисления функции с одним выходным параметром подставляется на место ее вызова, что позволяет использовать функции в математических выражениях, например функцию sin в 2*sin(pi/2).

Функции в общем случае имеют список аргументов (параметров), заключенный в круглые скобки. Например, функция Бесселя записывается как bessel(NU, X). В данном случае список параметров содержит два аргумента –

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

 

[Y1, Y2,...]=func(X1, X2,...),

где Y1, Y2,... – список выходных параметров и X1, X2,... – список входных

аргументов (параметров).

Математические функции

Функция Описание Пример
exp Экспоненциальная функция > > exp(2) ans = 7.3891
Log, Log10, Log2 Натуральный логарифм, десятичный, по основанию 2 > > log(10) ans = 2.3026
sqrt Квадратный корень из числа > > sqrt(25) ans = 5
fix Целая часть числа > > fix(7.389) ans = 7
mod Деление по модулю > > mod(7, 3) ans = 1
rem Остаток целочисленного деления > > rem(12, 9) ans = 3

 

Зарезервированные символы.

MATLABсодержит ряд символов, которые зарезервированы системой.

Имя Описание
ans Сохраненный результат последнего вычисления
eps Точность между двумя реальными числами
pi Число Пи
i/j Мнимая часть комплексного числа
Inf Символ бесконечности
NaN Символ неопределенности

 

Скрипты и функции

 

Функции пользователя

Хотя ядро новых версий системы MATLAB содержит уже более 1000 встроенных функций (не считая функций, определенных в десятках пакетов расширения), всегда может понадобиться какая-то нужная пользователю функция. Язык программирования системы MATLAB предоставляет ряд возможностей для задания функций пользователя. Одна из таких возможностей заключается в применении функции inline, аргументом которой надо в апострофах задать выражение, задающее функцию одной или нескольких переменных. В приведенном ниже примере задана функция двух переменных – суммы квадратов sin(x) и cos(y):

 

> > sc2=inline('sin(x).^2+cos(y)^.2')

sc2 =

Inline function:

sc2(x, y) = sin(x).^2+cos(y).^2

 

Можно также задавать свои функции в виде m-файлов. Например, можно в окне редактора m-файлов (открывается командой New в меню File ) создать m-файл с именем sc2 и листингом:

function y=sc2(x, y)

y=sin(x).^2+cos(y).^2

Записав его на диск, можно командой type sc2 вывести листинг созданной

функции:

> > type sc2

function y=sc2(x, y)

y=sin(x).^2+cos(y).^2

 

Сообщения об ошибках и исправление ошибок

 

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

 

> > sqr(2)

и нажмем клавишу ENTER. Система сообщит об ошибке:

 

??? Undefined function or variable 'sqr' % % Неопределенная функция или переменная sqr

 

> > x

??? Undefined function or variable 'x'. % Неопределенная функция или переменная X

Иногда в ходе вывода результатов вычислений появляется сокращение NaN (от слов Not a Number – не число). Оно обозначает неопределенность, например вида 0/0 или Inf/Inf, где Inf – системная переменная со значением машинной бесконечности. Могут появляться и различные предупреждения об ошибках (на английском языке). Например, при делении на 0 конечного числа появляется предупреждение «Warning: Devide by Zero.» («Внимание: деление на нуль»).

Диапазон чисел, представимых в системе, лежит от 10–308 до 10+308.

В примере

 

x = 0: pi/20: 3*pi;

y = sin(x);

x = 0: pi/40: 3*pi;

plot(x, y)

выводится сообщение об ошибке

 

Error using ==> plot

Vectors must be the same lengths. % векторы должны быть одинаковой размерности, длины

но команда Plot получает два вектора с разным количеством переменных x и y.

 

Следующая ошибка возникает при перемножении матриц.

v1=[2 3 4]; v2=[4 5 6 ];

%Вычислим скалярное произведение

c = v 1 ⋅ v 2

??? Error using ==> mtimes

Inner matrix dimensions must agree.

%Система выдает ошибку о несогласованности размерностей перемножаемых матриц.

Для правильного перемножения нужно транспонировать вторую матрицу. Операция транспонирования выполняется с помощью символа " ' ":

v1*v2'

ans =

47.

Применение оператора: (двоеточие)

Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны, например, для создания векторов со значениями абсциссы при построении графиков или при создании таблиц. Для этого в MATLAB используется оператор: (двоеточие) в виде:

 

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

 

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

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

применения оператора: даны ниже:

> > 1: 5

ans = 1 2 3 4 5

> > i=0: 2: 10

i = 0 2 4 6 8 10

> > j=10: -2: 2

j = 10 8 6 4 2

> > V=0: pi/2: 2*pi;

> > V

V = 0 1.5708 3.1416 4.7124 6.2832.

Логические операторы

Логические операторы и соответствующие им функции служат для реализации

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

 

Оператор Описание
== Равно
~= Не равно
< = Меньше либо равно
> = Больше либо равно
& & Логическое И
|| Логическое ИЛИ
~ Логическое НЕ
& Поэлементное И
| Поэлементное ИЛИ

 

Пример

> > 1 < 2 % 1 меньше 2?

ans =

1 % Да, результат – логическая единица

> > 2 == 0 % 2 равен 0?

ans =

0 % Нет, результат равен 0

 

> > 7 > [ 2 10 1 7 ] % Сравнение скалярной величины с векторной

%

ans = % Поэлементное сравнение

1 0 1 0

> > [ 1 1 1 ] & [ 1 0 1 ] % Полементное И

ans =

1 0 1

 

 

Комплексные числа

 

В расчетах с комплексными числами следует помнить, что в MATLAB для знака мнимой единицы зарезервированы символы I и J

 

> > z = 3 + j*4 % Формирование комплексного числа

z = 3 + 4i

> > re = real(z) % Реальная часть

re = 3

> > im = imag(z) % Мнимая часть

im = 4

> > a = abs(z) % Модуль

a = 5

> > phi = angle(z) % Фаза

phi = 0.92730

> > z2 = a*exp(j*phi)

z2 = 3.0000 + 4.0000i

 

Команда Описание Пример
x = real(z) Определение реальной части КЧ > > real(2+3j) ans = 2
y = imag(z) Мнимая часть КЧ > > imag(2+3j) ans = 3
a = abs(z) Модуль числа Z > > abs(-5) ans = 5
phi = angle(z) Фаза числа Z > > angle(1-j) ans = -0.78540

 

 

]

Матрицы и векторы

 

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

> > V=[1 2 3]

V = 1 2 3

задает вектор V, имеющий три элемента со значениями 1, 2 и 3 (его можно считать и матрицей размера 3× 1). После ввода вектора система выводит его на экран дисплея. Заметим, для вектора столбца нужно разделять элементы знаками «; » (точка с запятой):

> > V=[1; 2; 3]

V =

Задание матрицы требует указания нескольких строк и нескольких столбцов. Для разграничения строк используется знак; (точка с запятой). Этот же знак в конце ввода предотвращает вывод матрицы или вектора (и вообще любой операции) на экран дисплея. Так, ввод

 

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

задает квадратную матрицу, которую можно вывести:

> > M

M =

1 2 3

4 5 6

7 8 9

Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции, например:

 

> > V= [2+2/(3+4), exp(5), sqrt(10)];

> > V

V = 2.2857 148.4132 3.1623

 

Для задания векторов удобно применять команду linspace, которая позволяет получить вектор значений в определенных пределах с равным интервалом.

 

> > x = linspace(5, 10, 100); % вектор из 100 элементов в диапазоне от 5 до 10

> > x(1: 5)

ans =

5.0000 5.0505 5.1010 5.1515 5.2020

 

Команда linspace может использоваться при задании вектора значений временных отсчетов или отсчетов частот дискретного спектра.

 

 

Для доступа к целым строкам или столбцам матрицы применяют команду двоеточия “: ”, которая заменяет тот или иной индекс

> > A = [ 1 2 3; 4 5 6; 7 8 9 ]

A =

1 2 3

4 5 6

7 8 9

> > A(1,: ) = [] % удаление первой строки

 

При умножении матриц следует обращать внимание на то, что число столбцов первой матрицы должно быть равным числу строк второй матрицы.

 

Поэлементное умножение и сложение матриц

 

x = [1 2 3]

y = [4 5 6]

> > z = x.*y

z =

4 10 18

> > x.\y, x./y

ans =

4.0000 2.5000 2.0000

ans =

0.2500 0.4000 0.5000

 

Обьединение матриц

 

> > A = [ 1 2; 3 4 ]; % Матрица размером 2x2

> > B = [ 5 5 ]; % Матрица размером 1x2

> > C = [ A; B ] % Объединение матриц

C =

1 2

3 4

5 5

> > D = [ A B' ]

D =

1 2 5

3 4 5

 

Транспонирование матриц

 

> > B = A'

B =

1 3

2 4

 

 

Векторизация циклов.

 

Под векторизацией понимается преобразование циклов for и while к эквивалентным векторным или матричным выражениям. При векторизации алгоритма ускоряется выполнение M-файла.

 

Пример

Вот один из способов вычислить 1001 значение функции синуса на интервале [0 10], используя оператор цикла:

i = 0;

for t = 0:.01: 10

i = i + 1;

y(i) = sin(t);

end

Эквивалентная векторизованная форма имеет вид

t = 0:.01: 10;

y = sin(t);

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

 

Предварительное выделение памяти.

 

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

Массив чисел zeros y = zeros(1, 100)

for i = 1: 100

y(i) = det(X^i);

end

Массив записей struct data = struct([1 3], 'x', [1 3], 'y', [5 6])

data(3).x = [9 0 2];

data(3).y = [5 6 7];

Массив ячеек cell B = cell(2, 3)

B{1, 3} = 1: 3;

B{2, 2} = 'string';

 

 

Предварительное выделение памяти позволяет избежать фрагментации памяти при работе с большими матрицами. В ходе сеанса работы системы MATLAB, память может стать фрагментированной из-за работы механизмов динамического распределения и освобождения памяти. Это может привести к появлению большого количества фрагментов свободной памяти, и непрерывного пространства памяти может оказаться недостаточно для хранения какого-либо большого массива.

 

 


Поделиться:



Популярное:

  1. Linux - это операционная система, в основе которой лежит лежит ядро, разработанное Линусом Торвальдсом (Linus Torvalds).
  2. Адамс Б. Эффективное управление персоналом: Сделайте так, чтобы ваши служащие работали с максимальной отдачей, - М: АСТ Астрель, 2008. – 367 с.
  3. Административная итоговая контрольная работа по окружающему миру за 1 класс
  4. Артикулирование звуков, работа над дикцией
  5. Архитектурно-строительные чертежи, разработанные с применением автоматизированных программ.
  6. Бессознательное в работах Лакана
  7. Бида А.И. Итоговая контрольная работа.
  8. Бульдозеры (лабораторная работа №7)
  9. В каком году вышла в свет работа Н.А.Назарбаева « В сердце Евразии»
  10. В процессе измерения не следует прикасаться к соединительным проводам, клеммам и элементам испытуемой цепи для исключения протекания тока через тело работающего с прибором.
  11. В России заработало первое искусственное сердце.
  12. Важное замечание: это работает и на более коротких временных периодах


Последнее изменение этой страницы: 2016-05-03; Просмотров: 1234; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.093 с.)
Главная | Случайная страница | Обратная связь