17155

Лінійна алгебра в Maple

Лекция

Информатика, кибернетика и программирование

Лекція №26 Тема: Лінійна алгебра в Maple План Пакет linalg. Пакет LinearAlgebra. Елементарні операції з матрицями і векторами. Рішення систем лінійних рівнянь. У Maple виконання перетворень лінійної алгебри можна здійснювати за допомогою команд двох пакетів...

Украинкский

2013-06-29

118 KB

23 чел.

Лекція №26

Тема: Лінійна алгебра в Maple

План

  1.  Пакет linalg.
  2.  Пакет LinearAlgebra.
  3.  Елементарні операції з матрицями і векторами.
  4.  Рішення систем лінійних рівнянь.

У Maple  виконання перетворень лінійної алгебри можна здійснювати за допомогою команд двох пакетів: linalg і LinearAlgebra, функціональність яких практично однакова. Перший пакет входив до складу і всіх попередніх версій Maple, тоді як другий пакет — це новий засіб, що дозволяє працювати з числовими матрицями, у тому числі і з матрицями великих розмірів, використовуючи всю потужність відомого пакету чисельних розрахунків NAG (Numerical Algorithms Group).

Основними об'єктами, з якими працюють команди цих пакетів, є матриці, проте матриці одного пакету не еквівалентні матрицям іншого. У пакеті linalg використовуються матриці, побудовані на основі масиву, створюваного командою array про, тоді як в пакеті LinearAlgebra застосовуються вектори і матриці, побудовані на основі нової структури r-таблииы (r-table) і створювані спеціальними конструкторами vector про і Matrix про або з використанням короткої нотації <а,b,с>. Матриці в пакеті linalg обчислюються тільки до рівня своїх імен, тому в ньому неможливо обчислити операції поелементного підсумовування або віднімання, використовуючи прості операції над ідентифікаторами матриць, і доводиться користуватися спеціальним синтаксисом через команду evalm(). У пакеті LinearAlgebra матриці обчислюються до рівня своїх елементів, тому просте завдання імені матриці у області введення робочого листу приводить до відображення її елементів, а не імені матриці, як у випадку з пакетом linalg. Окрім цього, в пакеті LinearAlgebra матриці можуть задаватися як операнди складання і віднімання, що приводить до поелементного виконання вказаних операцій без використовування додаткових синтаксичних конструкцій.

Щоб ухвалити рішення, якому пакету лінійної алгебри віддати перевагу, рекомендується взяти до уваги наступні обставини:

  •  Пакет linalg корисний при виконанні абстрактних обчислень над матрицями і векторами.
  •  Пакет LinearAlgebra володіє більш дружнім інтерфейсом, працює з числовими матрицями і особливо ефективний при роботі з числовими матрицями великих розмірів через можливість звернення до програм пакету чисельних розрахунків NAG, що відкомпілюються.

Пакет linalg

Пакет лінійної алгебри linalg містить команди створення матриць і векторів, пропонує великий набір функцій для роботи із структурою цих об'єктів, для виконання основних матричних і векторних операцій і для вирішення основних задач лінійної алгебри: рішення систем лінійних рівнянь, знаходження власних векторів і власних векторів матриці, приведення матриць до спеціальних форм і т.д. І всі ці дії можна виконувати з матрицями і векторами, елементи яких можуть бути загальними виразами алгебри, одержуючи результати також у вигляді виразів алгебри.

Всі команди пакету лінійної алгебри працюють з матрицями і векторами. У Maple матрицею вважається двовимірний масив, індекси якого змінюються від одиниці. Аналогічно, вектор — це одновимірний масив з індексом, що змінюється від одиниці. Визначити матрицю або вектор в Maple можна двома способами: або за допомогою команди array() стандартної бібліотеки, або командами matrix ()  і vector()  пакету linalg.

Найзагальніший синтаксис команди array про, яка дозволяє задавати багатовимірні масиви з індексами, що змінюються в діапазонах цілих (як позитивних, так негативних) чисел, наступний:

array(діапазони, список, опції);

Всі параметри необов'язкові і можуть задаватися в довільному порядку. Параметр діапазонами є цілочисельні діапазони зміни індексів масивів, що задаються через кому, — розмірність масиву рівна кількості заданих діапазонів. Значення елементів масиву задаються параметром список у вигляді списку для одновимірних масивів або списку списків для багатовимірних масивів, Як значення параметра функції можна застосовувати symmetric,  antisymmetric,  identity і  diagonal.  Вони  використовуються для завдання масивів спеціального вигляду (симетричних, антисиметричних, одиничних і діагональних). Для завдання векторів і матриць за допомогою цієї функції слід указувати діапазони зміни індексів, що починаються з одиниці:

> vec:=array(1..2,[1,2]);

> matr:=array(1..2,1..2,[[1,2],[10,15]]);

Для завдання тих же вектора і матриці можна використовувати відповідно команди vector() і matrix() з пакету linalg, заздалегідь підключивши його командою with (linalg). Синтаксис цих команд наступний:

vector (n,[элемент1,элемент2,...]);

matrix (n,m,[элемент1,элемент2,...]);

Тут цілі величини n і m задають розмірності вектора і матриці, а значення їх елементів задаються у вигляді простого списку.

> vec:=vector(2,[1,2]);

> matr:=matrix(2,2,[1,2,10,15]);

У Maple 6 команди vector() і matrix() знаходяться в основній бібліотеці, тому ними можна користуватися і без підключення пакету linalg. Проте доступ до всієї решти команд цього пакету вимагає його явного підключення.

Значення елементів вектора або матриці не обов'язково задавати при створенні цих об'єктів. Можна пізніше за допомогою загальноприйнятого індексного посилання на елементи вектора або матриці (у квадратних дужках після імені вектора або масиву задаються індекс(ы) необхідного елементу) привласнити їм нові значення або використати вже привласнені значення в обчисленнях.

> vec[1]:=5;

> eval(vec);

Зверніть увагу, що для відображення вмісту вектора vec використана команда eval(), оскільки змінний, містить складні об'єкти, якими є і вектори, і матриці, обчислюється не повністю, а тільки до свого імені.

Пакет linalg містить більше ста корисних команд виконання матричних операцій, а також структурних перетворень матриць. Перелік всіх доступних команд можна знайти на сторінці довідки, що відображається командою ?linalg.

Пакет LinearAlgebra

Всі команди пакету LinearAlgebra можна викликати безпосередньо по імені, заздалегідь підключивши всі його команди функцією

> with(LinearAlgebra);

або окрему команду з використанням синтаксису

> with(LinearAlgebra, имя_команды);

Можна викликати команду, заздалегідь не підключаючи її, а використовуючи довге ім'я

LinearAlgebra [ім'я__команды] (параметри);

LinearAlgebra['ім'я__команды'](параметри);

Остання форма (ім'я команди, укладене в одинарні лапки), викликає відповідну команду пакету, навіть якщо в поточному сеансі використовується який-небудь об'єкт з таким же ім'ям.

Пакет LinearAlgebra реалізований у вигляді модуля, нової мовної конструкції Maple, що реалізовує елементи об'єктно-орієнтованого програмування. Кожна команда є методом об'єкту LinearAlgebra, а тому її можна викликати, використовуючи спеціальну операцію : - звернення до методу об'єкту:

> LinearAlgebra:-имя команди(параметри);

Команда, що в цьому випадку викликається, також буде завантажена, не конфліктуючи з об'єктом іншого типу, створеним в поточному сеансі.

Основні типи даних

Основні типи даних, з якими працюють команди пакету LinearAlgebra, є скаляри, що представляють як числа, так і вирази алгебри, а також матриці і вектори, визначувані на базі нового типу даних r-таблиці. Матриці і вектори створюються за допомогою відповідних конструкторів.

Конструктором матриць є команда Matrix про (обов'язково із заголовної букви), синтаксис якої має наступний вигляд:

Matrix(r,   з,   init,   ro,   sc,   sh,   st,   про,   dt,   f,   а);

Семантика параметрів і їх допустимі значення представлені в табл. 3.2.

Таблиця . Параметри конструктора матриць

Параметр

    Опис

r

Ненегативне ціле або діапазон цілих чисел, що починається з 1.Представляет кількість рядків в матриці

c

Ненегативне ціле або діапазон цілих чисел, що починається з 1. Представляє кількість стовпців в матриці

ro

Задається у вигляді readonly або readonly=true і визначає, що значення елементів матриці, визначені при її створенні, не можуть бути змінені надалі.І т.д.

Всі параметри є необов'язковими, і у разі їх відсутності створиться матриця розмірності 0х0. Власне кажучи, для створення матриці важливі перші три параметри. Інші використовуються різними командами для прискорення її обробки.

Приклад  Створення матриць

> Matrix(2);

> Matrix(2,3);

> Matrix(1..1,1..4,6);

> Matrix([[1,2,3],[4,5,6]]);

> Matrix(2,(i,j) ->x^(i+j));

Створити вектор можна конструктором Vector() з наступним синтаксисом:

Vector(d, init, ro, sh, st, dt, f, а, про);

Vector [column](d, init, ro, sh, st, dt, f, а, про);

Vector [row](d, init, ro, sh, st, dt, f, а, про);

У пакеті LinearAlgebra розрізняються вектори-стовпці, що задаються за допомогою перших двох форм конструктора, і вектори-рядки, для завдання яких служить третя форма конструктора. Їх можна визначати тільки за допомогою першої форми, задаючи відповідне значення останнього параметра про: column або row. Перший параметр d задає розмірність вектора і може приймати тільки цілі позитивні значення, великі або рівні 1. Решта параметрів відповідає аналогічним в конструкторі матриць.

Приклад  Створення векторів

> Vector(2);

> Vector(1..3,5,orientation=row);

> Vector(2,(i) ->x^i);

При інтерактивній роботі в Maple іноді не зовсім зручно створювати матриці і вектори, звертаючись до їх конструктора. Розробники пакету LinearAlgebra надали користувачу можливість використовування короткої форми завдання векторів і матриць:

<а,b,c> створює матрицю або вектор по рядках;

<a|b]c> створює матрицю або вектор по стовпцях.

Якщо величини, що задаються в кутових дужках, не є скалярами, то створюється матриця, інакше вектор.

Приклад  Коротка форма завдання векторів і матриць

> V1:=<1,2,3>;

> V2:=<1|2|3>;

> M1:=<<1|2>,<3|4>>;

> M2:=<<1,3>|<2,4>>;

> <M2|M1>;

Для створення спеціальних типів матриць і векторів — одиничних, нульових, матриць і векторів констант і скалярних — можна використовувати спеціальні конструктори, хоча об'єкти вказаних типів можна створити і за допомогою загальних конструкторів. Приклад  демонструє всі типи спеціальних конструкторів.

Приклад  Спеціальні типи векторів і матриць

> with(LinearAlgebra):IdentityMatrix(2,2);

> ZeroMatrix(2,3);

> ConstantMatrix(6,2);

> ScalarMatrix(a^2,2);

> UnitVector[row](2,3);

> ZeroVector[row](3);

> ConstantVector[row](5,3);

> ScalarVector[row](x^2+y^2,3,4);

При завданні матриць і векторів великих розмірів вони не відображаються на робочому листі. Замість їх вмісту відображається підказка, що тут розташований відповідний об'єкт і указується його структура і розмірність:

> Matrix(15,15,(i,j) ->i*j);

Елементарні операції з матрицями і векторами

Як вже наголошувалося раніше, основні операції з матрицями в пакеті LinearAlgebra виконуються простіше, ніж такі ж в пакеті linalg. Це пов'язано з тим, що ідентифікатори векторів і матриць тут обчислюються не до рівня імені, а безпосередньо до рівня обчислення їх компонентів. У зв'язку з цим можливе виконання поелементного складання, віднімання і складання лінійних комбінацій векторів і матриць однакової розмірності з використанням звичних арифметичних операцій.

Приклад  Елементарні операції з векторами і матрицями

> M1:=<<1|2>,<3|4>>;

> M2:=<<10|7>,<8|15>>;

> M1+M2;

> M1-M2;

> 3.1*M1+5*M2;

> V1:=<1|4>;

> V2:=<3|8>;

> 3*V1-6*V2;

> V3:=<3,8>;

> V1+V3;

Error, (in rtable/Sum) invalid arguments

Якщо складається скаляр з матрицею, то це рівносильно складанню матриці з одиничною матрицею, елементи якої помножені на заданий скаляр, вектор не можна складати з скаляром:

Побудову лінійної комбінації матриць і векторів можна також виконати, використовуючи, відповідно, команди MatrixAdd () і VectorAdd ().

Оскільки твір матриць (мається на увазі операція скалярного множення) не є комутативною, те використовування операції комутативного множення (*) для векторів і матриць приводить до помилки. (Виключення допускається тільки для множення матриці саму на себе, причому в цьому випадку виконується операція скалярного множення.) Комутативне множення можна використовувати для перемножування скаляра і матриці або вектора.

Проте якщо скаляр містить невизначену змінну, то перемножування не відбувається, оскільки Maple не знає, який об'єкт надалі ця змінна може містити. Для виконання такого множення слід використовувати команду simplify() з параметром symbolic або опцією assume=scalar:

> mull:=x^2*<1|2|3>;

> simplify(mull,symbolic);

Виконати некомутативне множення в Maple 6 можна операцією, символом якої є крапка (.). Вона ніколи не міняє співмножники місцями, тому твори x.y.z і x.z.y не є тотожними.

Приклад  Скалярні твори векторів і матриць

> <1,3>.<4|6>;

> <4|6>.<1,3>;

Для отримання ступеня квадратної матриці можна послідовно застосувати операцію скалярного множення необхідне число раз або операцію зведення в ступінь(^)

> M:=<<0.2|0.8>,<0.7|0.5>>;

> M.M.M.M.M;

> M^5;

Показник ступеня може бути і негативним цілим числом, що дозволяє обчислювати зворотну матрицю і її ступені:

> M^(-1);

Для виділення елементів матриці і її підматриць використовується індексний запис, причому як індекс можна застосовувати діапазон, що дозволяє виділяти цілі блоки початкової матриці:

> restart:M:=Matrix(5,(i,j) ->3*i-j);

> M[3,1..-1];#выбор третього рядка

> M[3,2]; #Выбор елементу матриці

> M[1..-1,2];#Выбор другого стовпця

> M[2..3,2..4];#Выбор блоку розмірності 2х3

Всі перераховані операції можна виконувати за допомогою команд пакету LinearAlgebra, які рекомендується використовувати при програмуванні в Maple, хоча і допустиме їх використовування при інтерактивній роботі. Неповний список команд допустимих операцій над матрицями і векторами приведений в табл. .

Таблиця . Команди виконання операцій над матрицями і векторами

Назва команди

Опис

DeleteRow

Видалення рядка матриці

DeleteColumn

Видалення стовпця матриці

Row

Виділення рядка матриці

Column

Виділення стовпця матриці

SubMatrix

Виділення підматриці із заданої матриці

SubVector

Виділення підвектора із заданого вектора

ScalarMultiply

Множення матриці/вектора на скаляр

MatrixVectorMultiply

Скалярний твір матриці на вектор-стовпець

VectorMatrixMultiply

Скалярний твір вектора-рядка на матрицю

MatrixMatrixrMuitiply

Скалярний твір матриці на матрицю

MatrixInverse

Обчислення зворотної матриці

Determinant

Обчислення визначника матриці

Minor

Виділення мінору матриці

ConditionNumber

Обчислення числа обумовленості матриці

Eigenvalues

Обчислення власних значень матриці

Eigenvectors

Обчислення власних векторів

Одержати повну інформацію про всіх перерахованих в табл. командах можна на сторінках довідки по кожній з команд, які відображаються після виконання команди ?имя команди.

Рішення систем лінійних рівнянь

У пакет LinearAlgebra, як і в пакет linalg, входить спеціальна команда LinearSolve() рішення систем лінійних рівнянь алгебри. На відміну від свого двійника linsolve() з пакету linalg в цій команді можна вказати спосіб, яким слід вирішувати систему, але аналогічно своєму двійнику вона вимагає завдання системи рівнянь в матричній формі, тобто як параметри їй передаються матриця а системи і вектор правих частин b. Сама система в матричній формі записується у вигляді а.x=b.

Загальний синтаксис команди LinearSolve() наступний:

LinearSoive(А,   В,   m,   t,   з,   ip,   outopts);

Тут параметр а представляє матрицю системи, а параметр B — її ліву частину, причому в може задаватися як у вигляді вектора, так і у вигляді матриці. У останньому випадку за одне звернення до команди рішення системи лінійних рівнянь розв'язуватиметься безліч систем з правими частинами, представленими векторами — стовпцями матриці в. Параметр в можна і не задавати, передаючи як перший параметр розширену матрицю системи <А|B>. Розмірності матриці рішення узгоджуються з размерностямі матриць правої і лівої частин рівняння. Якщо матриця системи а має розмірність mxn, і права частина представлена матрицею mxp, то результатом буде матриця розмірності nхр, стовпці якої будуть рішеннями відповідних систем.

Необов'язковий параметр m задається у формі рівняння method=имя, де ім'я вибирається з наступного списку: 'none', 'solve', 'subs', 'Cholesky', 'LU’, 'QR', 'sparseLU' і визначає метод рішення системи рівнянь.

Параметр t, який також необов'язковий, визначає базове ім'я змінної у формі free = ім'я, яке використовується для конструювання імен параметрів у випадку, якщо початкова система лінійних рівнянь має безліч рішень.

Необов'язковим параметром з у формі рівняння conjugate=true/false визначається, чи слід будувати ермітову зв'язану матрицю при використовуванні методу Холецкого або QR-декомпозиции.

Література:

       Матросов А.В. Maple 6. Решение задач высшей математики и механики, Москва, 2000 – 528 с. [4], 160-187

Контрольні запитання:

  1.  Використання пакету linalg.
  2.  Використання пакету LinearAlgebra.


 

А также другие работы, которые могут Вас заинтересовать

12768. Поисковые системы. Пример поиска информации или информационного объекта в тексте, в файловых структурах, на государственных образовательных порталах 313.2 KB
  Практическая работа № 6 Тема: Поисковые системы. Пример поиска информации или информационного объекта в тексте в файловых структурах на государственных образовательных порталах Цель: поиск нужной информации в тексте в файловых структурах; освоение прием...
12769. Создание архива данных. Извлечение данных из архива. Запись информации на компакт-диски различных видов 14.26 KB
  ПРАКТИЧЕСКАЯ РАБОТА № 5 Тема: Создание архива данных. Извлечение данных из архива. Запись информации на компактдиски различных видов. Цель: освоить работу с программой – архиватором WinRar и программой для работы с дисками Nero. Задание: Открыть программу WinRar оз
12770. Использование систем проверки орфографии и грамотки 2.13 MB
  Практическая работа № 13 Использование систем проверки орфографии и грамотки. Графические редакторы подразделяются на системы научной иллюстративной и коммерческой графики. Системы научной графики предназначены для афформления научных расчетов содержащих ф...
12771. Форматирование в текстовом редакторе Word 16.27 KB
  Практическая работа N14.Форматирование в текстовом редакторе Word. Шрифт Настройка формата выделенных символов осуществляется в диалоге и включает такие характеристики: шрифтArial Times Courier; начертаниеОбычный Курсив Полужир
12772. Системы статистического учета (статистическая обработка социальных исследований) 596.83 KB
  Информатика и ИКТ Практическая работа № 17 Системы статистического учета статистическая обработка социальных исследований. Цель: Изучение технологии организации расчетов с использованием встроенных функций в таблицах MS Excel. Оборудование: ПК Программное об
12773. Практикум по программированию на JavaScript 728.5 KB
  Практикум по программированию на JavaScript Введение Цель этих 30 уроков состоит в том чтобы научить читателя самостоятельно создавать сценарии JavaScript. Если вы пытались ознакомиться с JavaScript с помощью книг или Интернет то почти наверняка это оказалось не просто. Изучение J...
12774. КРИТЕРИИ ОЦЕНКИ САЙТА 36.58 KB
  КРИТЕРИИ ОЦЕНКИ САЙТА Назначение этого типа оценки сайта определить основные характеристики Webсайта чтобы выявить очевидные проблемы связанные с удобством использования и исполнением. Для обнаружения недостатков в исполнении сайта которые не могут быть замечены ...
12775. Основные принципы дизайна Web-caйтa 57.86 KB
  Основные принципы дизайна Webcaйтa Введение в Webдизайн Некоторые необходимые для эффективного Webдизайна концепции. Девиз WYSIWYW What Уоu See Is What Уоu Want То что вы видите это то что вы хотите представлен в качестве возможной модификации принципа традиционного дизайна GUI ...
12776. Введение в HTML 711 KB
  Введение в HTML История развития HTML В 1989 году Тим БернерсЛи предложил проект распределенной гипертекстовой системы которую он назвал World Wide Web WWW Всемирная паутина. Первоначально идея системы состояла в том чтобы при помощи гипертекстовой навигационной системы объед...