Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СИНТЕЗ ЦИФРОВЫХ ФИЛЬТРОВ С ИСПОЛЬЗОВАНИЕМ ПАКЕТА ПРОГРАММ MATLAB.DOC
Скачиваний:
212
Добавлен:
01.05.2014
Размер:
1.41 Mб
Скачать

5.3. Операторы, выражения и переменные

MATLAB – язык выражений; любое введенное выражение будет интерпретировано и получит значение. Операторы MATLAB имеют форму <переменная> = <выражение> или просто <выражение>.

Выражения составляются из функций, знаков операций, имен переменных. Результатом вычисления выражения является матрица, которая выводится на экран и присваивается переменной для дальнейшего использования. Если <переменная> и знак = опущены, то результат выражения присваивается переменной ans, которая создается автоматически.

Оператор нормально завершается возвратом каретки. Однако он может быть продолжен на следующую строку, если перед <ВК> будет набрано три или более точек. С другой стороны, в одну строку можно поместить несколько операторов. Разделитель – запятая или точка с запятой.

Если последний символ оператора – точка с запятой, то печать результата подавляется, но присвоение переменной значения выполняется. Это существенно при подавлении печати нежелательных промежуточных результатов.

MATLAB различает большие и маленькие буквы в именах команд, функций и переменных. Например: solveUT – не то же самое, что solveut.

Команда who вызовет печать списка текущих переменных рабочей области. Переменная может быть стерта из рабочей области командой clear <имя переменной>. Команда clear без параметров сотрет все не сохраненные в файле переменные пользователя.

При выходе из MATLAB все переменные теряются. Однако командой save, поданной перед выходом, можно записать все переменные в дисковый файл matlab.mat. Если затем снова войти в MATLAB, команда load восстановит предыдущее состояние рабочей области.

Вывод на экран и вычисления могут быть прекращены на большинстве машин командой Ctrl-C (Ctrl-Break на PC) без выхода из MATLAB.

Стандартная переменная EPS дает машинную точность – около 10–16 на большинстве машин. Это полезно при задании порога для определения сходимости итеративных процессов.

5.4. Функции построения матриц

В MATLAB существует функция построения следующих матриц:

  • eye – заведение единичной матрицы;

  • zeros – матрицы нулей;

  • ones – матрицы единиц;

  • diag – диагональной матрицы;

  • triu – верхнетреугольной части матрицы;

  • tril – нижнетреугольной части матрицы;

  • rand – случайной матрицы;

  • hilb – гильбертовой матрицы;

  • magiс – магического квадрата;

  • toeplitz – теплициевой матрицы.

Например, zeros(m, n) породит матрицу нулей mn; zeros(n) – матрицу нулей nn; zeros(A) – матрицу нулей того же размера, что и A.

Если х – вектор, то diag(x) сгенерирует диагональную матрицу с вектором x на диагонали. Если A – квадратная матрица, то diag(A) – сгенерируетвектор, состоящий из диагональных элементов A.

Матрицы можно строить из блоков. Например, если A – матрица размером 33, то B = [A, zeros(3, 2); zeros(2, 3), eye(2)] построит некоторую матрицу размером 55.

5.5. Операторы for, while, if

В своих основных формах операторы MATLAB for, while, if работают так же, как и в большинстве компьютерных языков. Например, оператор for i=1:N, x(i)=i^2, end или

for i=1:N

x(i)=i^2

end

породит определенный вектор размером N, а оператор for i=N:–1:1, x(i)=i^2, end – этот же вектор в обратном порядке. Операторы

for i=1:m

for j=1:n

H(i,j)=1/(i+j–1);

end

end

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

Основная форма петли while:

while <отношение>

<операторы>

end

Операторы будут повторно выполняться, пока отношение остается истинным. Например, для данного a получить наименьшее неотрицательное целое n такое, что 2na, можно следующим образом:

n=0

while 2^n < a

n=n+1;

end

Основная форма оператора if представлена примером

if n<0

x(n)=0;

elseif rem(n,2)==0

x(n)=2;

else

x(n)=1

end

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

Отношения в MATLAB обозначаются следующим образом:

  • <– меньше;

  • >– больше;

  • <= – меньше или равно;

  • >=– больше или равно;

  • ==– равно;

  • ~=– не равно.

Заметим, что "=" используется как оператор присвоения, а "==" – как отношение.

Отношения могут быть соединены или предварены следующими логическими операторами:

  • &– И;

  • |– ИЛИ;

  • ~– НЕ.

В применении к скалярам отношение – это число 1 или 0 в зависимости от того, истинно отношение или нет. В применении к матрицам одинакового размера отношение – это матрица из нулей и единиц, описывающая отношения между соответствующими элементами.

Отношения матриц интерпретируются операторами while и if как истинные, только если каждый элемент матрицы отношения – ненулевой. Следовательно, если нужно выполнить <оператор>, когда матрицы A и B равны, можно ввести

if A==B

<оператор>

end

Но если надо выполнить <оператор>, когда AB, то надо ввести

if any(any(A~=B))

<оператор>

end

или проще:

if A=B else

<оператор>

end

Заметим, что кажущееся очевидным if A~=B, <оператор>, end не даст желаемого результата, так как оператор будет выполняться, только если каждый из элементов A отличается от соответствующих элементов B.

Функции any и all могут быть использованы для понижения размерности отношений с матриц до векторов и скаляров. Два оператора any требуются в примере, приведенном ранее, так как any – это векторная операция (см. 5.8)