Знаходження оберненої матриці
Застосовування оберненої матриці для вирішення рівнянь та знаходження вигляду вектора у новому базисі. Використання метода Гауса-Йордана для розв'язання систем лінійних алгебраїчних задач. Особливість користування зручністю та простотою програми.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 10.06.2014 |
Размер файла | 532,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ
“КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра прикладної математики
КУРСОВА РОБОТА
з дисципліни “Програмування”
на тему: Знаходження оберненої матриці
Студента І курсу , групи КМ-33
напряму прикладна математика
Травєнікова Олександра
Керівник
ЛЮБАШЕНКО Н.Д.
Київ - 2014
Зміст
Вступ
1. Постановка задачі
2. Вибір методу розв'язання
3. Алгоритм
4. Опис програми
5. Результати роботи
Висновки
Література
Додаток: текст програми на мові С
Вступ
Обернення матриці - це досить поширена операція у математиці, що насамперед використовується у галузі лінійної алгебри та аналітичної геометрії. Зокрема, дуже зручно застосовувати обернену матрицю для вирішення матричних рівнянь та знаходження вигляду вектора у новому базисі. Обернені матриці також використовуються у таких галузях високих технологій, як комп'ютерна графіка та бездротові комунікації. Студентам технічних навчальних закладів, особливо тих, де поглиблено вивчається математика, зручніше знаходити обернену матрицю швидко та без зайвих труднощів. Саме тому знаходження оберненої матриці я вирішив реалізувати як комп'ютерну програму.
Мета дослідження: вивчення методу обернення матриць за допомогою програмних засобів комп'ютерів.
Об'єкт дослідження: різноманітні матриці.
Предмет дослідження: обернена матриця.
Метод дослідження: аналітичний.
1. Постановка задачі
Задача знаходження обернених матриць - одна з найважливіших для практики задач математики.
Обернена матриця -- матриця (позначається ), яка існує для кожної невиродженої квадратної матриці , розмірності , причому:
, (1)
де одинична матриця.
Якщо для матриці існує , то така матриця називається оборотною; кожна невироджена матриця є оборотною, і навпаки -- кожна оборотна матриця є невиродженою.
Властивості:
· -- операція обернення є інволюцією.
· -- обернення транспонованої матриці.
· -- обернення спряженої матриці.
· для довільного коефіцієнта
·
· -- визначник оберненої матриці.
· -- ранг матриці дорівнює розміру матриці.
· Власні вектори матриці та її оберненої -- збігаються, а власні значення є оберненими.
· Якщо потрібно розв'язати систему лінійних рівнянь , (b -- ненульовий вектор) і існує, тоді . В протилежному випадку або розмірність простору розв'язків більше нуля, або їх немає зовсім.
2. Вибір методу розв'язання
Для вирішення задачі знаходження оберненої матриці було обрано метод Гауса - Йордана. Метод Гауса - Йордана використовується для розв'язання систем лінійних алгебраїчних рівнянь, знаходження оберненої матриці, знаходження координат вектора у заданому базисі, знаходження рангу матриці. Метод є модифікацією методу Гауса. Названий на честь Гауса та німецького математика та геодезиста Вільгельма Йордана.
В одну матрицю записують матрицю A і одиничну матрицю E , тобто складають матрицю виду ( A | E ) (цю матрицю називають також розширеною). Після цього за допомогою елементарних перетворень, виконуваних з рядками розширеної матриці, домагаються того, що матриця зліва від межі стане одиничною, причому розширена матриця прийме вигляд ( E | A-1). До елементарних перетворень в даній ситуації відносять такі дії :
1. Зміна місцями двох рядків.
2. Множення всіх елементів рядка на деяке число, не рівне нулю.
3. Додавання до елементів одного рядка відповідних елементів іншого рядка, помножених на будь-який множник.
3. Алгоритм
Загальний алгоритм програми зображено на рис. 1.
Рисунок 1. Блок-схема алгоритму
4. Опис програми
Програма написана на мові С, що є універсальною, процедурною, імперативною мовою програмування загального призначення. Для розробки програми я обрав вільне кросплатформенне середовище розробки програмного забезпечення Code::Blocks. Воно підтримує велику кількість компіляторів (і безпроблемно компілює програми на мові С), може масштабуватися за рахунок додаткових модулів та має досить потужний інтерфейс, що підтримує автоматичне доповнення коду, підсвічування синтаксису та згортання блоків коду. Все це значно полегшує розробку та підтримку програмного продукту.
Програма є консольною, тому графічного інтерфейсу вона не має; але, тим не менш, користуватися нею інтуїтивно просто та зручно. До того ж, відсутність графічного інтерфейсу та зайвих модулів робить запуск програми практично миттєвим. лінійний обернений матриця вектор
Основні функції описані у табл. 1.
Таблиця 1. Основні функції
Назва функції |
Опис |
Призначення (результат роботи) |
|
void intro |
Не приймає параметрів, викликається на початку програми |
Виведення на екран стартової сторінки |
|
void menu |
Не приймає параметрів, викликається після відпрацювання програми |
Реалізація елементарного меню користувача |
|
int main |
Основна функція програми; оскільки програма виконує одну задачу, немає потреби виносити її в окрему функцію |
Загальне виконання програми; запрошення на введення, перевірка на коректність вводу числових даних; виконання операцій для обернення матриці; виведення результатів на екран |
Основні дані описані у табл. 3.
Таблиця 3. Основні дані
Назва змінної |
Тип |
Призначення |
|
matrix[21][21] |
масив елементів float 21Ч21 |
Сама квадратна матриця, що обробляється (вводиться користувачем) |
|
n |
int |
Порядок матриці (вводиться користувачем) |
|
ratio |
float |
Результат ділення елементів матриці (при оберненні) |
|
i |
int |
Рядки початкової матриці |
|
j |
int |
Стовпці початкової матриці |
|
k |
int |
Допоміжний індекс матриці (при оберненні) |
|
s[25] |
char (рядок) |
Використовується для введення даних користувачем та подальшої перевірки на коректність вводу |
|
c |
char |
Допоміжна символьна змінна, використовується у меню для визначення, повторити виконання чи вийти |
5. Результати роботи
Вивід інформації про програму (рис. 2):
Рисунок 2. Інформація про програму
Введення елементів матриці та демонстрація перевірки на коректність даних (рис. 3):
Рисунок 3. Введення користувачем та перевірка даних
Результати -- виведення на екран введеної користувачем матриці та оберненої матриці (рис. 4):
Рисунок 4. Результати роботи програми
Висновки
У ході даної курсової роботи реалізована програма знаходження оберненої матриці методом Гауса - Йордана.
Під час виконання цієї курсової роботи, я покращив свої навички роботи з мовою С, став набагато краще орієнтуватися в програмному коді і набув більшої впевненості при його написанні, поглибив загальні знання з програмування.
У майбутньому як покращення програми можливе створення графічного інтерфейсу користувача. Також можливе створення ще кількох програм для роботи з математичними операціями та об'єднання їх з даною програмою, щоб створити універсальний математичний «помічник».
Література
1. Керниган Б., Ритчи Д. Язык программирования С. Издание 3-е, исправленное. - 250 с.
2. Бубнов, В.А. Линейная алгебра: компьютерный практикум. ЛБЗ, 2012. - 168 c.
Додаток: текст програми на мові С
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void intro()
{
system("cls");
printf("\t\t\t\tMATRIX INVERSION\n\n");
printf("\n\n\t\t\t\t\t\t By Oleksandr Travienikov\n\n");
printf("\nPress any key to start the program");
printf("\nPress ESC to exit)");
}
void menu()
{
printf("\nPress any key to repeat once more");
printf("\nPress ESC to exit)");
}
int main()
{
float matrix[21][21], ratio, a;
int i, j, k, n;
char s[25], c;
intro();
while( (c=getch())!= 27)
{
system("cls");
for(;;)
{
printf("Enter order of matrix (no more than 10)> ");
fgets (s, 5, stdin);
if (strlen(s) <=3)
{
if ((atoi(s)>0)&&(atoi(s)<=10))
{
n = atoi(s);
break;
}
printf("Error: please input a valid integer no more than 10!\n");
rewind(stdin);
continue;
}
printf("Error: the string is too long!\n");
rewind(stdin);
}
rewind(stdin);
printf("Enter the matrix: \n");
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
for(;;)
{
printf(" Input element [%d][%d] > ", i+1, j+1);
fgets (s, 25, stdin);
if (strlen(s) <=23)
{
if ((atof(s)!=0)||(strcmp(s, "0\n") == 0))
{
matrix[i][j] = atof(s);
break;
}
printf("Error: please input a valid float number!\n");
rewind(stdin);
continue;
}
printf("Error: the string is too long!\n");
rewind(stdin);
}
rewind(stdin);
}
}
printf("\nYour matrix is: \n\n");
for(i = 0; i < n; i++)
{
printf("||");
for(j = 0; j < n; j++){
printf("%4.2f", matrix[i][j]);
printf("\t");
}
printf("||\n");
}
for(i = 0; i < n; i++)
{
for(j = n; j < 2*n; j++)
{
if(i==(j-n))
matrix[i][j] = 1.0;
else
matrix[i][j] = 0.0;
}
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(i!=j)
{
ratio = matrix[j][i]/matrix[i][i];
for(k = 0; k < 2*n; k++)
{
matrix[j][k] -= ratio * matrix[i][k];
}
}
}
}
for(i = 0; i < n; i++)
{
a = matrix[i][i];
for(j = 0; j < 2*n; j++)
{
matrix[i][j] /= a;
}
}
printf("\nThe inverse matrix is: \n\n");
for(i = 0; i < n; i++)
{
printf("||");
for(j = n; j < 2*n; j++)
{
printf("%4.2f", matrix[i][j]);
printf("\t");
}
printf("||\n");
}
menu();
}
return 0;
}
Размещено на Allbest.ru
Подобные документы
Принципи технології створення програмних продуктів. Набір файлів, необхідних для створення програми в Delphi, варіанти роботи з ними. Програмування графічного інтерфейсу користувача. Зовнішній вигляд і лістинг програми, використані команди і компоненти.
курсовая работа [550,5 K], добавлен 03.01.2014Розв’язання нелінійних алгебраїчних рівнянь методом хорд. Опис структури програмного проекту та алгоритмів розв’язання задачі. Розробка та виконання тестового прикладу. Інші математичні способи знаходження коренів рівнянь, та опис виконаної програми.
курсовая работа [4,1 M], добавлен 28.09.2010Розв’язання нелінійних алгебраїчних рівнянь методом дихотомії. Вирішення задачі знаходження коренів рівняння. Розробка алгоритму розв’язання задачі і тестового прикладу. Блок-схеми алгоритмів основних функцій. Інструкція користувача програмою мовою С++.
курсовая работа [2,0 M], добавлен 24.09.2010Розробка програмних модулів базових операцій обробки на підставі розрядно-логарифмічного кодування. Дослідження алгоритму розв'язку системи лінійних алгебраїчних рівнянь. Реалізація алгоритму Гауса. Покращення точності розрахунків за допомогою рл-чисел.
курсовая работа [427,2 K], добавлен 20.11.2013Бібліотеки для дій з розрядно-логарифмічними діями. Перевірка оберненої матриці за допомогою одиничної у розрядно-логарифмічній формі. Код розрахунку оберненої матриці за методом Крамера. Алгоритми додавання, віднімання, множення, ділення чисел у РЛ.
курсовая работа [18,6 K], добавлен 17.10.2013Квадратна матриця вироджена (для особливої) за умови, що визначник дорівнює нулю. Вироджене чи не вироджене лінійне перетворення невідомих. Зв'язок існує між множенням матриць і послідовним виконанням лінійних перетворень. Добуток невироджених матриць.
курсовая работа [114,4 K], добавлен 26.03.2009Вибір емпіричної формули. Метод оберненої матриці. Розв’язування систем лінійних рівнянь на ПК. Вибір двох апроксимуючих функцій. Розрахунки у середовищі MS Excel для лінійної функції, для квадратичної функції та у середовищі MS Visual Studio (мовою С#).
курсовая работа [658,8 K], добавлен 18.08.2014Програма чисельного розв'язку систем лінійних алгебраїчних рівнянь (СЛАР) з розрідженою матрицею, економне витрачання оперативної пам'яті дозволяє розв’язувати багато систем високих ступенів за допомогою персональних комп'ютерів. Методи розв’язку СЛАР.
дипломная работа [1,1 M], добавлен 01.08.2009Головні особливості середовища Turbo Pascal. Властивості та вигляд системи лінійних алгебраїчних рівнянь. Опис схеми єдиного ділення (метод Гауса). Структура вхідної та вихідної інформації, текст програми, блок-схеми всіх процедур і головної програми.
курсовая работа [276,1 K], добавлен 07.02.2011Види рівнянь та методи їх розв’язань. Чисельні методи уточнення коренів, постановка задачі. Рішення нелінійного рівняння методом простих та дотичних ітерацій. Використання програмних засобів. Алгоритми розв’язку задач. Програми мовою С++, їх тестування.
курсовая работа [232,2 K], добавлен 12.02.2013