Главная страница

Тема-3-5. Основы работы с математическими пакетами (MathCad)


Скачать 3.25 Mb.
НазваниеОсновы работы с математическими пакетами (MathCad)
Дата28.09.2022
Размер3.25 Mb.
Формат файлаpdf
Имя файлаТема-3-5.pdf
ТипДокументы
#702801
страница7 из 17
1   2   3   4   5   6   7   8   9   10   ...   17
Тема 3.5. Основы работы с математическими пакетами
Страница 309
Пример 3.5.3-17
>>f=(a.*sin(a)+a.^2)./(a+1);
>>
Часто требуется вычислить функцию от вектора значений аргумента, отличающихся друг от друга на постоянный шаг. Для создания таких векторов-строк предусмотрена операция двоеточие - :, которая отделяет начальное значение аргумента, шаг и конечное значение аргумента.
Пример 3.5.3-18
>>x=-1.2:0.5:1.8
x =
-1.2000 -0.7000 -0.2000 0.3000 0.8000 1.3000 1.8000
>>f=(x.*sin(x)+x.^2)./(x+1)
f =
-12.7922 3.1365 0.0997 0.1374 0.6744 1.2794 1.7832
>>
Шаг может быть отрицательным, в этом случае начальное значение должно быть больше, либо равно конечному значению для получения непустого вектора. Если шаг равен единице, то его можно не указывать, например:
Пример 3.5.3-17
>>n=-3:4
n =
-3 -2 -1 0 1 2 3 4
>>
Ясно, что для заполнения вектор-столбца элементами с постоянным шагом следует транспонировать вектор-строку.
Создание векторов при помощи двоеточия и умение производить поэлементные операции необходимо для визуализации массивов данных.
Пример 3.5.3-18
>>x=10:-2:0
x =
10 8 6 4 2 0
>>sin(x)=
-0.5440 0.9894 -0.2794 -0.7568 0.9093 0
>>
Необходимо отметить, что при умножении векторов друг на друга получается скаляр.
Пример 3.5.3-19
>>y=[2 3 5 8 3 9];
>>x*y
??? Error using ==> *
Inner matrix dimensions must agree.
>>
Здесь допущена ошибка, так как матрицы (векторы) не согласованны. Правильно будет:

Тема 3.5. Основы работы с математическими пакетами
Страница 310
Пример 3.5.3-20a
>>x*y'
ans =
112
>>
или можно было создать у как матрицу-столбец:
Пример 3.5.3-20b
>>y=[2;3;5;8;3;9]
>>
MatLab обладает большим набором встроенных функций для обработки векторных данных, часть из них приведена в табл. 3.5.3-6.
Таблица. 3.5.3-6
Функции
Назначение
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)
Упорядочение элементов вектора a по возрастанию
[a1,ind]=sort(a) Второй выходной аргумент ind является вектором из целых чисел от 1 до length(a), который соответствует проделанным перестановкам
Полный список имеющихся функций выводится в командное окно при помощи команды help datafun, а для получения подробной информацию о каждой функции требуется указать ее имя в качестве аргумента команды help. Обратите внимание на то, что ряд функций допускает обращение к ним как с одним, так и с двумя выходными аргументами. В случае нескольких выходных аргументов они заключаются в квадратные скобки и отделяются друг от друга запятой.
Очень часто требуется обработать только часть вектора, или обратиться к некоторым его элементам. Разберем правила MatLab, по которым производится индексация векторных данных. Для доступа к элементу вектора необходимо указать его номер в круглых скобках сразу после имени переменной, в которой содержится вектор. Например, сумма первого и третьего элементов вектора y находится при помощи выражения
Пример 3.5.3-21
>>s=y(1)+y(3);
>>

Тема 3.5. Основы работы с математическими пакетами
Страница 311
Обращение к последнему элементу вектора можно произвести с использованием аргумента end, то есть y(end) и y(length(v)) приводят к одинаковым результатам.
Указание номеров элементов вектора можно использовать и при вводе векторов,
последовательно добавляя новые элементы (не обязательно в порядке возрастания их номеров).
Пример 3.5.3-22
>>h=10;
>>h(2)=20;
>>h(4)=40
h =
10 20 0 40
>>
Заметим, что для ввода первого элемента h не обязательно указывать его индекс, так как при выполнении оператора h=1 создается вектор (массив размера один на один).
Следующие операторы присваивания приводят к автоматическому увеличению длины вектора h, а пропущенные элементы (в нашем случае h(3)) получают значение ноль.
Индексация двоеточием позволяет выделить идущие подряд элементы в новый вектор. Начальный и конечный номера указываются в круглых скобках через двоеточие,
например:
Пример 3.5.3-23
>>z=[0.2 -3.8 7.9 4.5 7.2 -8.1 3.4];
>>znew=z(3:6)
znew =
7.9000 4.5000 7.2000 -8.1000
>>
Применение встроенных функций обработки данных к некоторым последовательно расположенным элементам вектора не представляет труда. Следующий вызов функции
prod() вычисляет произведение элементов вектора z со второго по шестой:
Пример 3.5.3-24
>>p=prod(z(2:6))
>>
Индексация векторов служит для выделения элементов с заданными индексами в новый вектор. Индексный вектор должен содержать номера требуемых элементов, например:
Пример 3.5.3-25
>>ind=[3 5 7];
>>znew=z(ind)
znew =
7.9000 7.2000 3.4000
>>
Для нахождения суммы элементов произвольного вектора z с четными индексами необходимо выполнить следующие команды:

Тема 3.5. Основы работы с математическими пакетами
Страница 312
Конструирование новых векторов из элементов имеющихся векторов производится при помощи квадратных скобок. Следующий оператор приводит к образованию вектора, в котором пропущен пятый элемент вектора z.
Пример 3.5.3-27
>>znew=[z(1:4) z(6:end)]
znew =
0.2000 -3.8000 7.9000 4.5000 -8.1000 3.4000
>>
Для определения матрицы необходимо задать значение элементов строк и разделить строки матрицы символом - ;, заключенными в квадратные скобки:
А=[v1;v2;v3], где v1, v2, v3 -векторы одинаковой размерности.
Кроме того для определения матриц существует множество функций. Некоторые из них приведены в табл. 3.5.3-7.
Таблица. 3.5.3-7
Функция
Результат и примеры вызовов
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)
Пример 3.5.3-26
>>ind=2:2:length(z);
>>s=sum(z(ind))
>>

Тема 3.5. Основы работы с математическими пакетами
Страница 313
Рассмотрим примеры формирования матриц.
Пример 3.5.3-28
>>Z=zeros(3,5)
Z =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>>A=[1 2 3 4; 5 6 7 8; 9 10 11 12] ; %матрица А(4х3)
A =
1 2 3 4
5 6 7 8
9 10 11 12
>>
Причем элементами матрицы могут быть матрицы или вектора.
Пример 3.5.3-29
% первая "строка" матрицы К–матрица А,
% вторая – вектор [1 2 3 4]
>>K=[A;1 2 3]
K =
1 2 3 4
5 6 7 8
9 10 11 12
1 2 3 4
>>
Таким образом, как нам уже известно, вектор является матрицей с числом строк или столбцов равным 1, а число – матрица из одного элемента:
Пример 3.5.3-30
>>x=[1 2 3 4]
x =
1 2 3 4
>>c=1.256
c = 1.2560
>>
Над матрицами и элементами матрицы можно выполнять различные операции, но при этом необходимо учитывать правила работы с матрицами. Рассмотрим примеры этих операций.

Тема 3.5. Основы работы с математическими пакетами
Страница 314
1) Умножение матрицы A на матрицу B:
Пример 3.5.3-31
>>B=[2 5; 6 4; 6 5; 8 3]
B =
2 5
6 4
6 5
8 3
>>C=A*B
C =
64 40
152 108
240 176
>>
2) Умножение соответствующих элементов матриц необходимо использовать оператор поэлементного доступа ".":
Пример 3.5.3-32
>>A1=[1 3 4 6; 9 7 4 0; 8 6 3 9];
>>С2=A.*A1
С2 =
1 6 12 24
45 42 28 0
72 60 33 108
>>
3) Добавление элементов ("увеличение матрицы"):
Пример 3.5.3-33
>>a1=[A;x]
a1 =
1 2 3 4
5 6 7 8
9 10 11 12
1 2 3 4
>>
Пара квадратных скобок при этом является оператором объединения.
4) Транспонирование матрицы (апостроф - ' ):
Пример 3.5.3-34
>>Bt=B'
Bt =
2 6 6 8
5 4 5 3
>>

Тема 3.5. Основы работы с математическими пакетами
Страница 315
5) Удаление строки (столбца матрицы), в примере удален второй столбец:
Пример 3.5.3-35
>>A(:,2)=[ ]
%круглые скобки – оператор извлечения
A =
1 3 4
5 7 8
9 11 12
>>
6) Извлечение элемента матрицы:
Пример 3.5.3-36
>>y=A(3,3)
%обращение к элементу в 3-й строке и 3-м столбце
y =
12
>> % или
>> A(5)
%обращение по номеру так,
%если записать все столбцы матрицы друг за другом>
ans = 7
7) Извлечение строк или столбцов матрицы:
Для извлечения строк или столбцов вместо номера элементов в строке или столбце используется двоеточие, которое является оператором перечисления (с первого до последнего элемента строки или столбца):
Пример 3.5.3-37
>>
%извлечение 3-й строки из А,
>>
%двоеточие означает весь набор чисел
>>y=A(3,:)
y =
9 11 12
>>
% в этом примере это элементы из 3-й стоки и 1 2 3
столбцов.
Двоеточие, поставленное между двумя числами – это перечисление от одного до другого числа, с указанным интервалом (по умолчанию 1):
Пример 3.5.3-38
>>x=0:5
%вектор х = (0 1 2 3 4 5)
x =
0 1 2 3 4 5
>>x=0:0.1:0.5
%вектор х = (0 0,2 0,3 0,4 0,5)
x =
0 0.1000 0.2000 0.3000 0.4000 0.5000
>>
Таким образом, матрицы небольших размеров удобно вводить из командной строки.
Существует три способа ввода матриц. Например, необходимо определить следующую матрицу:

Тема 3.5. Основы работы с математическими пакетами
Страница 316
0.7
2.5
9.1
A
8.4
0.3
1.7
3.5
6.2
4.7
,




< 



,


Первый способ предполагает набрать в командной строке (разделяя элементы строки матрицы пробелами): A=[0.7 –2.5 9.1 и нажать . Курсор перемещается в следующую строку (символ приглашения командной строки >> отсутствует). Элементы каждой следующей строки матрицы набираются через пробел, а ввод строки завершается нажатием на . При вводе последней строки в конце ставится закрывающая квадратная скобка:
Пример 3.5.3-39a
>>A=[0.7 -2.5 9.1
8.4 0.3 1.7
-3.5 6.2 4.7]
A =
0.7000 -2.5000 9.1000
8.4000 0.3000 1.7000
-3.5000 6.2000 4.7000
>>
Второй способ ввода матрицы основан на том, что матрицу можно рассматривать как вектор-столбец, каждый элемент которого является строкой матрицы. Поскольку точка с запятой используется для разделения элементов вектора-столбца, то ввод, к примеру,
матрицы
6.1
0.3
B
7.9
4.4
2.5
8.1




< ,




,


осуществляется оператором присваивания:
Пример 3.5.3-39b
>>B=[6.1 0.3; -7.9 4.4; 2.5 -8.1]
B =
6.1000 0.3000
-7.9000 4.4000
2.5000 -8.1000
>>
Очевидно, что допустима такая трактовка матрицы, при которой она считается вектор-строкой, каждый элемент которой является столбцом матрицы. Следовательно, для ввода матрицы
0.4
7.2
5 / 3
C
0.1
2.1
9.5
,


< 

,
,


достаточно воспользоваться командой:
Пример 3.5.3-40
>>
C=[[0.4; 0.1] [-7.2; -2.1] [5.3; -9.5]]
C =
0.4000 -7.2000 5.3000
0.1000 -2.1000 -9.5000
>>
Необходимо обратить внимание, что внутренние квадратные скобки действительно нужны. Оператор C=[0.4; 0.1 -7.2; -2.1 5.3; -9.5] является недопустимым и приводит к

Тема 3.5. Основы работы с математическими пакетами
Страница 317
сообщению об ошибке, поскольку оказывается, что в первой строке матрицы содержится только один элемент, во второй и третьей — по два, а в четвертой - снова один.
Еще можно воспользоваться командой whos для получения информации о переменных A, B и C рабочей среды. В командное окно выводится таблица с информацией о размерах массивов, памяти, необходимой для хранения каждого из массивов, и типе –
double array:
Пример 3.5.3-41
>>whos A B C
Name Size Bytes Class
A 3x3 72 double array
B 3x2 48 double array
C 2x3 48 double array
>>
Функция size() позволяет установить размеры массивов, она возвращает результат в виде вектора, первый элемент которого равен числу строк, а второй – столбцов:
Пример 3.5.3-42
>>s=size(B)
s =
3 2
>>
Сложение и вычитание матриц одинаковых размеров производится с использованием знаков +, -. Звездочка * служит для вычисления матричного произведения, причем соответствующие размеры матриц должны совпадать.
Допустимо умножение матрицы на число и числа на матрицу, при этом происходит умножение каждого элемента матрицы на число и результатом является матрица тех же размеров, что и исходная. Апостроф - ' предназначен для транспонирования вещественной матрицы или нахождения сопряженной к комплексной матрице. Для возведения квадратной матрицы в степень применяется знак ^.
MatLab обладает многообразием различных функций и способов для работы с матричными данными. Для обращения к элементу двумерного массива следует указать его номер строки и номер столбца в круглых скобках после имени массива.
Индексация двоеточием позволяет получить часть матрицы — строку, столбец или блок, например:
Пример 3.5.3-43
>>c1=A(2:3,2)
c1 =
0.3000
6.2000
>> r1=A(1,1:3)
r1 =
0.7000 -2.5000 9.1000
>>
Для обращения ко всей строке или всему столбцу не обязательно указывать через двоеточие начальный (первый) и конечный индексы, то есть операторы r1=A(1,1:3) и
r1=A(1,:) эквивалентны. Для доступа к элементам строки или столбца от заданного до последнего можно использовать end, так же как и для векторов: A(1,2:end). Выделение

Тема 3.5. Основы работы с математическими пакетами
Страница 318
блока, состоящего из нескольких строк и столбцов, требует индексации двоеточием, как по первому измерению, так и по второму.
Пусть в массиве T хранится матрица:
1
7
3
2
4
9
0
5
6
3
8
7
T
2
4
5
1
0
3
6
4
7
2
61
,




,
,
,


<


,


,
,


Для выделения элементов матрицы T со второй строки по третью и со второго столбца по четвертый, достаточно использовать оператор:
Пример 3.5.3-44
>>c1=A(2:3,2)
c1 =
0.3000
6.2000
>>
Ранее было описано применение поэлементных операций к векторам. Поэлементные вычисления с матрицами производятся практически аналогично, разумеется, необходимо следить за совпадением размеров матриц:
A.*B, A./B
- поэлементные умножение и деление;
A.^p - поэлементное возведение в степень, p - число;
A.^B - возведение элементов матрицы A в степени, равные соответствующим элементам матрицы B;
A.' - транспонирование матрицы (для вещественных матриц A' и A.' приводят к одинаковым результатам).
Иногда требуется не просто транспонировать матрицу, но и "развернуть" ее. Разворот матрицы на 90
o
против часовой стрелки осуществляет функция rot90( ):
Пример 3.5.3-45
>>Q=[1 2;3 4]
Q =
1 2
3 4
>>R=rot90(Q)
R =
2 4
1 3
>>
Допустимо записывать сумму и разность матрицы и числа, при этом сложение или вычитание применяется, соответственно, ко всем элементам матрицы. Вызов математической функции от матрицы приводит к матрице того же размера, на соответствующих позициях которой стоят значения функции от элементов исходной матрицы.
В MatLab определены и матричные функции, например, sqrtm( ) предназначена для вычисления квадратного корня.
Например, найдем квадратный корень из матрицы
3 2
k
1 4


< 



и проверим полученный результат, возведя его в квадрат (по правилу матричного умножения, а не поэлементно):

1   2   3   4   5   6   7   8   9   10   ...   17


написать администратору сайта