Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
1. Формирование векторов и матриц
В MatLab можно использовать скаляры, векторы и матрицы.
Массив - упорядоченная, пронумерованная совокупность однородных данных.
Матрица это массив, представленный в виде прямоугольной таблицы, каждый элемент которой имеет индексы, определяющие однозначно его положение в матрице.
Вектор это одномерная матрица. Без особых указаний со стороны пользователя это матрица-столбец.
Скаляр рассматривается как матрица [1x1],
Для ввода скаляра достаточно присвоить его значение какой-то переменной.
Для ввода массивов (векторов или матриц) их элементы заключают в квадратные скобки.
При вводе вектора-строки элементы отделяются пробелами или запятыми.
При вводе вектора-столбца элементы отделяются точкой с запятой.
При вводе матрицы элементы строк отделяются пробелами или запятыми, элементы столбцов разделяют точкой с запятой.
MatLab различает строчные и прописные буквы. Количество воспринимаемых в MatLab символов в имени переменной составляет 31.
Для ввода длинных формул или команд в командную строку следует поставить три точки (подряд, без пробелов), нажать клавишу <Enter> и продолжить набор формулы на следующей строке. Так можно разместить выражение на нескольких строках.
1). Вектор - строка
V1=[1 2 3 4] % или V2=[1,2,3,4] или V2=1:4
2). Вектор - столбец
V1=[1; 2; 3; 4]
V3=[2+2/(3+4),exp(5),sqrt(10)]%выражения
V1(2)%вызов элементов вектора
V3(1)
t=V2(3)
V3
Знак точка с запятой в конце ввода предотвращает вывод вектора (матрицы) на экран;
%сформировать вектор, элементы которого расположены в арифметической прогрессии x=xn:h:xk;
X=1:2:20;
%1 способ
M=[1,2,3;4,2,5;7,8,9] %или M=[1 2 3;4 5 6;7 8 9];
. . . . . . . . . .
M %вывод на экран
%2 способ
Matr=[1:7;11:17;21:27;31:37]
%3 способ
функция magic(n) задает магическую матрицу nxn все ее элементы не превышают n^2;
суммы всех элементов столбцов, строк, диагонали равны 34 (для n=4);
M1=magic(4)
%4 способ
функции создания массивов со случайными элементами rand: rand(n) rand(m,n)генерируют матрицу (nxn)или(mxn) с элементами, распределенными по равномерному закону в промежутке (0,1);
YR=rand(4,3)
проверить равномерность распределения случайных чисел можно, построив большое число точек со случайными координатами;
X=rand(1000,1);
Y=rand(1000,1);
plot(X,Y)
функция randn(n), randn(mxn) генерируют матрицу nxn (mxn) с элементами, распределенными по нормальному закону с мат. Ожиданием = 0 и ср. кв. отклонением = 1;
YN=randn(4,3)
для проверки распределения построим гистограмму;
Y=randn(1000,1);
hist(Y,100)
строится гистограмма из 100 столбцов для 1000 случайных чисел с нормальным законом распределения;
Y1=randn(4,3)*10 %все элементы умножаются на 10;
a=3; b=20; %интервал [a;b]
Y2=rand(4,3)*(b-a)+a
%генерируется матрица (4x3)с числами в интервале [20;3];
%5 способ
функция eye(n), eye(m,n) возвращает единичную матрицу nxn или mxn
t=eye(3)
t2=eye(4,3)
%6 способ
функция ones(n), ones(m,n) возвращает матрицу nxn или mxn, все элементы которой единицы;
H=ones(3,4)
%7 способ
функция zeros(n), zeros(m,n) возвращает матрицу nxn или mxn, все элементы которой нули;
D=zeros(3,2)
%8 способ
По формуле.
2. Действия со строками и столбцами
M1=magic(4)
Переприсваивание элемента M(2,2)
M(2,2)=10
Выражение M(i) дает доступ к элементам матрицы, развернутым в один столбец
M(5)
A=[ -5 3 -2 -9 -1; 0 -1 2 4 3;2 3 7 6 2;1 5 -4 3 -4; 2 6 -5 -8 3]
Переставить столбцы в указанном порядке
B=A(:,[4,1,2,5,3])
Переставить строки в указанном порядке
B=A([2,5,1,4,3],:)
выделить 1,2,3 столбцы, строки переставить в указанном порядке
B=A([2,5,1,4,3],1:3)
Транспонирование квадратной матрицы
M=[1 2 3 4;4 5 6 7;7 8 9 1;2 4 6 8]
MT=M'
Транспонирование не квадратной матрицы
M2=[1 2 3 4;4 5 6 7;7 8 9 1]
MT2=M2'
Транспонирование вектора
N=[1 4 3 6]
NT=N'
%выделение подматрицы:
B=magic(6)
B(1:2,:) %первые две строки, все столбцы;
B(1:2,:)=0 %обнулить первые две строки
Выделение столбцов со 2-го по 5-й, 6 строк:
C1=B(:,2:5)
Выделение подматрицы с 2-й по 5-ю строки и с 3-го по 5-й столбец
C2=B(2:5,3:5)
Выделение подматрицы с 1-й по 3-ю строки и с 2-го по последний столбец;
C3=B(1:3,2:end)
%Удаление столбцов и строк матрицы
B=magic(5)
B(:,2)=[] %Удалим 2-й столбец
B(2,:)=[] %Удалим 2-ю строку
Помощь:
help elfun вывести список всех элементарных математических функций.
help specfun
help elmat вывод более сложных математических и матричных функций.
3. Арифметические операторы и функции MATLAB
Таблица 1. Арифметические операции
Название Оператор |
Синтаксис |
Плюс + |
М1+М2 |
Унарный плюс + |
+М |
Минус - |
М1-М2 |
Унарный минус - |
-М |
Матричное умножение * |
М1*М2 |
Поэлементное умножение массивов .* |
А1*А2 |
Возведение матрицы в степень ^ |
М1^х |
Поэлементное возведение массива в степень .^ |
А1.^х |
Обратное (справа налево) деление матриц \ |
M1\M2 |
Деление матриц слева направо / |
М1/М2 |
Поэлементное деление массивов справа налево .\ |
А1.\А2 |
Поэлементное деление массивов слева направо ./ |
А1./А2 |
Транспонирование матрицы A |
Система MATLAB работает как с действительными, так и с комплексными числами.
Таблица 2. Элементарные алгебраические функции
Функция |
Описание |
abs(x), |
Вычисление абсолютного значения действительного числа x. |
sqrt(x) |
Вычисление квадратного корня |
round(x) |
Округление до целого. |
fix(x) |
Округление до ближайшего целого в сторону нуля. |
floor(x) |
Округляет до меньшего целого |
ceil(x) |
Округляет до большого целого |
rem(x, y) |
Вычисление остатка от деления x на y. |
exp(x) |
Вычисление е в степени x. |
log(x) |
Вычисление натурального логарифма числа x. |
log10(x) |
Вычисление десятичного логарифма числа x. |
factorial(x) |
Вычисляет факториал числа х |
pow2(x) |
Возводит двойку в степень х |
pi |
Выдает число пи |
lcm(x,y,z) |
наименьшее общее кратное, наибольший общий делитель |
Функция |
Описание |
abs(x), |
Вычисление абсолютного значения действительного числа x. |
sqrt(x) |
Вычисление квадратного корня |
round(x) |
Округление до целого. |
fix(x) |
Округление до ближайшего целого в сторону нуля. |
floor(x) |
Округляет до меньшего целого |
ceil(x) |
Округляет до большого целого |
mod(x,y) |
остаток от деления нацело с учетом знака |
rem(x, y) |
Вычисление остатка от деления x на y. |
exp(x) |
Вычисление е в степени x. |
log(x) |
Вычисление натурального логарифма числа x. |
log2(x) |
Вычисление логарифма по основанию 2 |
log10(x) |
Вычисление логарифма по основанию 10 |
factorial(x) |
Вычисляет факториал числа х |
pow2(x) |
Возводит двойку в степень х |
pi |
Выдает число пи |
lcm(x,y,z) |
наименьшее общее кратное, наибольший общий делитель |
Система
MATLAB предоставляет возможности для вычисления следующих тригонометрических и обратных тригонометрических функций переменной x (табл.3).
Таблица 3. Тригонометрическиe функции
Функция |
Описание |
sin(x) |
Вычисление синуса |
cos(x) |
Вычисление косинуса |
tan(x) |
Вычисление тангенса |
asin(x) |
Вычисление арксинуса |
acos(x) |
Вычисление арккосинуса |
atan(x) |
Вычисление арктангенса |
atan2(y, x) |
Вычисление арктангенса по координатам точки |
ПРИМЕРЫ:
1).Арифметические операторы и функции MATLAB
M1=[1 2;3 4]
M2=[5 6;7 8]
M=M1+M2
M=M1-M2
M1*2 %умножение на скаляр
M1.*M2 %поэлементное умножение матриц (массивов)
M1*M2 %матричное умножение
M1./M2 %поэлементное деление матриц (массивов)
M1/M2 %Деление матриц слева направо
M1^2 %возведение матрицы в степень (M1*M1 2 раза)
M1.^2 %Поэлементное возведение матрицы (массива) в степень
C1=8/2 %обычное деление
C2=8\2 %это 2/8=0.25; Используется в СЛАУ
M1\M2 %Обратное (справа налево) деление матриц
T=M1' %транспонирование матрицы
n=(0:5) %вектор-строка
n=(0:5)' %транспонированный вектор (столбец)
tabl=[n n.^2 2.^n] %создает таблицу квадратов и степеней двойки
2). Встроенные функции
X=[1 2 3]
Y1 = log(X)%returns the natural logarithm of the elements of X.
Y2 = log2(X)%computes the base 2 logarithm of the elements of X.
Y3 = log10(X) %returns the base 10 logarithm of the elements of X.
Y4 = exp(X) %returns the exponential for each element of X.
Y5=sqrt(X)%корень квадратный из элементов матрицы (вектора)
%Матрицы
Z=[10 25 34;15 36 27;18 11 37]
Y1 = log(Z)
Y5=sqrt(Z)
3).Функции обработки матриц
A=[1 -2 4;5 -6 7;-8 1 3]
b=[1 2 5 3 7 8 5 4 10]
abs(A) %модуль
det(A) %определитель матрицы
inv(A) %обратная матрица
diag(A) %главная диагональ матрицы
sum(A) %сумма по столбцам (sum(A,1))
sum(A,2) %сумма по строкам
sum(diag(A)) %сумма элементов главной диагонали матрицы (след)
trace(A) % след матрицы
S=sum(sum(A))%сумма матрицы
prod(A,1)%произведение элементов массива в столбцах (по умолчанию prod(C))
prod(A,2)%произведение элементов массива в строках
A' %транспонирование матрицы
sum(A') %сумма столбцов транспонированной матрицы (аналог sum(A,2) вектор-строка)
sum(A')' %аналог sum(A,1) вектор-столбец
ndims(A) %размерность массива
size(A) %размер массива
%вектор A хранится в двумерном массиве размерностью три на три.
length(b) %длина вектора
4).Функции max() и min().
disp('максимальный элемент массива')
max(A) - %возвращает наибольший элемент, если А -вектор;
или возвращает вектор-строку, содержащую
максимальные элементы каждого столбца,
если А -матрица.
max(A,[],dim) %возвращает наибольший элемент по столбцам
(dim=1)или по строкам (dim=2)
C2=max(A,[],1)
C3=max(A,[],2)
C4=max(max(A,[],2)) %возвращает наибольший элемент матрицы
[C,I]=max(A) %возвращает наибольшие элементы и вектор их
индексов
disp('минимальный элемент массива')
C1=min(A)
C2=min(A,[],1)
C3=min(A,[],2)
[C,I]=min(A)
% векторы
d1=[1 2 5 4 3]
d2=[4 8 7 3 1] C4=min(d1,d2) %сравнивает поэлементно векторы и возвращает меньший
%Функция mean(A)- возвращает арифметическое среднее значение
%элементов массива, если А -вектор;
%или возвращает вектор-строку, содержащую средние значения
%элементов каждого столбца, если А -матрица.
A=[1 2 6 4 8;6 7 13 5 4;7 9 0 8 12;6 6 7 1 2]
mean(A)
%mean(A,dim)возвращает средние значения по столбцам (dim=1)
%или по строкам (dim=2)
mean(A,2)
%median(A), median(A,dim)- возвращает медиану
A=magic(6)
M1=median(A)
M2=median(A,2)
A=[ 1 9 3 7 4 5]
M1=mean(A)
M1 =
4.8333
vpa(M1,3) % Вывод с точностью до 3 значащих цифр
ans =
4.83
M3=std(A,1) %стандартное отклонение с усреднением 1/n
M4=std(A) %стандартное отклонение с усреднением 1/(n-1)
std(X) возвращает стандартное отклонение элементов массива,
если А -вектор
или стандартное отклонение элементов каждого столбца,
если А -матрица.
%Функция fliplr(A) переставляет столбцы матрицы
относительно вертикальной оси
F=[1,2,3;5,45,3]
fliplr(F)
%Функция flipud(A) переставляет строки матрицы
относительно горизонтальной оси
F1=[3,2,12;6,5,4]
flipud(F1)
F2=magic(5)
flipud(F2)
5).Сортировка
disp('Сортировка элементов массива по возрастанию ') )%вывод комментария на экран disp( )
sort(b)
sort(A) %сортировка по столбцам по возрастанию
sort(A,2) %сортировка по строкам по возрастанию
-sort(-A) %сортировка по столбцам по убыванию
-sort(-A,2) %сортировка по строкам по убыванию
%Возвращает отсортированный массив и массив индексов элементов в исходном массиве
[b2,INDEX]=sort(b)
6).Округление до целого
F=[2.123 -4.999 7.513 3.001]
fix(F) %Отсекает дробную часть без округления
round(F) %Округляет число до целого по всем правилам округления
floor(F) %Округляет до меньшего целого
ceil(F) %Округляет до большого целого
7).Тригонометрические функции
sin(F)
cos(F)
tan(pi/4)
cot(pi/4)
Операции отношения и логические операции
Над массивами можно выполнять
операции поэлементного отношения :
A < B , A <= B , A > B , A>= B (только для действительных частей),
A == B, A~=B (равно/не равно - для действительных и мнимых частей),
которые возвращают массив с единицами (истина) и нулями (ложь) той же размерности.
Примеры
>>A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>>B=[2 3 4 5;5 4 3 2;1 2 3 4;6 5 4 3]
B =
2 3 4 5
5 4 3 2
1 2 3 4
6 5 4 3
>>A<B
ans =
0 1 1 0
0 0 0 0
0 0 0 0
1 0 0 1
>>A==B
ans =
0 0 0 0
1 0 0 0
0 0 0 0
0 0 0 0
>>A>=B
ans =
1 0 0 1
1 1 1 1
1 1 1 1
0 1 1 0
>>A~=B
ans =
1 1 1 1
0 1 1 1
1 1 1 1
1 1 1 1
Логические операции
Аналогично реализуются и логические операции:
~A отрицание,
A & B конъюнкция (логическое умножение - И),
A|B дизъюнкция (логическое сложение - ИЛИ).
Примеры
>>A1=[0 2 3 13
5 0 10 8
9 7 0 12
4 14 15 0]
>>B=[2 3 4 5;5 4 3 2;1 2 3 4;6 5 4 3]
B =
2 3 4 5
5 4 3 2
1 2 3 4
6 5 4 3
>>~A1
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
>>A1&B
ans =
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
>>A1|B
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
>>who
Your variables are:
A A1 B ans
>>whos
Name Size Bytes Class Attributes
A 4x4 128 double
A1 4x4 128 double
B 4x4 128 double
ans 4x4 16 logical
clc очистка экрана
who вывод имен активных переменных;
whos просмотра содержимого рабочей среды.
clear удаление всех переменных;
clear x удаление переменной х;
help elfun вывести список всех элементарных математических функций.
help specfun
help elmat вывод более сложных математических и матричных функций.
help format Информация о форматах
В математических выражениях операторы имеют определенный приоритет исполнения. Например, в MATLAB приоритет логических операторов выше, чем арифметических, приоритет возведения в степень выше приоритетов умножения и деления, приоритет умножения и деления выше приоритета сложения и вычитания.
Для изменения приоритета операций в математических выражениях используются круглые скобки. Степень вложения скобок не ограничивается.
Точка в MatLab используется не только для ввода десятичных дробей, но и для указания того, что деление или умножение массивов одинакового размера должно быть выполнено поэлементно.
К поэлементным относятся и операции с вектором и числом. Сложение вектора и числа не приводит к сообщению об ошибке. MatLab прибавляет число к каждому элементу вектора. То же самое справедливо и для вычитания:
» v = [4 6 8 10];
» s = v + 1.2
s =
5.2000 6.2000 9.2000 11.2000
» r = 1.2 - v
r =
-2.8000 -4.8000 -6.8000 -8.8000
» r1 = v - 1.2
r1 = 2.8000 4.8000 6.8000 8.8000
Умножать вектор на число можно как справа, так и слева:
» v = [4 6 8 10];
» p = v*2
р =.
8 12 16 20
» pi = 2*v
pi =
8 12 16 20
Делить при помощи знака / можно вектор на число:
» р = v/2
p =
2 3 4 5
Попытка деления числа на вектор приводит к сообщению об ошибке:
» р = 2/v
??? Error using ==> /
Matrix dimensions must agree.
Если требуется разделить число на каждый элемент вектора и записать результат в новый вектор, то следует использовать операцию ./
» w = [4 2 6];
» d = 12./w
d =
3 6 2
Все вышеописанные операции применимы как к вектор-строкам, так и к вектор-столбцам..
Особенность MatLab представлять все данные в виде массивов является очень удобной. Пусть, например, требуется вычислить значение функции sin сразу для всех элементов вектора с (который хранится в массиве с) и записать результат в вектор d. Для получения вектора d достаточно использовать один оператор присваивания:
» d = sin(c)
Итак, встроенные в MatLab элементарные функции приспосабливаются к виду аргументов; если аргумент является массивом, то результат функции будет массивом того же размера, но с элементами, равными значению функции от соответствующих элементов исходного массива.
Из элементов массива можно формировать новые массивы.
Для помещения определенных элементов вектора в другой вектор в заданном порядке служит индексация при помощи вектора. Запись в массив w четвертого, второго и пятого элементов v производится следующим образом:
>> v = [1.3 3.6 7.4 8.2 0.9];
>> ind = [4 2 5];
>> w = v(ind)
w =
8.2000 3.6000 0.9000
MatLab предоставляет удобный способ обращения к блокам последовательно расположенных элементов вектор-столбца или вектор-строки. Для этого служит индексация при помощи знака двоеточия. Предположим, что в массиве w, соответствующем вектор-строке из семи элементов, требуется заменить нулями элементы со второго по шестой. Индексация при помощи двоеточия позволяет просто и наглядно решить поставленную задачу:
» w = [0.1 2.9 3.3 5.1 2.6 7.1 9.8];
» w(2:6) = 0;
» w
w =
0.1000 0 0 0 0 0 9.8000
Присваивание w(2:6) = 0 эквивалентно последовательности команд
w(2) = 0; w(3)=0; w(4)=0; w(5)=0; w(6)=0.
Индексация при помощи двоеточия оказывается удобной при выделении части из большого объема данных в новый массив:
» w - [0.1 2.9 3.3 5.1 2.6 7.1 9.8];
» wl = w(3:5)
wl =
3.3000 5.1000 2.6000
Составьте массив w2, содержащий элементы w кроме четвертого. В этом случае удобно использовать двоеточие и сцепление строк:
» w2 = [w(l:3) w(5:7)]
w2 =
0.1000 2.9000 3.3000 2.6000 7.1000 9.8000
PAGE 15