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

Вычисление коэффициентов корреляции

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

corrcoef(X) возвращает матрицу коэффициентов корреляции для входной матрицы, стро-ки которой рассматриваются как наблюдения, а столбцы – как переменные.

Например,

>> M=magic(5)

M =

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

>> S=corrcoef(M)

S =

1.0000 0.0856 -0.5455 -0.3210 -0.0238

0.0856 1.0000 -0.0981 -0.6731 -0.3210

-0.5455 -0.0981 1.0000 -0.0981 -0.5455

-0.3210 -0.6731 -0.0981 1.0000 0.0856

-0.0238 -0.3210 -0.5455 0.0856 1.0000

В целом корреляции данных довольно низкая, за исключением данных, расположенных по диагонали – здесь коэффициенты равны 1.

Вычисление матрицы ковариации

Приведенная ниже функция позволяет вычислить матрицу ковариации для массива данных

сov(X) возвращает дисперсию элементов массива Х. Для матрицы, где каждая строка рассматривается как наблюдение, а каждый столбец – как переменная, cov(X) возвращает матрицу ковариаций. При этом diag(cov(X)) – вектор дисперсий для каждого столбца, а sqrt(diag(cov(X))) – вектор стандартных отклонений.

Пример:

>> D=[2 3 6; 3 6 -1; 9 8 5]

D =

2 3 6

3 6 -1

9 8 5

>> C=cov(D)

C =

14.3333 8.3333 3.6667

8.3333 6.3333 -2.3333

3.6667 -2.3333 14.3333

>> diag(cov(D))

ans =

14.3333

6.3333

14.3333

Основы программирования

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

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

С позиций программиста язы кпрограммирования системы является типичным проблем-но-ориентированным языком программирования высокого уровня. Точнее говоря, это даже язык сверхвысокого уровня, содержащий сложные операторы и функции, реализация которых на обычных языках (например, Бейсике, Паскале или СИ) потребовала бы много усилий и времени.

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

Поскольку язык программирования системы MATLAB ориентирован на структурное программирование, в нем нет номеров строк (присущих до недавнего времени Бейсику) и прог-раммных операторов перехода GO TO. Имеются лишь управляющие структуры следующих ти-пов: условных выражений IF…ELSE…ELSEIF…END, циклы FOR…END и WHILE…END. Их форма похожа на ту, которая используется в языке Паскаль (то есть область действия управляю-щих структур начинается их заголовком, но без слова begin, а заканчивается словом end). С по-зиций структурного программирования этих средств достаточно для решения любых задач.

л а б о р а т о р н а я р а б о т а № 8

  1. Введите вектор-строку N, состоящую из 8 произвольных элементов.

  2. Отсортируйте N по возрастанию.

  3. Введите вектор-столбец Х, состоящий из 8 произвольных элементов.

  4. Отсортируйте элементы Х.

  5. Введите матрицу D, размером 6х6, состоящую из произвольных элементов.

  6. Отсортируйте элементы этой матрицы по строкам.

  7. Отсортируйте элементы матрицы D по столбцам.

  8. Отсортируйте D так, чтобы на экран были выведены индексы элементов.

  9. Введите матрицу Z размером 6х6, состоящую из произвольных элементов.

  10. Отсортируйте строки этой матрицы.

  11. Осуществите сортировку этой матрицы с выводом индексов сортируемых строк.

  12. Отсортируйте матрицу Z по второму столбцу.

  13. Отсортируйте матрицу Z по пятому столбцу.

  14. Отсортируйте матрицу Z по первому столбцу.

  15. Введите матрицу L размером 4х4, состоящую из произвольных элементов.

  16. Получите матрицу коэффициентов корреляции.

  17. Введите матрицу К размером 5х5, состоящую из произвольных элементов.

  18. Получите матрицу ковариаций для матрицы К.

  19. Выведите вектор дисперсий для каждого столбца.

  20. Получите вектор стандартных отклонений.

Л е к ц и я № 17, 18

Основы программирования

Диалоговый ввод

Рассмотрим простой пример диалоговой программы

%Вычисление длины окружности

r=0;

while r>=0; r=input(‘Введите радиус окружности r=’);

if r>=0 disp(‘Длина окружности l=’);

disp(2*pi*r)

end

end

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

r=input(‘Введите радиус окружности r=’).

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

if r>=0 disp(‘Длина окружности l=’);

disp(2*pi*r)

end

с помощью команды disp при r>=0 выводят надписи «Длина окружности l=» и вычисленное значение длины окружности. Они представляют собой одну из наиболее простых управляющих структур типа if…end. В данном случае она нужна для остановки вычислений, если вводится отрицательное число.

Приведенные строки включены в управляющую структуру while…end. Это необходимо для циклического повторения вычислений с вводом значений r. Пока r>=0, цикл повторяется. Но стоит задатьr<=0, вычисление длины окружности перестает выполняться, а цикл завершается.

Если данная программа записана в виде m-файла, например, tbilisi.m, то работа с ней бу-дет выглядеть следующим образом:

>> tbilisi

Введите радиус окружности r=1

Длина окружности l=

6.2832

Введите радиус окружности r=2

Длина окружности l=

12.5664

Введите радиус окружности r=-1

>>

Итак, даже на примере простой программы видна польза применения управляющих струк-тур типа if…end и while…end, а также функций диалогового ввода input(‘String’) и вывода disp.

Функция input может использоваться и для ввода произвольных стрковых выражений. При этом она задается в следующем виде

input(‘Комментарий’, ‘s’)

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

>> s=input(‘Введите выражение’, ‘s’)

Введите выражение 2*sin(1)

s =

2*sin(1)

>> eval(s)

ans =

1.6829

Функция eval позволяет вычислить выражение, заданное (полученное от функции input) в символьном виде. Вообще говоря, возможность ввода любого символьного выражения в соче-тании с присущими языку программирования matlab управляющими структурами открывает путь к созданию диалоговых программ любой сложности.

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