Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
digital_filtering.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.4 Mб
Скачать

5.6. Скалярные функции

Определенные функции выполняются над скалярами, а в применении к матрицам – поэлементно. Наиболее общие из этих функций:

sin

asin

exp

abs

round

cos

acos

log (натуральный)

sqrt

floor

tan

atan

rem (остаток)

sign

ceil

5.7. Векторные функции

В MATLAB существуют функции, которые выполняются над векторами (строками или столбцами), но могут выполняться и над матрицами размером mn (m  2) по столбцам, порождая в результате вектор-строку, содержащий результаты обработки каждого столбца. Вот некоторые из этих функций:

max

sum

median

any

sort

min

prod

mean

all

std

Например, max(max(A)), а не max(A) даст максимальный элемент матрицы A.

5.8. Mатричные функции

Главное достоинство MATLAB заключается в ее матричных функциях. Наиболее полезные из них:

  • eig – собственные числа и собственные векторы;

  • chol – факторизация Холецкого;

  • svd – сингулярное разложение;

  • inv – обращение матрицы;

  • lu – LU-факторизация;

  • qr – QR-факторизация;

  • hess – форма Хессенберга;

  • schur – разложение Шура;

  • expm – матричная экспонента;

  • sqrtm – матричный квадратный корень;

  • poly – характеристический полином;

  • det – определитель;

  • size – размер;

  • cond – число обусловленности по норме L2;

  • rank – ранг матрицы.

Функции MATLAB могут иметь один или несколько выходных аргументов. Например, функция y=eig(A) или просто eig(A) сгенерирует вектор из собственных чисел A, а [U,D]= eig(A) – матрицу U, столбцами которой будут собственные векторы A и диагональную матрицу D с собственными числами на диагонали.

5.9. Подматрицы и форма записи с двоеточием

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

Выражение 1:5 (встречавшееся ранее в операторе for) обозначает вектор-строку [1 2 3 4 5]. Числа не обязательно должны быть целыми, а шаг может быть не единичным. Например, 0.2:0.2:1.2 – это запись вектора-строки [0.2 0.4 0.6 0.8 1.0 1.2], а 5:–1:1 – вектора-строки [5 4 3 2 1].

Следующие операторы генерируют таблицу синусов:

x = [0.0:0.1:2.0]';

y = sin(x);

[x y]

Заметим, что sin(x) – скалярная операция, поэтому вектор y будет строиться из x поэлементно.

Форма записи через двоеточие может быть использована для доступа к подматрицам данной матрицы. Например, A(1:4, 3) – это вектор-столбец, состоящий из первых четырех элементов третьего столбца матрицы A. Двоеточие означает, что строка или столбец должны быть взяты целиком:

  • A(:, 3) – третий столбец матрицы A;

  • A(1: 4, :) – первые четыре строки матрицы A.

Произвольно объединенные векторы могут использоваться как индексы: A(:, [2 4]) состоит из второго и четвертого столбцов матрицы A. Такая индексация может быть использована в обоих частях оператора присваивания: A(:, [2 4 5]) = B(:, 1:3) заменяет второй, четвертый и пятый столбцы A первыми тремя столбцами B.

Заметим, что вся измененная матрица A будет отображена на экране.

Умножим справа второй и четвертый столбцы матрицы A на матрицу размером 22 [1 2; 3 4]:

A(:, [2,4]) = A(:, [2 4])*[1 2; 3 4].

И опять вся измененная матрица отобразится на экране.

Чтобы оценить все преимущества этой формы записи, сравните приведенные здесь операторы MATLAB с программами на Паскале, фортране или Си, выполняющими те же действия.

5.10. M-файлы

МATLAB может выполнять последовательности операций, хранящиеся в файлах. Такие файлы называют M-файлами, так как они должны иметь расширение .m. Большая часть работы с MATLAB будет состоять в создании и детализации M-файлов.

Существует два типа M-файлов: сценарии и функции. Файл-сценарий представляет собой последовательность обычных операторов MATLAB. Если имя такого файла, скажем, rotate.m, то команда rotate повлечет за собой выполнение операторов, содержащихся в этом файле. Переменные в таком файле – глобальные и будут изменять значения переменных среды.

Файлы-сценарии часто используются для ввода данных в большие матрицы, в них удобно редактировать ошибки ввода. Если, например, в файле data.m записано

A = [

1 2 3 4

5 6 7 8

];

то оператор MATLAB data выполнит присвоение, описанное в файле data.m.

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

Рассмотрим простой пример функционального файла:

function P=prodsqr(A,B)

% prodsqr – произведение квадратов двух матриц

A=A^2*B^2;

Этот файл должен быть записан на диск под именем prodsqr.m (соответствующем имени функции). Первая строка объявляет имя функции, входные и выходные переменные; без этой строки получился бы script-файл. Затем оператор MATLAB z=prodsqr(x,y) вызовет передачу переменных x и y в переменные A и B в функциональном файле, а результат вычислений – в переменную z. Так как переменные функционального файла локальны, их имена независимы от таких же имен во внешней среде.

Функция может также иметь несколько выходных переменных. Например:

function [mean,stdev]=stat(x)

% stat – среднее арифметическое и среднеквадратичное отклонение

% для вектора х stat(X) возвращает среднее арифметичес-

% кое и СКО X.

% для матрицы X stat(X) возвращает 2 вектора-строки,

% coдержащих, соответственно, средние и СКО каждого

% столбца.

[m,n]==size(x);

if m==1

m=n; % обработка случая когда x – вектор-строка

end

mean=sum(x)/m;

stdev=sqrt(sum(x.^2)/m–mean.^2)

Если этот текст поместить в файл с именем stat.m, команда MATLAB, например, [xm,xd]=stat(x), присвоит переменным xm и xd среднее арифметическое и СКО вектора x соответственнно. С помощью функции, имеющей несколько выходных аргументов, можно также выполнить одно присвоение. Например, xm=stat(x) присвоит переменной xm значение среднего арифметического вектора х. Эта функция демонстрирует некоторые особенности MATLAB, которые можно использовать для написания эффективных программ.

Заметим, например, что x.^2 – матрица квадратов элементов Х, sum – векторная функция (см. 5.6), sqrt – скалярная функция (см. 5.5), а деление sum(x)/m – матрично-скалярная операция. Символ % означает, что остальные символы строки – комментарий; MATLAB проигнорирует остаток строки. Однако первые несколько строк комментария, которые документируют М-файл, доступны для получения помощи по данной функции и будут отображены на экране при вводе help stat (в нашем примере).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]