Знаходження оберненої матриці

Застосовування оберненої матриці для вирішення рівнянь та знаходження вигляду вектора у новому базисі. Використання метода Гауса-Йордана для розв'язання систем лінійних алгебраїчних задач. Особливість користування зручністю та простотою програми.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.