Главная
страница 1
ОБЩИЕ ПРИНЦИПЫ РАБОТЫ С МАТРИЦАМИ В СИСТЕМЕ MATLAB
Лабораторная работа № 3
ЦЕЛЬ РАБОТЫ

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




ОСНОВНЫЕ СВЕДЕНИЯ



Специальные символы для создания матриц в Matlab
К классу операторов в системе Matlab относятся некоторые специальные символы. Ниже приведено их описание.

[] Квадратные скобки

Квадратные скобки используются для формирования векторов и матриц.

Векторы и матрицы формируются следующим образом. Для создания вектора-строки используются несколько способов:


  • перечисление элементов строки через пробел или запятую:

>> x=[1 2 3 4 5 ]

  • использование специальной конструкции с указанием начального значения вектора, шага и конечного значения через двоеточие (j:i:k)(см. пункт двоеточие):

>> x=1:2:10

>> x=1:10 - если значение шага равно 1, его можно не указывать.

Для создания вектора-столбца надо транспонировать полученный вектор-строку (см. пункт '(одиночная кавычка) ниже).

Для создания вектора-столбца используется перечисление элементов вектора через точку с запятой:

>> x=[1;2;3;4;5]

Для создания матрицы можно использовать варианты непосредственного введения элементов:



  • ввод матрицы по строкам, разделяющихся запятой:

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

  • ввод матрицы по столбцам, заданных в квадратных скобках:

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

  • ввод матрицы по строкам в интерактивном режиме:

>> x=[1 2 3

4 5 6

7 8 9]

() (круглые скобки)

Круглые скобки используются для:

- задания порядка выполнения операций в арифметических выражениях.

- указания последовательности аргументов функции.

- указания индексов элементов векторов или матриц. Например, если Х и V –

векторы, то Х(V) можно представить как [Х(V(1)),V(V(2)),…X(V(n))].

Элементы вектора V должны быть целыми числами, чтобы использоваться для

индексирования элементов. Ошибка генерируется в том случае, если индекс

элемента меньше единицы или больше размера массива.

Пустые квадратные скобки удаляют информацию из индексированной структуры.

A(m,:)=[] – удаляет строку m из матрицы A.

A(:,n)=[] – удаляет столбец n из матрицы A.



: (двоеточие)

Двоеточие используется:

– для формирование вектора-строки:

j:i:k – то же что и [j,j+i,j+2i, …,k], то есть j – это начальное значение

вектора, i – это шаг, к – это конечное значение вектора.

- в индексировании матрицы для выбора строки, столбцы и элементов:

A(:,j) – это j-ый столбец из A.

A(i,:) – это i -ая строка из A.

A(j:k) – это A(j),A(j+1),…,A(k).

A(:,j:k) - это A(:,j),A(:,j+1),…,A(:,k).



,(запятая)

Запятая используется для разделения индексов элементов матрицы и аргументов функции и для отделения операторов языка Matlab.

Например, задана матрица A:

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

Команда обнуления последнего элемента матрицы:

>>A(3,3)=0; % разделение индексов



;(точка с запятой)

Точка с запятой используется для подавления вывода на экран результата вычислений и для формирования вектора-столбца.



%(знак процента)

Знак процента используется для ввода комментария.



'(одиночная кавычка)

Одиночная кавычка используется для создания строковой константы, например:

>> a='Введите матрицу ';

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

Пример. Создание вектора-строки с использованием специальной конструкции и транспонирование его в вектор-столбец: начальное значение равно 9, конечное – 18, шаг равен 2.

>> a=9:2:18

a =

9 11 13 15 17



>> a1=a'

a1 =


9

11

13



15

17

.' (точка с одиночной кавычкой)

Точка с одиночной кавычкой используется для транспонирования массива без

операции сопряжения для комплексных матриц.


Конкатенация (объединение)

Ранее сформированные массивы могут участвовать в создании новых массивов в качестве их элементов. Для этого может быть использована конкатенация:



[,] (горизонтальная конкатенация)

M=[А,В] – горизонтальная конкатенация (объединение) матриц А и В. А и В должны иметь одинаковое число строк. Горизонтальная конкатенация может быть применена для любого числа матриц в пределах одних скобок [A,B,C].

Пример создания матрицы горизонтальной конкатенацией:

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

A =

1 2 3


5 6 7

[;] (вертикальная конкатенация)

K= [А; В] – вертикальная конкатенация (объединение) матриц А и В. А и В должны иметь одинаковое число столбцов. Вертикальная конкатенация может быть применена для любого числа матриц в пределах одних скобок [A;B;C]. Горизонтальная и вертикальная конкатенация могут быть объединены вместе [A;B,C] или [A,B;C].


A.*B, A./B- поэлементные умножение и деление;

A.^p - поэлементное возведение в степень, p - число;

A.^B - возведение элементов матрицы A в степени, равные соответствующим элементам матрицы B;

A.' - транспонирование матрицы (для вещественных матриц A' и A.' приводят к одинаковым результатам).



Функции обработки данных

Функции

Назначение

s=sum(a)

Сумма всех элементов вектора a

p=prod(a)

Произведение всех элементов вектора a

m=max(a)

Нахождение максимального значения среди элементов вектора a

[m,k]max(a)

Второй выходной аргумент k содержит номер максимального элемента в векторе a

m=min(a)

Нахождение минимального значения среди элементов вектора a

[m,k]=min(a)

Второй выходной аргумент k содержит номер минимального элемента в векторе a

m=mean(a)

Вычисление среднего арифметического элементов вектора a

a1=sort(a)

Упорядочение элементов вектора по возрастанию

[a1,ind]=sort(a)

Второй выходной аргумент ind является вектором из целых чисел от 1 до length(a), который соответствует проделанным перестановкам


Функции для создания стандартных матриц

Функция

Результат и примеры вызовов

zeros

Нулевая матрица
F=zeros(4,5) F=zeros(3) F=zeros([3 4])

eye

Единичная прямоугольная матрица (единицы расположены на главной диагонали)
I=eye(5,8) I=eye(5) I=eye([5 8])

ones

Матрица, целиком состоящая из единиц
E=ones(3,5) E=ones(6) E=ones([2 5])

rand

Матрица, элементы которой - случайные числа, равномерно распределенные на интервале (0,1)
R=rand(5,7) R=rand(6) R=rand([3 5])

randn

Матрица, элементы которой - случайные числа, распределенные по нормальному закону с нулевым средним и дисперсией равной единице
N=randn(5,3) N=randn(9) N=randn([2 4])

diag

1) диагональная матрица, элементы которой задаются во входном аргументе - векторе
D=diag(v)

2) диагональная матрица со смещенной на k позиций диагональю (положительные k - смещение вверх, отрицательные - вниз), результатом является квадратная матрица размера length(v)+abs(k)


D=diag(v,k)

3) выделение главной диагонали из матрицы в вектор d


=diag(A)

4) выделение k-ой диагонали из матрицы в вектор d


=diag(A,k)

Очень удобной возможностью MatLab является конструирование матрицы из матриц меньших размеров. Пусть заданы матрицы:



Требуется составить из , , и блочную матрицу



Можно считать, что имеет размеры два на два, а каждый элемент является, соответственно, матрицей , , или . Следовательно, для получения в рабочей среде MatLab массива M с матрицей требуется использовать оператор:

>> M=[M1 M2; M3 M4]
Для формирования векторов и матриц также можно использовать специальные функции:

Функция linspace(a,b) генерирует вектор, значения элементов которого меняются с постоянным шагом.



v= linspace(a,b) - в вектор v заносится 100 значений от а до b.

v= linspace(a,b,n) - в вектор v заносится n значений от а до b.

>> v=linspace(5,15,3)

v =

5 10 15


Функция logspace(a,b) генерирует вектор, значения элементов которого меняется с постоянным шагом в логарифмической шкале.

v= logspace(a,b) в вектор v заносится 50 значений от 10a до 10b.

v= logspace(a,b,n) в вектор v заносится n значений от 10a до 10b.

>> v1=logspace(1,2,2)

v1 =

10 100


Функция zeros создает матрицу, заполненную нулями:

x=zeros(m,n) – задание матрицы mn нулей.

x=zeros(n) - задание квадратной матрицы из nn нулей.

Пример.


>> x=zeros(2,3)

x = 0 0 0

0 0 0

Для квадратной матрицы в аргументах задается только одно значение.



Функция ones создает матрицу, заполненную единицами:

x=ones(m,n) и x= ones(n) – создание единичной матрицы (синтаксис аналогичный предыдущей функции).

>> ones(2)

ans =


1 1

1 1


Функция randn: x= randn (m,n) – задание матрицы mn нормально-распределенных случайных чисел.

X= randn (n) - задание квадратной матрицы nn.

Функция rand: x= rand (m,n) – задание матрицы mn равномерно-распределенных случайных чисел.

Пример создания матрицы вертикальной конкатенацией:

>> x1=[ones(2,1);zeros(2,1)]

x1 =

1

1



0

0

Пример создания матрицы горизонтальной конкатенацией:



>> x1=[ones(2,1),zeros(2,1)]

x1 =


1 0

1 0


Для создания матриц, состоящих из других матриц, можно использовать функцию repmat().

B = repmat(A,M,N) – создает матрицу B, состоящую из (M строк и N столбцов) MN копий матрицы A.

B = repmat (A,M,N) - если А – число, функция формирует матрицу MN со значением элементов равными А.

Пример :

>> repmat(10,2,3)

ans =

10 10 10


10 10 10
Сервисные функции
who – выводит имена всех определенных в рабочей среде переменных.

>> a=rand(3);

>> who

Your variables are:



a

whos – выводит информацию о переменных рабочей среды.

>> whos


Name Size Bytes Class

a 3x3 72 double array

Grand total is 9 elements using 72 bytes
size – возвращает размер массива

>> v=[1 2 3];

>> s=size(v)

s =


  1. 3

или

[M,N] = size(s) M – число строк, N – число столбцов

>> s=ones(2,3)

s =


1 1 1

1 1 1


>> [M,N]= size(s)

M =


2

N =


3

max и min – вычисляет вектор строку, содержащую максимальные или минимальные элементы в каждом столбце матрицы.

>> v=rand(3)

v =

0.1934 0.5417 0.3784



0.6822 0.1509 0.8600

0.3028 0.6979 0.8537

>> ma=max(v)

ma =


0.6822 0.6979 0.8600
Для того чтобы узнать не только значения максимальных или минимальных элементов, но и их номера в столбцах или столбцах, используют следующий вызов:

[Y,I] = max(X,[],DIM)

[Y,I] = min(X,[],DIM)

где Y – значения максимальных элементов, I – номера элементов, DIM – номера размерности: 1 – по столбцам,. 2 – по строкам.

По умолчанию ([Y,I] = min(X,[],DIM)

Пример. Найти максимальные значения элементов матрицы 22

>> v=rand(2)

v =


0.7382 0.4057

0.1763 0.9355

в столбцах

>> [mx, r]=max(v,[],1)

mx =

0.7382 0.9355



r =

1 2


в строках

>> [mx, r]=max(v,[],2)

mx =

0.7382


0.9355

r =


1

2
Чтобы найти максимальное или минимальное значение в матрице надо преобразовать ее в вектор. Для этого можно использовать функцию reshape(X,1,M*N), где X – преобразуемая матрица, M – размерность матрицы по вертикали (число строк) , N – размерность по горизонтали (число столбцов).

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

>> [M,N]= size(v);

>>к= reshape(v,1,M*N)

к =


0.7382 0.1763 0.4057 0.9355

>> max(к)

ans = 0.9355

>> min(k)

ans = 0.1763
length – длина вектора, для матрицы это эквивалентно выполнению функций max(size(X))

>> c=ones(2,5);

>> length(c)

ans =


5

ndims – определяет общее количество размерностей массива.

>> n=ndims(c)

n =

2
Элементы программирования



Операторы цикла

Цикл for

for count = start:step:final

команды MatLab

end


Здесь count – переменная цикла, start – ее начальное значение, final – конечное значение, а step – шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count будет больше значения final.
Пример 1. Составить вектор из 6 элементов геометрической прогрессии. Элементы геометрической прогрессии рассчитываются по формуле Pn=P1*qn-1.

Пусть P1=3, q=2, n=6.

>>P(1)=3; q=2;

>> for i=1:6

P(i+1)=P(i)*q^i;

end;


>> P

P =


3 6 24 192 3072 98304 6291456
Пример 2. Создать структуру, содержащую матрицы размерность 33 и ввести две матрицы с клавиатуры, после ввода вывести содержимое массива матриц и записать матрицы на диск.

>> mas=struct('h',zeros(3));

>> for i=1:2

mas(i).h=input('введи матрицу ');

end

введи матрицу [1 2 3;5 6 7;8 9 0];



введи матрицу [3 5 9;1 1 2;9 5 5];

>> mas(1).h

ans =

1 2 3


5 6 7

8 9 0


>> mas(2).h

ans =


3 5 9

1 1 2


9 5 5
Запись матриц на диск:

>> for i=1:2

ch = int2str (i); % функция перевода числовых значений в строковые

ch1 = 'c:\f';

ch2 = '.txt';

str = strcat (ch1, ch, ch2); % функция объединения строковых значений

[F,mes]=fopen(str,'wt');

fprintf(F,'%d %d %d \n', mas(i).h);

fclose (F);

end
Цикл while

Цикл while работает, пока выполняется условие цикла

while <условие цикла>

команды MatLab

end


Пример. Поиск максимального значения матрицы v:

>> v=rand(3)

v =

0.9501 0.4860 0.4565



0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

>> f=v;

>> while length(f)~=1 % или max(size(f)) ~=1



f=max(f);

end


f =0.9501

Операторы ветвления

Условный оператор if и оператор переключения switch позволяют создать гибкий разветвляющийся алгоритм выполнения команд, в котором при выполнении определенных условий работает соответствующий блок операторов.


Условный оператор if

Оператор if может применяться в простом виде, для выполнения блока команд при выполнении некоторого условия, или в конструкции if-elseif-else для написания разветвляющего алгоритма:

if условие

команды MatLab

end

Для ветвления



if условие

команды MatLab

elseif условие

команды MatLab

elseif условие

команды MatLab

else

команды MatLab



end
В зависимости от выполнения того или иного условия работает соответствующая ветвь программы, если все условия неверны, то выполняются команды, размещенные после else.
Оператор switch

Позволяет создавать более наглядную программу

switch <ключ>

case <значение ключа-1>

команды MatLab

case <значение ключа-2>

команды MatLab

otherwise



команды MatLab

end
Каждая ветвь определяется оператором, переход в нее выполняется тогда, когда переменная <ключ> принимает значение, указанное после case (должны быть целыми). Если подходящего значения для переменной не нашлось, то выполняется ветвь программы, соответствующая otherwise.


ЗАДАНИЯ:

  1. Создать вектор-строку, если начальный элемент равен 0, конечный 14, шаг равен 1. Транспонировать строку в столбец. Вывод в графическом виде матриц (команда imagesc(a)) в одном окне. Оформить графики. Использовать команды subplot и colorbar.

  2. Создать матрицы размерностью : C - единиц; D - нулей; E - равномерно распределенных случайных чисел; F - нормально-распределенных случайных чисел. Вывод в графическом виде матриц (команда imagesc(a)) в одном окне. Оформить графики. Использовать команды subplot и colorbar.

  3. Создать три вектора-строки из 5-ти элементов многочлена f (в соответствии с вариантом). Объединить эти строки в матрицу . Транспонировать в матрицу В(5х3). Использовать интерактивный ввод данных. Вывод в графическом виде матриц A и B (команда imagesc(a)) в одном окне. Оформить графики. Использовать команды subplot и colorbar.




  1. n=5 и х=2; x=3; x=4



  1. f = n(ex+e-x), n=2:6, x=3,5,7

  1. f=ex2+n, n=11:15, x=2,4,6

  1. f=, n=3:7, x=12,13,16

  1. f=, n=1,3,5,7,9 и х=2; x=3; x=4

  1. f=, n=2,3,4,5,6 x=- π,0, π

  1. f=[nx, (n-1)x, (n-2)x, (n-3)x, (n-4)x,] n=6,7; x=e; x=2e; x=3e

  1. f=[ncosx, (n-1) cosx, (n-2) cosx, (n-4) cosx, (n-6) cosx], n=23; x=- π,0, π

  1. f=sin2π+1/(ncos x), n=2,5,9,11,33; x=- π,0, π

  1. f=sin(1/(x2+n)), n=2,3,4,5,6 x=- π,0, π

  1. f=log2(x2+n +1), n=1:5, x=e; x=2e; x=3e

  1. f=x3+x2-n, n=1:5, x=1,5; 3,7;4,9

  1. f=sinx/(cosx+n), n=2,3,4,5,6 x=- π,0, π

  1. f=n+1/sqrt(x+n), n=1,3,5,7,9; х=2, x=3, x=4




  1. Вычислить значения функции f(x) для всех элементов матрицы A (в соответствии с вариантом). Использовать циклы, интерактивный ввод данных. Результат сохранить как матрицу С.

  2. Вывод в графическом виде матриц А и С (команда imagesc(a)) в одном окне. Оформить графики. Использовать команды subplot и colorbar.

1. ;   .

2. ;   .

3. ;   .

4. ;   .

5. ;   .

6. ;   .

7. ; .

8. ;   .

9. ;   .

10. ;   .

11. ;

12. ;

13. ;

14. ;



15. ;

ВОПРОСЫ:
1 Создание векторов в системе Matlab.

  1. Создание матриц в системе Matlab. Специальные функции для создания матриц.

  2. Индексация векторов и матриц в системе Matlab, удаление, обнуление строк, столбцов.

  3. Операции почленные и матричные в системе Matlab.

  4. Получение транспонированных массивов.

  5. Объединение матриц.

  6. Создание строковой константы. Введение комментария.

  7. Ввод числовой и символьной информации с клавиатуры.

  8. Оператор цикла.


Смотрите также:
Общие принципы работы с матрицами в системе matlab лабораторная работа №3
149.49kb.
1 стр.
Лабораторная работа. Системный реестр Windows
74.22kb.
1 стр.
Лабораторная работа №12 процедуры и функции цель работы: Изучить принципы работы с процедурами и функциями Общие сведения
66.1kb.
1 стр.
Лабораторная работа №7 обработка двумерных массивов цель работы: Изучить принципы работы с двумерными массивами. Общие сведения
76.78kb.
1 стр.
Лабораторная работа №6 обработка одномерных массивов цель работы: Изучить принципы работы с одномерными массивами. Общие сведения
97.36kb.
1 стр.
Лабораторная работа по химии, физике, биологии, т е. по естественно-научным предметам. На уроках русского языка и литературы термин «лабораторная работа»
261.84kb.
1 стр.
Лабораторная работа Процедуры настройки параметров персептронных нейронных сетей. Правила настройки
76.71kb.
1 стр.
Лабораторная работа №5 Лабораторная работа выполняется согласно выбранной теме курсовой работы!!! Количество таблиц в бд: от 4 до 6
46.6kb.
1 стр.
Лабораторная работа №1 Построение детерминированного синтаксического анализатора
278.71kb.
1 стр.
Лабораторная работа Использование стандартных компонентов в C++ Builder
87.05kb.
1 стр.
Лабораторная работа 9-01 Лабораторная Шонин В. А. работа 9-01 Использование табличной верстки для создания Web-страниц
446.97kb.
1 стр.
Основы работы с Excel Работа с функциями Excel Создание числовых последовательностей Работа с матрицами и их преобразование Построение графиков Поиск решения уравнения и системы уравнений
80.81kb.
1 стр.