ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.05.2024

Просмотров: 14

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторна робота №6

Тема: Робота з масивами. Знаходження коренів СЛАР.

Мета роботи. Вивчення способів представлення масивів MATLABв . Основні операції над векторами. Знаходження коренів систем лінійних алгебраїчних рівнянь (СЛАР) прямими методами.

1 Робота з масивами

1.1Способи представлення масивів в MATLAB

УMATLAB всі дані представляються у вигляді масивів. Масиви бувають одновимірними, коли використовується один індекс(номер), а можуть бути і багатовимірними (зокрема — двовимірними).

Таким чином, вектор представляється як одновимірний масив, а матриця – як двовимірний. Вектор може представлятися як вектор-стовпець або вектор-рядок, якщо це важливо для обчислень.

Значення елементів вектора-рядка записуються в квадратних дужках чере

пробіл або кому.

Наприклад:

V1=[1 2 3 4 5]

Значення елементів вектора-стовпця записуються в квадратних дужках через крапку з комою (‘;’).

Наприклад:

V2=[1;2;3;4;5]

Матриця (двовимірний масив) також записується в квадратних дужках, але як роздільник між рядків може використовуватися ‘;’ або Enter (новий рядок). Наприклад: Наступні вирази еквівалентні.

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

M2 = [1 2 3

4 5 6

7 8 9]

1.2 Звернення до елементів масиву в середовищі Matlab

Для доступу до окремого елементаодновимірного масиву потрібно післяйого імені вказати в круглих дужках індекс(номер) цього елемента. Наприклад, третій елемент масиву a1 позначається як a1(3), перший елемент — як a1(1), другий елемент — як a1(2). Нумерація елементів масиву починається з1 (на відміну від багатьох мов програмування, в яких нумерація виконується з нуля).

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

Приклад a3(1,1) = 1 a3(1,2) = 2

1

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

Якщо вектор використовується як аргумент математичних, результатом яких є вектор значень функції, то це означає, що значення функції обчислюються поелементно. В MATLAB для виконання поелементних операцій над векторами призначені операції, наведені в таблиці1. При цьому вектори повинні бути однакової розмірності.

Таблиця 1 - Основні поелементні операції над векторами

.+

Поелементне складання

.-

Поелементне віднімання

.^

Поелементне піднесення до ступеню

.*

Поелементне множення

./

Поелементне ділення (першого вектора на другий)

.\

Зворотне поелементне ділення (другого вектора на перший)

Приклад 1

Введемо два вектори-рядки

>>v1=[2 -3 3 1]; >>v2=[7 5 -6 9]; >>u=v1.*v2

Отримаємо u= 14 -15 -18 9

Таким чином, крапка в MATLAB використовується не тільки для введення десяткових дробів, але і для вказівки того, що операції над масивами однакового розміру повинні виконуватися поелементно.

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

Приклад 2

>>v=[1 1 1 1 1] >>2*v

Відповідь

2 2 2 2 2

1.4 Обернення невироджених матриць

Матриця А розміру N*N називається невиродженою, якщо існує така матриця B розміру N*N, що

A*B=B*A=E

де E – одинична матриця.

Якщо така матриця B не існує, то говорять, що матриця А – вироджена.

В Matlab для знаходження оберненої матриці призначена функціяinv з вхідним аргументом – матрицею.

Приклад 3:

Знайдемо для матриці обернену матрицю B. A=[2 3 8

-4 5 –1 7 –6 9]

>>B=inv(A)

2


Відповідь:

B =

0.5065

-0.9740

-0.5584

0.3766

-0.4935

-0.3896

-0.1429

0.4286

0.2857

Перевіримо правильність відповіді, перемноживши матриці А і B.

>> A*B

 

 

ans =

 

 

1.0000

0

0

0.0000

1.0000

-0.0000

-0.0000

0.0000

1.0000

1.5. Знаходження визначника матриці

Визначник квадратної матриці - це скалярна величина(дійсне число). За значенням визначника можна судити про те, чи є матриця виродженою чи ні. Так, якщо визначник рівний 0, то матриця вироджена.

Для знаходження визначника в Matlab використовується функція det.

Приклад 4

Знайдемо визначник матриці А

>>A=[2 3 8 -4 5 –1 7 –6 9]

>>d=det(A)

Відповідь: d =77

Приклад 5

Розглянемо інший приклад. Нехай є матриця С вигляду:

С =[ 2 6 4 4 12 8 7 6 5]

Знайдемо її визначник і обернену матрицю

>>det(C) ans = 0

>>inv(C)

Попередження: Матриця вироджена до робочої точності.

(Type "warning off MATLAB:singularMatrix" to suppress this warning.) ans =

Inf Inf Inf

Inf Inf Inf

Inf Inf Inf

3

2 Розв’язування систем лінійних алгебраїчних рівнянь (СЛАР) 2.1 Розв’язування невеликих невироджених СЛАР

Для розв’язування невеликих невироджених СЛАР можна використовувати оператор косої риски \ .

При цьому потрібно ввести два масиви: матрицю коефіцієнтів системи і вектор правої частини (вільних членів).

Приклад 6

Введемо матрицю системи А і вектор вільних членів b.

>>А= [1.2 0.3 -0.2 0.5 2.1 1.3 -0.9 0.7 5.6];

>>b=[1.3; 3,9; 5.4]; >>х=A\b

х= 1.0000 1.0000 1.0000

Алгоритм розв’язку СЛАР визначаєтьсяMATLAB виходячи із структури матриці коефіцієнтів системи. Якщо матриця є виродженою(її визначник = 0), то цей спосіб не підходить.

Застосування різних методів розв’язування розглянемо на прикладі.

Приклад 7

Знайти розв’язок СЛАР, матриця коефіцієнтів А і вектор вільних членівb якої мають вигляд:

A= [5.38 1.12 0.95 1.32 0.83 1.12 4.08 2.12 0.57 0.91 0.95 2.12 6.33 1.29 1.57 1.32 0.57 1.29 4.37 1.25 0.83 0.91 1.57 1.25 5.41];

b = [6.54; 3.21;3.93;6.25;5.3];

Перевіримо матрицю А на виродженість знаходженням її визначника. >>det(A)

ans = 1.9798e+003

Тепер знайдемо вектор рішень СЛАР

>> х=A\b

Відповідь:

х = [0.8246, 0.2619, 0.0728, 0.9638, 0.5653]

Отже, розв’язок СЛАР існує і він єдиний.

Приклад 8.

Спробуємо знайти розв’язок для виродженої СЛАР.

С =[ 2 6 4 5 4 12 8 10 7 6 5 1

4



1 0 5 3] b=[1, 0, 3, 5] >> х=C\b

Відповідь

??? Помилка використання ==> \ Розміри матриць повинні узгоджуватися.

Матриця С вироджена, СЛАР не може бути вирішена вказаним методом (рядки 1 і 2 лінійно залежні). Можна переконатися, що визначник С=0.

2.2 Розв’язування СЛАР за допомогою функції linsolve

Більші можливості надає функція linsolve, яка допускає вибір методу вирішення відповідно до властивостей матриці. Але вона також може використовуватися тільки для невироджених матриць.

Внайпростішому випадку виклик linsolve має вигляд:

>>х=linsolve(A,b)

де А – матриця коефіцієнтів, b – вектор вільних членів.

Приклад 9.

Знайдемо розв’язок розглянутої вище СЛАР за допомогою функції linsolve. A= [5.38 1.12 0.95 1.32 0.83

1.12 4.08 2.12 0.57 0.91

0.95 2.12 6.33 1.29 1.57

1.32 0.57 1.29 4.37 1.25

0.83 0.91 1.57 1.25 5.41]; b = [6.54; 3.21;3.93;6.25;5.3];

Застосовуючи її до нашої СЛАР отримаємо розв’язок. >> х=linsolve(A,b)

х = [ 16324993377865/19798326349273]

[ 5184473968831/19798326349273] [ 1440872575743/19798326349273] [ 19081584437538/19798326349273] [ 11192118917753/19798326349273]

Якщо привести значення коренів системи до виду десяткових, отримаємо той самий розв’язок, що і за допомогою операції \.

Для вибору методу розв’язування СЛАР потрібно сформувати управляюч структуру options, яка містить поля із значеннямиtrue або false залежно від властивостей матриці і вказати її третім вхідним аргументом функції linsolve.

>>options.SYM=true; >>у=linsolve(A,b,options)

Параметри, які визначають властивості матриці, наведено в таблиці 2.

5

Таблиця 2 - Прапорці, які визначають властивості матриці СЛАР

Прапорець

Властивість матриці

LT

Нижня трикутна

UT

Верхня трикутна

UHESS

Верхня майже трикутна

SYM

Симетрична

POSDEF

Позитивно визначена

RECT

Прямокутна

2.3 Розв’язування СЛАР методом оберненої матриці

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

1.Сформувати матрицю коефіцієнтів і вектор вільних членів заданої системи;

2.Розв’язати систему, задавши вектор невідомих як добуток матриці, оберненої до матриці системи, і вектора вільних членів.

Для обернення матриці призначена функція inv.

Приклад 10

Розглянемо ту саму СЛАР. Її розв’язок знаходимо множенням оберненої матриці на вектор вільних членів:

>> х=inv(A)*b

Відповідь:

х=

0.8246

0.2619

0.0728

0.9638

0.5653

Перевірка розв’язку. Підставимо знайдені корені в рівняння системи(це рівнозначно множенню матриці А на вектор. Введемох вектор С– результат підстановки.

>> C=A*х

Відповідь

С = 6.54 3.21 3.93 6.25 5.30

Можемо переконатися, що значення вектора С = b початкової СЛАР: b = [6.54; 3.21;3.93;6.25;5.3]

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

6


2.4 Розв’язування СЛАР методом Гауса

Розв’язування СЛАР за допомогоюметоду Гауса ґрунтується на тому, що від заданої системи, переходять до еквівалентної системи, яка розв'язується простіше, ніж початкова.

Метод Гауса складається з двох етапів:

Перший етап - це прямий хід, в результаті якого розширена матриця системи шляхом елементарних перетворень(перестановка рівнянь системи, множення рівнянь на число, відмінне від нуля, і складання рівнянь) приводиться до трикутного вигляду.

На другому етапі(зворотний хід) трикутну матрицю перетворюють таким чином, щоб в першихn стовпцях вийшла одинична матриця. Останній, n +1 стовпець цієї матриці містить розв’язок системи лінійних рівнянь.

Розглянемо як розв’язати цю задачу в MATLAB:

1.Сформувати матрицю коефіцієнтів А і вектор вільних членів b заданої системи;

2.Сформувати розширену матрицю системи, об'єднавши А і b;

3.Привести розширену матрицю до трикутного вигляду, використовуючи функцію rref;

4.Знайти розв’язок системи, виділивши останній стовпець матриці, отриманої в попередньому пункті;

5.Виконати обчислення; якщо в результаті вийшов нульовий вектор, задача вирішена вірно.

Приклад 11

Скористаємося тим самим прикладом системи, що і раніше. Матриця А і вектор b в нас вже сформовані і мають вигляд:

A= [5.38 1.12 0.95 1.32 0.83 1.12 4.08 2.12 0.57 0.91 0.95 2.12 6.33 1.29 1.57 1.32 0.57 1.29 4.37 1.25 0.83 0.91 1.57 1.25 5.41];

b = [6.54; 3.21;3.93;6.25;5.3];

Сформуємо розширену матрицю С і приведемо її до трикутного вигляду. Для приведення матриці до трикутного вигляду призначена функціяrref, а позначення [A,b] означає побудову розширеної матриці:

C=rref([A,b]);

Виділимо останній стовпець з матриці. Оскільки розширена матриця має розмір 6х5, то останній стовпець – це вектор 1:5, 6:6

>> х=C(1:5,6:6)

х=

0.82456140350877

0.26186291739895

0.07277628032345

0.96380090497738

0.56530612244898

7

Зручно записати виконані дії у файл-програму і викликати з Вікна команд за іменем файла.

2.4 Схема LU – розкладання матриць

Як видно з попереднього прикладу, розв’язування СЛАР спрощується, якщо привести матрицю А до трикутного вигляду. Тепер введемо поняття «розкладання» матриці на добуток нижньої трикутної матриці і верхньої трикутної матриці.

Визначимо нижню трикутну матрицюL з одиничною головною діагоналлю таким чином, щоб вище діагоналі були розташовані нульові елементи, а нижче діагоналі – ненульові елементи, значення яких отримані при приведенні матриці.

Визначимо верхню трикутну матрицюU на головній діагоналі якої розміщені ненульові і не одиничні елементи, а нижче діагоналі – нульові елементи.

Має місце наступне визначення:

Визначення 1:

Невироджену матрицю А можна розкласти на трикутні матриці, якщо її можна представити як добуток нижньої трикутної матриці і верхньої трикутної матриці.

Представлення матриці А у вигляді A=LU називається LU – розкладанням. Розв’язування початкової СЛАР, заданою матрицею коефіцієнтівА еквівалентно розв’язанню двох систем з трикутними матрицями:

L g = b

U x = g

 

Для

 

розкладання

матриці

на

трикутні

і

матрицю

перестаP

використовується функція Matlab [L,U,P] = lu(A)

 

 

 

 

 

Введемо в робочому вікні Matlab:

 

 

 

 

 

>>[L,U,P] = lu(A)

 

 

 

 

 

 

 

 

 

 

Отримаємо:

 

 

 

 

 

 

 

 

 

 

 

L =

 

 

 

 

 

 

 

 

 

 

 

 

 

1.0000

 

0

0

 

0

0

 

 

 

 

 

 

0.2082

1.0000

 

0

0

 

0

 

 

 

 

 

0.1766

0.4997

1.0000

 

0

0

 

 

 

 

 

0.2454

0.0767

0.1748

1.0000

0

 

 

 

 

 

0.1543

0.1916

0.2028

0.2084

1.0000

 

 

 

 

U =

 

 

 

 

 

 

 

 

 

 

 

 

 

5.3800

1.1200

0.9500

1.3200

0.8300

 

 

 

 

 

0

3.8468

1.9222

0.2952

0.7372

 

 

 

 

 

 

0

0

5.2017

0.9094

1.0551

 

 

 

 

 

 

0

0

 

0

3.8645

0.8053

 

 

 

 

 

P =

0

0

 

0

0

4.7589

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

0

0

0

 

 

 

 

 

 

 

 

 

0

1

0

0

0

 

 

 

 

 

 

 

 

 

0

0

1

0

0

 

 

 

 

 

 

 

 

 

0

0

0

1

0

 

 

 

 

 

 

 

 

 

0

0

0

0

1

 

 

 

 

 

 

 

 

 

>> g=L\b

8