close

Вход

Забыли?

вход по аккаунту

?

Лб 6.2 V2

код для вставкиСкачать
 Лабораторная работа № 2
Массивы в MATLAB(4 часа)
1. Краткие сведения из теории
1.1. Все данные MATLAB представляет в виде массивов. Массив - упорядоченная, пронумерованная совокупность однородных данных. У массива должно быть имя. Фундаментальным принципом построения системы MATLAB является ее ориентация на операции с матрицами и векторами. Под вектором в MATLAB понимается одномерный массив данных, а под матрицей - двумерный массив. В этой главе описаны вычисления с векторами и матрицами.
1.2. Ввод векторов. Исходные значения векторов можно задавать с клавиатуры путем поэлементного ввода. Для этого в командной строке следует вначале указать имя вектора, потом поставить знак присваивания =, далее - открывающую квадратную скобку, а за ней ввести заданные значения элементов вектора, отделяя их пробелами или запятыми. Завершается строка закрывающей квадратной скобкой. Так, ввод
>> V=[1 2 3]
задает вектор - строку V, содержащий три элемента со значениями 1,2,3. Если после ввода нажать "V" и "Ввод", компьютер распечатает вектор "V". Тот же результат даст
>> V=[1,2,3]
Параллельное использование запятых и пробелов допустимо даже в пределах ввода одного вектора: запись V=[1 2,3] полностью эквивалентна предыдущим. Возможен ввод векторов в виде арифметических выражений, содержащих любые допустимые системе функции, например:
>> V=[2+2/(3+4),exp(5),sqrt(10)]
>> V
V =
2.2857 148.4132 3.1623
Длинный вектор можно вводить частями, которые затем объединять с помощью операции сцепления строк:
>> V1=[1 2 3];V2=[4 5 6];
>> V=[V1 V2]
V =
1 2 3 4 5 6
Оператор ":" (двоеточие) дает возможность создания векторов, каждый элемент которых отличается от предшествующего на постоянную величину, т.е. шаг. Например:
>> x=-0.1:0.3:1.4
x =
-0.1000 0.2000 0.5000 0.8000 1.1000 1.4000
Шаг, равный единице, допускается не указывать при автоматическом заполнении:
>> x=1:6;
>> x
x =
1 2 3 4 5 6
Шаг может быть и отрицательным:
>> t=1.9:-0.2:0.7
t =
1.9000 1.7000 1.5000 1.3000 1.1000 0.9000 0.7000
Вектор - столбец вводится аналогично, но значения элементов в перечне отделяются знаком ";":
>> a=[1.3;5.4;6.9]
a =
1.3000
5.4000
6.9000
Оператор ' (апостроф) транспонирует определенный выше вектор - столбец а (превращает в вектор - строку) и наоборот:
>> y=a'
y =
1.3000 5.4000 6.9000
>> y'
ans =
1.3000
5.4000
6.9000
1.3. Обращение к элементам вектора Доступ к элементам вектора осуществляется при помощи индекса (целое положительное число), заключаемого в круглые скобки после имени массива, в котором хранится вектор. Если среди переменных рабочей среды есть массив v, определенный вектор строкой
>> v=[3.1 4.5 7.1 2.2 0.8];
то для вывода, например, его третьего элемента, используется индексация:
>> v(3)
ans =
7.1000
Если нужно, наоборот, вставить на это место некоторое число, например π, то это можно сделать так:
>> v(3)=pi
>>v =
3.1000 4.5000 3.1416 2.2000 0.8000
Для помещения определенных элементов вектора в другой вектор в заданном порядке служит индексация при помощи вектора. Запись в массив w четвертого, второго и пятого элементов v производится следующим образом:
>> ind=[4 2 5]
>> w=v(ind)
>>w =
2.2000 4.5000 0.8000
Предположим, что в массиве w, соответствующем вектор - строке из семи элементов, требуется заменить нулями элементы со второго по шестой. Индексация при помощи двоеточия позволяет просто и наглядно решить поставленную задачу:
>> w=[0.1 2.2 3.4 5.6 3.1 6.8 9.7];
>> w(2:6)=0;
>> w
w =
0.1000 0 0 0 0 0 9.7000
Индексация при помощи двоеточия удобна при выделении части из большого объема данных в новый массив:
w=[0.1 2.2 3.4 5.6 3.1 6.8 9.7];
>> w1=w(3:5)
>>w1 =
3.4000 5.6000 3.1000
Составим массив w2 , содержащий элементы w кроме четвертого, используя двоеточие и сцепление строк:
>> w2=[w(1:3) w(5:7)]
>>w2 =
0.1000 2.2000 3.4000 3.1000 6.8000 9.7000
Указание номеров элементов вектора можно использовать и при вводе векторов, последовательно добавляя новые элементы (не обязательно в порядке возрастания их номеров). Команды:
>> h=10;
>> h(2)=20;
>> h(4)=40;
приводят к образованию вектора:
>> h
h =
10 20 0 40
Заметьте, что для ввода первого элемента h не обязательно указывать его индекс, т.к. при выполнении оператора h=10 создается вектор (массив размера один на один). Следующие операторы присваивания приводят к автоматическому увеличению длины вектора h, а пропущенные элементы (в нашем случае h(3)) получают значение ноль.
1.4. Применение функций обработки данных к векторам. Результатом применения функции length(V) к некоторому вектору V является длина вектора - число его элементов. Функция max(V) выдает значение максимального по значению элемента вектора V. Аналогично, функция min(V) извлекает минимальный элемент вектора V.Функции mean(V) и std(V) определяют, соответственно, среднее значение и среднеквадратическое отклонение от него элементов вектора V.Функция сортировки sort(V) формирует вектор, элементы которого распределены в порядке возрастания их значений. Функция sum(V) вычисляет сумму элементов вектора V. Функция prod(V) выдает произведение всех элементов вектора V. Функция cumsum(V) формирует вектор того же типа и размера, любой элемент которого является суммой всех предыдущих элементов вектора V (вектор кумулятивной суммы). Функция cumprod(V) создает вектор, элементы которого являются произведением всех предыдущих элементов вектора V. Функция diff(V) выдает вектор, имеющий размер на единицу меньший, чем размер вектора V, элементами которого является разность между соседними элементами вектора V. Применение описанных функций проиллюстрировано ниже.
>> v=[1 .1 .5 .1 .1 .4]
v =
1.0000 0.1000 0.5000 0.1000 0.1000 0.4000
>> disp(length(v))
6
>> disp(max(v))
1
>> disp(min(v))
0.1000
>> disp(mean(v))
0.3667
>> disp(std(v))
0.3559
>> disp(sort(v))
0.1000 0.1000 0.1000 0.4000 0.5000 1.0000
>> disp(sum(v))
2.2000
>> disp(prod(v))
2.0000e-004
>> disp(cumsum(v))
1.0000 1.1000 1.6000 1.7000 1.8000 2.2000
>> disp(cumprod(v))
1.0000 0.1000 0.0500 0.0050 0.0005 0.0002
>> disp(diff(v))
-0.9000 0.4000 -0.4000 0 0.3000
Часто необходимо знать не только значение минимального элемента в массиве, но и его индекс (порядковый номер). Если указать второй выходной параметр, то можно получить дополнительную информацию о первом индексе элемента, значение которого является максимальным или минимальным:
>> [M,n]=max(v)
M =
1
n =
1
>> [M,n]=min(v)
M =
0.1000
n =
2
Для того, чтобы упорядочить вектор v по убыванию, также используем функцию sort:
>> R=-sort(-v)
R =
1.0000 0.5000 0.4000 0.1000 0.1000 0.1000
Вызов sort с двумя выходными аргументами приводит к образованию массива индексов соответствия элементов упорядоченного и исходного массивов:
>> [r,ind]=sort(v)
r =
0.1000 0.1000 0.1000 0.4000 0.5000 1.0000
ind =
2 4 5 6 3 1
Если аргументом функций max и min является вектор, состоящий из комплексных чисел, то результатом является максимальный или минимальный по модулю элемент. Функция sort также упорядочивает комплексный вектор по модулю, а компоненты с равными модулями располагаются в порядке возрастания фаз. Применение встроенных функций обработки данных к некоторым последовательно расположенным элементам вектора не представляет труда. Самостоятельно о функциях обработки данных можно узнать, набрав в командной строке команду help datafun. Следующий вызов функции prod вычисляет произведение элементов вектора z со второго по шестой:
>> p=prod(z(2:6))
Ниже находится сумм элементов произвольного вектора z с четными индексами.
>> ind=2:2:length(z);
>> s=sum(z(ind))
1.5. Математические операции с векторами. Сложение векторов. Складываться (суммироваться) могут с помощью арифметического знака <<+>> только векторы одинакового типа; т.е. оба вектора должны быть либо векторами - строками, либо векторами - столбцами и иметь одинаковую длину (одинаковое число элементов). Например:
>> x=[1 2 3];y=[4 5 6];
>> v=x+y
v =
5 7 9
Вычитание векторов, имеющих одинаковую структуру, осуществляется с помощью арифметического знака <<->>, например:
>> v=x-y
v =
-3 -3 -3
Транспонирование вектора осуществляется применением знака апострофа, который записывается сразу за записью имени исходного транспонируемого вектора:
>> x'
ans =
1
2
3
Умножение вектора на число осуществляется с помощью знака арифметического умножения <<*>>, например:
>> v=2*x
v =
2 4 6
Умножение двух векторов определено в математике только для векторов одинакового размера и лишь тогда, когда один из векторов сомножителей является строкой, а второй - столбцом. Скалярное произведение двух векторов возвращает функция dot:
>> x=[1 2 3];y=[4 5 6]
>> s=dot(x,y)
s =
32
Векторное произведение. Для трехкомпонентных векторов в MATLAB существует функция cross, которая позволяет найти векторное произведение двух векторов. Пример:
>> v1=[1 2 3];v2=[4 5 6];
>> cross(v1,v2)
ans =
-3 6 -3
1.6. Поэлементные операции с векторами. В системе MATLAB есть ряд операций, которые преобразуют заданный вектор в другой такого же размера и типа, но в то же время не являются математическими операциями с вектором как математическим объектом. К таким операциям принадлежат, например, все элементарные математические функции, которые зависят только от одного аргумента. В системе MATLAB запись вида Y=sin(X), где X - некоторый известный вектор, приводит к формированию нового вектора Y, имеющего тот же тип и размер, но элементы которого равны синусу соответствующих элементов вектора - аргумента. Приведем примеры:
>> x=-2:2
x =
-2 -1 0 1 2
>> y=sin(x)
y =
-0.9093 -0.8415 0 0.8415 0.9093
>> z=tan(x)
z =
2.1850 -1.5574 0 1.5574 -2.1850
>> v=exp(x)
v =
0.1353 0.3679 1.0000 2.7183 7.3891
Кроме этих операций в MATLAB предусмотрено несколько операций поэлементного преобразования, осуществляющихся с помощью знаков обычных арифметических действий. Все эти операции применяются к векторам одинакового типа и размера. Результатом их является вектор такого же типа и размера.
Добавление (вычитание) числа к (из) каждому (го) элементу (а) вектора. Осуществляется с помощью знака <<+>> (<<->>).
Поэлементное умножение векторов. Производится при помощи совокупности знаков <<.*>> (не вставляйте пробел между точкой и звездочкой!), которая записывается между именами перемножаемых векторов. В результате получается вектор, каждый элемент которого является произведением соответствующих элементов векторов - "сомножителей".
Поэлементное деление векторов. Осуществляется при помощи совокупности знаков <<./>>. Результат - вектор, каждый элемент которого является частным от деления соответствующего элемента первого вектора на соответствующий элемент второго вектора.
Поэлементное деление векторов в обратном направлении. Осуществляется при помощи совокупности знаков <<.\>>. Результат - вектор, каждый элемент которого является частным от деления соответствующего элемента второго вектора на соответствующий элемент первого вектора.
Поэлементное возведение в степень. Осуществляется при помощи совокупности знаков <<.^>>. Результат - вектор, каждый элемент которого является соответствующим элементом первого вектора, возведенным в степень, величина которой равна значению соответствующего элемента второго вектора. Пример:
>> x=[1,2,3,4,5];y=[-2,1,4,0,5];
>> disp(x+2)
3 4 5 6 7
>> disp(y-3)
-5 -2 1 -3 2
>> disp(x.*y)
-2 2 12 0 25
>> disp(x./y)
Warning: Divide by zero.
-0.5000 2.0000 0.7500 Inf 1.0000
>> disp(x.\y)
-2.0000 0.5000 1.3333 0 1.0000
>> disp(x.^y)
1 2 81 1 3125
1.7. Двумерные массивы, матрицы. Ввод матриц. Матрицы малых размеров удобно вводить из командной строки. Существует три способа ввода матриц. Например, матрицу
можно ввести следующим образом: набрать в командной строке (разделяя элементы строки матрицы пробелами): A=[0.7 -2.5 9.1 и нажать <Enter>. Курсор перемещается в следующую строку (символ приглашения командной строки >> отсутствует). Элементы каждой следующей строки матрицы набираются через пробел, а ввод строки завершается нажатием на <Enter>. При вводе последней строки в конце ставится закрывающая квадратная скобка:
>> A=[0.7 -2.5 9.1
8.4 0.3 1.7
-3.5 6.2 4.7]
Если после закрывающей квадратной скобки не ставить точку с запятой для подавления вывода в командное окно, то матрица выведется в виде таблицы. Другой способ ввода матрицы основан на том, что матрицу можно рассматривать как вектор-столбец, каждый элемент которого является строкой матрицы. Поскольку точка с запятой используется для разделения элементов вектор-столбца, то ввод, к примеру, матрицы
осуществляется оператором присваивания:
>> B=[6.1 0.3; -7.9 4.4; 2.5 -8.1];
Введите матрицу и отобразите ее содержимое в командном окне, набрав в командной строке B и нажав <Enter>. Очевидно, что допустима такая трактовка матрицы, при которой она считается вектор-строкой, каждый элемент которой является столбцом матрицы. Следовательно, для ввода матрицы
достаточно воспользоваться командой:
>> C=[[0.4; 0.1] [-7.2; -2.1] [5.3; -9.5]]
Обратите внимание, что внутренние квадратные скобки действительно нужны. Оператор C=[0.4; 0.1 -7.2; -2.1 5.3; -9.5] является недопустимым и приводит к сообщению об ошибке, поскольку оказывается, что в первой строке матрицы содержится только один элемент, во второй и третьей - по два, а в четвертой - снова один. Воспользуйтесь командой whos для получения информации о переменных A, B и C рабочей среды. В командное окно выводится таблица с информацией о размерах массивов, памяти, необходимой для хранения каждого из массивов, и типе - double array:
>> whos A B C
Name Size Bytes Class
A 3x3 72 double array
B 3x2 48 double array
C 2x3 48 double array
Функция size позволяет установить размеры массивов, она возвращает результат в виде вектора, первый элемент которого равен числу строк, а второй - столбцов:
>> s=size(B)
s =
3 2
Оператор ' (апостроф) транспонирует определенную выше матрицу С (строки становятся столбцами и наоборот):
>> C'
ans =
0.4000 0.1000
-7.2000 -2.1000
5.3000 -9.5000
Третий способ формирования векторных и матричных массивов состоит в создании пустого массива M=[ ], имеющего размер 0×0, который затем заполняется с использованием редактора массивов Array Editor. Его вызов производится из окна рабочего пространства Workspace (рис.1.2, лабораторная работа № 1). В этом окне содержится информация обо всех переменных, существующих в данный момент в рабочем пространстве системы. Двойной щелчок на строке с именем переменной или выделение строки и щелчок на кнопке Open Selection (открыть выделенное) отображает в окне редактора матричное представление редактируемого массива. В нем в соответствующих полях задается размер матрицы (число ее строк и столбцов) и далее вводятся числа, выражения, переменные и функции в отдельные клетки появившейся таблицы. Этот способ обеспечивает быстрый доступ к элементам матрицы и позволяет их вводить или редактировать в произвольном порядке.
1.8. Обращение к элементам матриц. Доступ к элементам матриц осуществляется при помощи двух индексов - номеров строки и столбца, заключенных в круглые скобки после имени массива, котором хранится массив, например
>> M(2,3)
ans =
7
Если нужно, наоборот, вставить на это место некоторое число, например π, то это можно сделать так:
>> M(2,3)=pi
M =
1.0000 2.0000 3.0000 4.0000
5.0000 6.0000 3.1416 8.0000
9.0000 10.0000 11.0000 12.0000
Обратите внимание на то, что после операции присваивания нового значения хотя бы одному элементу матрицы, не завершенной точкой с запятой, матрица М целиком выводится в командное окно. Присвоить можно и значение элементу матрицы, индексы которого превышают текущие ее размеры. В этом случае эти размеры будут соответственно увеличены, а остальные элементы такой расширенной матрицы будут заполнены нулями:
>> A=[1 2]
A =
1 2
>> A(2,3)=5
A =
1 2 0
0 0 5
1.9. Матричные действия с матрицами. К матричным действиям с матрицами относятся такие операции, которые используются в матричном исчислении в математике. Базовые действия с матрицами - сложение, вычитание, транспонирование, умножение матрицы на число, умножение матрицы на матрицу - осуществляются в MATLAB с помощью обычных знаков арифметических операций. Условия, при которых эти операции возможны:
● при сложении или вычитании матриц они должны иметь одинаковые размеры;
● при умножении матриц число столбцов первого множителя должно совпадать с числом строк второго множителя.
Невыполнение этих условий приводит к появлению сообщения об ошибке. Примеры.
Пример сложения и вычитания
>> A=[1 2 3 4 5;6 7 8 9 11]
A =
1 2 3 4 5
6 7 8 9 11
>> B=[0 -1 -2 -3 -4;5 6 7 8 9]
B =
0 -1 -2 -3 -4
5 6 7 8 9
>> A+B
ans =
1 1 1 1 1
11 13 15 17 20
>> A-B
ans =
1 3 5 7 9
1 1 1 1 2
Пример умножения на число
>> 5*A
ans =
5 10 15 20 25
30 35 40 45 55
>> A*5
ans =
5 10 15 20 25
30 35 40 45 55
Пример транспонирования матрицы
>> A'
ans =
1 6
2 7
3 8
4 9
5 11
Транспонированная матрица А обозначается АТ.
Пример умножения матрицы на матрицу
>> A'*B
ans =
30 35 40 45 50
35 40 45 50 55
40 45 50 55 60
45 50 55 60 65
55 61 67 73 79
>> C=A*B'
C =
-40 115
-94 299
2. Практическая часть (порядок выполнения лабораторной работы)
2.1. Для заданных векторов a и b длины n:
2.1.1. Вычислить их сумму, разность и скалярное произведение.
2.1.2. Образовать вектор с =[a1,a2,...,an,b1,b2,...,bn], определить его максимальный и минимальный элементы и поменять их местами.
2.1.3. Упорядочить вектор c по возрастанию и убыванию.
2.1.4. Переставить элементы вектора c в обратном порядке и записать результат в новый вектор.
2.1.5. Найти векторное произведение u=[a1,a2,a4] и v=[b2,b3,b4].
Варианты к заданию 2.1:
1. a = [0.5 3.7 6.0 -4.3 1.2 -2.7 2.4 2.2];b = [3.6 7.0 7.0 5.4 2.6 -2.7 -6.4 0.3].
2. a = [-4.8 -1.3 -1.0 0.7 4.0 5.8 4.3 -8.0];b = [-1.1 -1.9 7.1 -2.1 6.8 2.8 0.3 1.6].
3. a = [1.0 -3.9 -2.3 -3.3 -1.7 2.2 -0.6 1.8];b = [2.7 -2.7 -2.2 4.4 0.4 -6.0 -3.4 -5.2].
4. a = [-2.4 3.3 -0.1 3.6 7.4 -2.8 0.3 2.2];b = [6.3 0.6 4.3 -3.7 -7.0 3.7 3.7 8.0].
5. a = [8.4 -5.9 -6.5 -0.9 6.9 -1.7 1.7 0.8];b = [-0.0 2.0 -1.5 7.5 -4.0 -3.0 -6.2 0.0].
6. a = [5.3 6.8 -7.1 6.8 -4.0 -2.3 -4.4 -0.2];b = [7.5 -1.5 -4.9 -4.6 -2.3 -5.3 5.5 2.3].
7. a = [1.2 -4.1 -0.8 -0.7 -2.2 1.7 3.3 -6.1];b = [-1.5 2.2 1.0 -4.3 -0.0 -1.8 -1.5 2.4].
8. a = [6.6 -5.0 -2.7 8.3 3.8 1.9 1.1 2.7];b = [-1.0 3.2 4.2 -6.4 1.9 -6.5 -6.2 -8.1].
9. a = [-1.9 0.4 1.8 4.2 -3.8 -4.7 4.0 -2.1];b = [-8.7 -4.2 -1.4 2.8 -2.2 7.8 0.0 -0.1].
10. a = [0.9 1.7 -3.2 -3.8 7.3 6.0 -0.2 8.6];b = [0.6 -0.4 -6.9 -2.2 1.6 3.8 -3.2 0.4].
2.2. Вычислить для своего варианта значения функции на отрезке в заданном числе равномерно отстоящих друг от друга точек. Построить по точкам графики функций. Варианты к заданию 2.2:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
2.3. Ввести матрицы
и найти значения следующих выражений (варианты к заданию 2.3):
1. .2. .3. .
4. .5. .6. .
7. .8. .
9. .10. .
Документ
Категория
Рефераты
Просмотров
58
Размер файла
116 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа