Добавить материал и получить бесплатное свидетельство о публикации
Главная / Информатика / Реферат на тему: "Задачи матричной алгебры в пакетах символьной математики"

Реферат на тему: "Задачи матричной алгебры в пакетах символьной математики"

Курсы профессиональной переподготовки от Московского учебного центра "Профессионал"

Специально для учителей, воспитателей и других работников системы образования только до 31 августа действуют скидки до 50% при обучении на курсах профессиональной переподготовки (184 курса на выбор).

После окончания обучения выдаётся диплом о профессиональной переподготовке установленного образца с присвоением квалификации (признаётся при прохождении аттестации по всей России).

Подайте заявку на интересующий Вас курс сейчас: ВЫБРАТЬ КУРС


ФГБОУ ВО «Мордовский государственный педагогический институт

имени М. Е. Евсевьева»

Факультет физико-математический

Кафедра информатики и ВТ









РЕФЕРАТ

по дисциплине: «Программирование в системах компьютерной математики»

на тему: «Задачи матричной алгебры в пакетах символьной математики»







Выполнила:

Студентка 5 курса, группа МДМ-112

Иванкова Е. И.


Проверила:

Кормилицына Т.В.







Саранск 2017



Содержание










  1. Пакеты символьной математики


    1. MATLAB


MATLAB как язык программирования был разработан Кливом Моулером (англ. Cleve Moler) в конце 1970-х годов, когда он был деканом факультета компьютерных наук в Университете Нью-Мексико. Целью разработки служила задача дать студентам факультета возможность использования программных библиотек Linpack и EISPACKбез необходимости изучения Фортрана. Вскоре новый язык распространился среди других университетов и был с большим интересом встречен учёными, работающими в области прикладной математики. Первоначально MATLAB предназначался для проектирования систем управления (основная специальность Джона Литтла), но быстро завоевал популярность во многих других научных и инженерных областях. Он также широко использовался и в образовании, в частности, для преподавания линейной алгебры и численных методов.

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

Основной особенностью языка MATLAB является его широкие возможности по работе с матрицами, которые создатели языка выразили в лозунге «думай векторно» (англ. Think vectorized).

Библиотека MATLAB позволяет пользоваться следующими категориями функций:

  • операции с матрицами;

  • сравнение матриц:

  • решение линейных уравнений;

  • разложение операторов и поиск собственных значений;

  • нахождение обратной матрицы;

  • поиск определителя;

  • вычисление матричного экспоненциала;

  • элементарная математика и т.д.


      1. Матрицы и векторы в MATLAB


Ниже показан пример задания вектора с именем a, и содержащий значения 1, 2, 3, 4:

a = [1 2 3 4];      % вектор-строка

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

disp( a(1) );  % отображение значения 1-го элемента вектора

disp( a(2) );  % отображение значения 2-го элемента вектора

disp( a(3) );  % отображение значения 3-го элемента вектора

disp( a(4) );  % отображение значения 4-го элемента вектора

т.е. нужно указать имя вектора и в круглых скобках написать номер индекса элемента, с которым предполагается работать. Например, для изменения значения 2-го элемента массива на 10 достаточно записать

a(2) = 10; % изменение значения 2-го элемента на 10

Часто возникает необходимость определения общего числа элементов в векторе, т.е. определения его размера. Это можно сделать, воспользовавшись функцией length() следующим образом:

N = length(a); % (N=4) число элементов массива а

Если требуется задать вектор-столбец, то это можно сделать так

a = [1; 2; 3; 4];   % вектор-столбец

или так

b = [1 2 3 4]’;         % вектор-столбец

при этом доступ к элементам векторов осуществляется также как и для векторов-строк.

Следует отметить, что векторы можно составлять не только из отдельных чисел или переменных, но и из векторов. Например, следующий фрагмент программы показывает, как можно создавать один вектор на основе другого:

a = [1 2 3 4];      % начальный вектор a = [1 2 3 4]

b = [a 5 6];        % второй вектор b = [1 2 3 4 5 6]

Здесь вектор b состоит из шести элементов и создан на основе вектора а. Используя этот прием, можно осуществлять увеличение размера векторов в процессе работы программы:

a = [a 5];          % увеличение вектора а на один элемент

Недостатком описанного способа задания (инициализации) векторов является сложность определения векторов больших размеров, состоящих, например, из 100 или 1000 элементов. Чтобы решить данную задачу, в MatLab существуют функции инициализации векторов нулями, единицами или случайными значениями:

a1 = zeros(1, 100);     % вектор-строка, 100 элементов с нулевыми значениями

a2 = zeros(100, 1);     % вектор-столбец, 100 элементов с нулевыми значениями

a3 = ones(1, 1000);     % вектор-строка, 1000 элементов с единичными значениями

a4 = ones(1000, 1);     % вектор-столбец, 1000 элементов с единичными значениями

a5 = rand(1000, 1);     % вектор-столбец, 1000 элементов со случайными значениями

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

E = [1 0 0; 0 1 0; 0 01];         % единичная матрица 3х3

или

E = [1 0 0

  0 1 0

    0 0 1];                 % единичная матрица 3х3

Аналогичным образом можно задавать любые другие матрицы, а также использовать приведенные выше функции zeros(), ones() и rand(), например:

A1 = zeros(10,10);      % нулевая матрица 10х10 элементов

или

A2 = zeros(10);              % нулевая матрица 10х10 элементов

A3 = ones(5);           % матрица 5х5, состоящая из единиц

A4 = rand(100);              % матрица 100х100, из случайных чисел

Для доступа к элементам матрицы применяется такой же синтаксис как и для векторов, но с указанием строки и столбца где находится требуемый элемент:

A = [1 2 3;4 5 6;7 8 9]; % матрица 3х3

disp( A(2,1) );         % вывод на экран элемента, стоящего во второй строке первого столбца, т.е. 4

disp( A(1,2) );         % вывод на экран элемента, стоящего в первой строке второго столбца, т.е. 2

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

B1 = A(:,1);   % B1 = [1; 4; 7] – выделение первого столбца

B2 = A(2,:);   % B2 = [1 2 3] – выделение первой строки

B3 = A(1:2,2:3);    % B3 = [2 3; 5 6] – выделение первых двух строк и 2-го и 3-го столбцов матрицы А.

Размерность любой матрицы или вектора в MatLab можно определить с помощью функции size(), которая возвращает число строк и столбцов переменной, указанной в качестве аргумента:

a = 5;              % переменная а

A = [1 2 3];        % вектор-строка

B = [1 2 3; 4 5 6]; %матрица 2х3

size(a)             % 1х1

size(A)             % 1х3

size(B)             % 2х3


В системе MatLab достаточно просто выполняются математические операции над матрицами и векторами. Рассмотрим сначала простые операции сложения и умножения матриц и векторов. Пусть даны два вектора

a = [1 2 3 4 5];        % вектор-строка

b = [1; 1; 1; 1; 1];         % вектор-столбец

тогда умножение этих двух векторов можно записать так

c = a*b;                % c=1+2+3+4+5=16

d = b*a;                % d – матрица 5х5 элементов

В соответствии с операциями над векторами, умножение вектор-строки на вектор-столбец дает число, а умножение вектор-столбца на вектор-строку дает двумерную матрицу, что и является результатом вычислений в приведенном примере, т.е.

http://www.sernam.ru/archive/arch.php?path=../htm/lect_matlab/files.book&file=matlab_7.files/image001.gif

http://www.sernam.ru/archive/arch.php?path=../htm/lect_matlab/files.book&file=matlab_7.files/image002.gif

Сложение и вычитание двух векторов записывается так

a1 = [1 2 3 4 5];

a2 = [5 4 3 2 1];

c = a1+a2;               % c = [1+5, 2+4, 3+3, 4+2, 5+1];

с = a2-a1;              % c = [5-1, 4-2, 3-3, 2-4, 1-5];

Следует обратить внимание, что операции сложения и вычитания можно выполнять между двумя векторами-столбцами или двумя векторами-строками. Иначе MatLab выдаст сообщение об ошибке, т.к. разнотипные векторы складывать нельзя. Так обстоит дело со всеми недопустимыми арифметическими операциями: в случае невозможности их вычисления система MatLab сообщит об ошибке и выполнение программы будет завершено на соответствующей строке.

Аналогичным образом выполняются операции умножения и сложения между матрицами:

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

B = ones(3);

C = A+B;            % сложение двух матриц одинакового размера

D = A+5;            % сложение матрицы и числа

E = A*B;            % умножение матрицы А на В

F = B*A;            % умножение матрицы В на А

G = 5*A;            % умножение матрицы на число

Операции вычисления обратной матрицы, а также транспонирования матриц и векторов, записываются следующим образом:

a = [1 1 1];        % вектор-строка

b = a’;             % вектор-столбец, образованный транспонированием вектора-строки а.

A = [1 2 3; 4 5 6; 7 8 9]; % матрица 3х3 элемента

B = a*A;            % B = [12 15 18] – вектор-строка

C = A*b;            % C = [6; 15; 24] – вектор-столбец

D = a*A*a’;         % D = 45 – число, сумма эл-ов матрицы А

E = A’;             % E – транспонированная матрица А

F = inv(A);         % F – обратная матрица А

G = A^-1;           % G – обратная матрица А

Из приведенного примера видно, что операция транспонирования матриц и векторов обозначается символом ‘ (апостроф), который ставится после имени вектора или матрицы. Вычисление обратной матрицы можно делать путем вызова функции inv() или возводя матрицу в степень -1. Результат в обоих случаях будет одинаковым, а два способа вычисления сделано для удобства использования при реализации различных алгоритмов.

Если в процессе вычислений требуется поэлементно умножить, разделить или возвести в степень элементы вектора или матрицы, то для этого используются операторы:

.* - поэлементное умножение;

./ и .\ - поэлементные деления;

.^ - поэлементное возведение в степень.

Рассмотрим работу данных операторов на следующем примере.

a = [1 2 3];        % вектор-строка

b = [3 2 1];        % вектор-строка

c = a.*b;           % c = [3 4 3]

A = ones(3);        % матрица 3х3, состоящая из единиц

B = [1 2 3;4 5 6; 7 8 9];         % матрица 3х3

C = A.*B;           % матрица 3х3, состоящая из http://www.sernam.ru/archive/arch.php?path=../htm/lect_matlab/files.book&file=matlab_7.files/image003.gif

D = A./B;           % матрица 3х3, состоящая из http://www.sernam.ru/archive/arch.php?path=../htm/lect_matlab/files.book&file=matlab_7.files/image004.gif

E = A.\B;           % матрица 3х3, состоящая из http://www.sernam.ru/archive/arch.php?path=../htm/lect_matlab/files.book&file=matlab_7.files/image005.gif

F = A.^2;           % возведение элементов матрицы А в квадрат


      1. Матричные функции в MATHLAB


Для поиска максимального значения элемента вектора используется стандартная функция max(), которая возвращает найденное максимальное значение элемента и его позицию (индекс):

a = [1 6 3 4];

[v, i] = max(a);             % v = 6, i = 2;

или

v = max(a);                  % v = 6;

Приведенный пример показывает два разных способа вызова функции max(). В первом случае определяется и максимальное значение элемента и его индекс в векторе, а во втором – только максимальное значение элемента.

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

A = [4 3 5; 6 7 2; 3 1 8];

[V, I] = max(A);             % V=[6 7 8], I = [2 2 3]

V = max(A);                  % V=[6 7 8]

Полный синтаксис функции max() можно узнать, набрав в командном окне MatLab команду

help <название функции>

Аналогичным образом работает функция min(), которая определяет минимальное значение элемента вектора или матрицы и его индекс.

Другой полезной функцией работы с матрицами и векторами является функция sum(), которая вычисляет сумму значений элементов вектора или столбцов матрицы:

a = [3 5 4 2 1];

s = sum(a);                   % s = 3+5+4+2+1=15

A = [4 3 5; 6 7 2; 3 1 8];

S1 = sum(A);                  % S1=[13 11 15]

S2 = sum(sum(A));            % S2=39

При вычислении суммы S2 сначала вычисляется сумма значений элементов матрицы А по столбцам, а затем, по строкам. В результате, переменная S2 содержит сумму значений всех элементов матрицы А.

Для сортировки значений элементов вектора или матрицы по возрастанию или убыванию используется функция sort() следующим образом:

a = [3 5 4 2 1];

b1 = sort(a);                % b1=[1 2 3 4 5]

b2 = sort(a, ‘descend’);      % b2=[5 4 3 2 1]

b3 = sort(a, ‘ascend’);      % b3=[1 2 3 4 5]

для матриц

A = [4 3 5; 6 7 2; 3 1 8];

B1 = sort(A);                % B1=[3 1 2

                             %     4 3 5

                              %     6 7 8]

B2 = sort(A, ‘descend’);     % B2=[6 7 8

                              %     4 3 5

                              %     3 1 2]

Во многих практических задачах часто требуется найти определенный элемент в векторе или матрице. Это можно выполнить с помощью стандартной функции find(), которая в качестве аргумента принимает условие, в соответствии с которым и находятся требуемые элементы, например:

a = [3 5 4 2 1];

b1 = find(a == 2);           % b1 = 4 – индекс элемента 2

b2 = find(a ~= 2);           % b2 = [1 2 3 5] – индексы без 2

b3 = find(a > 3);            % b3 = [2 3]

В приведенном примере символ ‘==’ означает проверку на равенство, а символ ‘~=’ выполняет проверку на неравенство значений элементов вектора а. Более подробно об этих операторах будет описано в разделе условные операторы.

Еще одной полезной функцией работы с векторами и матрицами является функция mean() для вычисления среднего арифметического значения, которая работает следующим образом:

a = [3 5 4 2 1];

m = mean(a);                 % m = 3

A = [4 3 5; 6 7 2; 3 1 8];

M1 = mean(A);                % M1 = [4.333 3.667 5.000]

M2 = mean(mean(A));          % M2 = 4.333

    1. MATHCAD


Mathcad относится к системам компьютерной алгебры, то есть средств автоматизации математических расчетов. В этом классе программного обеспечения существует много аналогов различной направленности и принципа построения. Наиболее часто Mathcad сравнивают с такими программными комплексами, как Maple, Mathematica,MATLAB, а также с их аналогами MuPAD, Scilab, Maxima и др. Впрочем, объективное сравнение осложняется в связи с разным назначением программ и идеологией их использования.

Основное отличие Mathcad от аналогичных программ это графический, а не текстовый режим ввода выражений. Для набора команд, функций, формул можно использовать как клавиатуру, так и кнопки на многочисленных специальных панелях инструментов. В любом случае формулы будут иметь привычный, аналогичный книжному, вид. То есть особой подготовки для набора формул не нужно. Вычисления с введенными формулами осуществляются по желанию пользователя или мгновенно, одновременно с набором, либо по команде. Обычные формулы вычисляются слева направо и сверху вниз (подобно чтению текста). Любые переменные, формулы, параметры можно изменять, наблюдая воочию соответствующие изменения результата. Это дает возможность организации действительности интерактивных вычислительных документов.

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




      1. Матрицы и векторы в MATHCAD


Операции, выполняемые над векторами и матрицами в Mathcad, можно разбить на две большие группы. К первой группе относятся операции, которые применяются к отдельным векторам и матрицами. Например, транспонирование матрицы или вычисление обратной матрицы в Mathcad. Ко второй группе относятся операции, которые выполняются над группой векторов и матриц. Как правило, они выполняются над двумя матрицами или матрицей и вектором. Например, сложение, вычитание матриц, перемножение матриц или умножение матрицы и вектора. К векторам и матрицам в Mathcad, при выполнении операций над ними, могут предъявляться определенные требования в соответствии с требованиями классической математики. Например, при перемножении матрицы и вектора, количество столбцов матрицы должно быть равно количеству срок вектора. Поэтому при работе с векторами и матрицами пользователь должен иметь необходимую математическую подготовку. В таблице приведены основные операции, выполняемые над векторами и матрицами, используемые в Mathcad. В таблице приняты следующие обозначение: А – массив, под которым понимается вектор или матрица, М – матрица, z - скаляр, v – вектор.

Таблица 1. Основные операции над векторами и матрицами

Основные операции с матрицами и векторами

Наиболее удобно выполнять матричные вычисления с использованием кнопок панели инструментов “Матрица”. По умолчанию индексация строк и столбцов элементов матрицы начинается с 0. Для того чтобы индексация начиналась с 1, необходимо системной переменной ORIGIN присвоить значение 1. На рис. 1 приведен пример матричных вычислений в Mathсad.

Матрицы и векторы в Mathcad

Рис. 1 Матричные вычисления в MATHCAD


      1. Матричные функции в MATHCAD


Mathсad имеет более 50 функций, предназначенных для работы с векторами и матрицами. Все функции можно разбить на группы по их функциональному назначению. Например, функции, предназначенные для создания матриц общего и специального вида, редактирования и преобразования матриц, функции, определяющие параметры матриц и т. д. Рассмотрим часть этих функций, которые имеют наибольшее прикладное значение.

Среди функций, предназначенных для создания матриц, следует выделить функцию matrix(L,N,f), где L – число строк матрицы, N – число столбцов матрицы, f – функция f(l,n) при . Другая функция из этой группы identity(n). Функция предназначена для создания единичной матрицы размерности n. Следующая функция geninv(M) позволяет осуществить обращение матрицы M, аналогично операции M-1.

Для определения размерности матрицы в Mathcad предназначены функция rows(M), определяющая число строк матрицы M, и функция cols(M), определяющая число колонок матрицы M.

Сортировку элементов матрицы осуществляют две функции csort(M,i), rsort(M,j). Функция csort(M,i) обеспечивает сортировку по возрастанию элементов i – го столбца путем перестановки строк, а функция rsort(M,j) – сортировку по возрастанию элементов j –ой строки путем перестановки столбцов.

Для определения минимального и максимального элемента матрицы используются функции min(M) и max(M).

Выделить произвольную подматрицу из матрицы М в Mathcad можно посредством функции submatrix (M, r1, r2, c1, c2), где М – исходная матрица, r1 и r2 –нижний и верхний номер строки матрицы М, включаемых в результирующую подматрицу, а с1 и с2 – нижней и верхний номер столбца матрицы М, включаемых в результирующую подматрицу. Слияние матриц можно осуществить, используя функции augment(A,B,…) и stack(A,B,…). Функция augment(A,B,…) предназначена для слияния матриц А, В и т.д. слева направо. Причем количество строк в матрицах должно быть одинаково. Вторая функция stack(A,B,…) выполняет слияние матриц сверху вниз. Количество столбцов в матрицах должно быть также одинаково. Данные функции могут быть применены и к векторам. На листинге приведен пример использования рассмотренных матричных функций.

hello_html_m2de7ed7d.png

Рис. 2 Применение матричных функций в MATHCAD




  1. Задачи матричной алгебры в пакетах символьной математики


    1. Задачи матричной алгебры в MATLAB


В MatLab используется символ \ для решения систем линейных уравнений. Решим систему из трех уравнений с тремя неизвестными:

Система уравнений

Введем матрицу коэффициентов системы в массив A, а вектор правой части системы в массив b. Решим систему при помощи символа \

» x = A\b

x =

1.0000

1.0000

1.0000

Проверьте правильность ответа, умножив матрицу коэффициентов системы A на вектор-столбец x.


    1. Задачи матричной алгебры в MATHCAD


Решение системы линейных алгебраических уравнений матричным методом

Рассмотрим системы линейных алгебраических уравнений в Mathcad в векторно-матричной форме A*x =b, где А – квадратная матрица коэффициентов при неизвестных, причем определитель матрицы должен быть отличным от нуля; х- вектор неизвестных; b - вектор свободных членов. Решение данной сводится к следующему. Если определитель матрицы А отличен от нуля, то матрица А обратима. Тогда, умножив левую и правую часть и сходного уравнения на обратную матрицу (А-1), получаем решение в виде x=A-1*b. Реализовать полученное решение средствами Mathcad не представляет сложностей. Для случая бесконечного множества решений получаем сингулярную матрицу, Mathcad выдает сообщение “Matrix is singular. Cannot compute its inversу – Матрица сингулярная. Нельзя вычислить эту инверсию” и прерывает вычисления. На листинге  представлен пример решения систем линейных алгебраических уравнений.

Algebraic Equations

Рис. 3 Решение системы линейных алгебраических уравнений матричным методом


Решение системы линейных алгебраических уравнений методом Крамера

В Mathcad метод Крамера также предназначен для решения системы n линейных уравнений с n неизвестными вида A*x =b на основе предварительного вычисления определителей системы, при условии, что определитель Решение системы линейных алгебраических уравнений методом Крамера в Mathcadматрицы А отличен от нуля. Метод основан на формулах Крамера, вида   Решение системы линейных алгебраических уравнений методом Крамера в Mathcad , где Решение системы линейных алгебраических уравнений методом Крамера в Mathcad– определитель матрицы, полученной из матрицы А системы заменой i –го столбца, т.е. столбца коэффициентов при неизвестном Xi вектором свободных членов, т.е. b. На листинге в Mathcad приведен пример решения системы линейных алгебраических уравнений методом Крамера

Решение системы линейных алгебраических уравнений методом Крамера

Рис. 4 Решение системы линейных алгебраических уравнений методом Крамера




Список использованных источников


  1. Наместников, С. М. Основы программирования в MatLab : сборник лекций / С. М. Наместников. – Ульяновск: УлГТУ, 2011. – 55 с.

  2. Язык программирования MatLab. Обучающие уроки [Электронный ресурс]. – Режим доступа: http://life-prog.ru/view_cat.php?cat=5&page=1

  3. Матричные вычисления в MathCAD [Электронный ресурс]. – Режим доступа: http://allmathcad.com/ru/matrichnye-vychisleniya.html

  4. Учебник по MathCAD [Электронный ресурс]. – Режим доступа: http://itmu.vsuet.ru/Posobija/MathCAD/index.htm

  • Информатика
Описание:

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

Mathcad относится к системам компьютерной алгебры, то есть средств автоматизации математических расчетов. В этом классе программного обеспечения существует много аналогов различной направленности и принципа построения. Наиболее часто Mathcad сравнивают с такими программными комплексами, как Maple, Mathematica,MATLAB, а также с их аналогами MuPAD, Scilab, Maxima и др. Впрочем, объективное сравнение осложняется в связи с разным назначением программ и идеологией их использования.



Автор Иванкова Елена Игоревна
Дата добавления 12.03.2017
Раздел Информатика
Подраздел Другое
Просмотров 493
Номер материала MA-070650
Скачать свидетельство о публикации

Оставьте свой комментарий:

Введите символы, которые изображены на картинке:

Получить новый код
* Обязательные для заполнения.


Комментарии: