Рішення системи лінійних алгебраїчних рівнянь методом Крамера

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

РІШЕННЯ СИСТЕМИ ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ метод Крамера

Зміст
Введення
1. Створення С #
2. Постановка завдання
3. Метод Крамера
4. Програмна реалізації алгоритму методу Крамера
Висновок
Список використаних джерел

Введення
На практиці в більшості випадків знайти точної рішення виниклої математичної задачі не вдається. Це відбувається головним чином не тому, що ми не вміємо цього зробити, а оскільки дані рішення зазвичай не виражається у звичних для нас елементарних чи інших відомих функціях. Тому велике значення придбали чисельні методи, особливо у зв'язку із зростанням ролі математичних методів в різних галузях науки і техніки та з появою високопродуктивних ЕОМ.
У цій курсовій роботі розглянута важлива, з точки зору прикладних задач: метод Крамера для рішення лінійних алгебраїчних рівнянь.

1. СОЗДЕНІЕ С #
Найчастіше занадто багато чого вимог від інструментів, з якими працюємо, особливо, коли це стосується мов програмування. Хоча таких мов існує безліч, але тільки деякі з них по-справжньому сильні. Ефективність мови полягає в його потужності і одночасно - в гнучкості. Синтаксис мови повинен бути лаконічним, але ясним. Він має сприяти створенню коректного коду та надавати реальні можливості, а не ультрамодні (і, як правило, тупикові) рішення. Нарешті, потужний мова повинна мати одне нематеріальне якість: викликати відчуття гармонії. Якраз такою мовою програмування і є С #. Створений компанією Microsoft для підтримки середовища. NET Framework, мову С # спирається на багату спадщину в області програмування. Його головним архітектором був провідний фахівець у цій галузі - Андерс Хейлсберг (Anders Hejlsberg).
С # - прямий нащадок двох найуспішніших у світі комп'ютерних мов: З і C + +. Від С він успадкував синтаксис, ключові слова й оператори. Він дозволяє побудувати і удосконалити об'єктну модель, визначену в C + +. Крім того, С # близько пов'язаний з іншим дуже успішним мовою: Java. Маючи спільне походження, але розрізняючись в багатьох важливих аспектах, С # і Java - це скоріше "двоюрідні брати". Наприклад, вони обидва підтримують програмування розподілених систем і обидва користуються проміжний код для досягнення переносимості, але розрізняються при цьому в деталях реалізації. Спираючись на потужний фундамент, який становлять успадковані характеристики, С # містить ряд важливих нововведень, які піднімають мистецтво програмування на новий щабель. Наприклад, до складу елементів мови С # включені такі поняття, як делегати (представники), властивості, індексатори і події. Долучення також синтаксис, який підтримує атрибути; спрощено створення компонентів за рахунок виключення проблем, пов'язаних з COM (Component Object Model - модель компонентних об'єктів Microsoft - стандартний механізм, що включає інтерфейси, за допомогою яких об'єкти надають свої служби іншим об'єктам).
І ще. Подібно Java мову С # пропонує засоби динамічного виявлення помилок, забезпечення безпеки та керованого виконання програм. Але, на відміну від Java, C # дає програмістам доступ до покажчиків. Таким чином, С # поєднує первозданну міць C + + з типовою безпекою Java, яка забезпечується наявністю механізму контролю типів (type checking) і коректним використанням шаблонних класів (template class). Більше того, мова С # відрізняється тим, що компроміс між потужністю і надійністю ретельно збалансований і практично прозорий (не помітний для користувача або програми).
Протягом всієї історії розвитку обчислювальної техніки еволюція мов програмування означала зміна обчислювального середовища, способу мислення програмістів і самого підходу до програмування. Мова С # не є винятком. У безперервному процесі удосконалення, адаптації та впровадження нововведень З # в даний час знаходиться на передньому краї. Це - мова, ігнорувати існування якого не може жоден професійний програміст.
2. Постановка завдання
До вирішення систем лінійних рівнянь зводяться численні практичні завдання. Можна з повною підставою стверджувати, що рішення лінійних систем є однією з найпоширеніших і важливих завдань обчислювальної математики [1,2].

(1)
Сукупність коефіцієнтів цієї системи запишемо у вигляді таблиці:

Запишемо систему n лінійних алгебраїчних рівнянь з n невідомими.
Дана таблиця n 2 елементів, що складається з n рядків та n стовпців, називається квадратною матрицею порядку n. Якщо подібна таблиця містить nm елементів, розташованих у n рядках і m стовпцях, то вона називається прямокутною матрицею.
Використовуючи поняття матриці А, систему рівнянь (3) можна записати у векторно-матричному вигляді:

,
або, у більш компактній запису,

де х і b - вектор-стовпець невідомих і вектор-стовпець правих частин відповідно.
3. Метод Крамера
Алгоритм Крамера, згідно [1,2], виражається формулами

де
...,
При цьому необхідною і достатньою умовою існування єдиного рішення, є не рівність нулю головного визначника системи
.
Блок-схема алгоритму представлена ​​на малюнку.
SHAPE \ * MERGEFORMAT
Кінець
Корній немає
Початок


Обчислити
Обчислити:

Обчислити:


Так
Ні


4. Програмна реалізації алгоритму метод Крамера
Основним методом класу Programm, є метод Main. З нього починається виконання програми. У нашому випадку, він містить найпростіший користувальницький інтерфейс, за допомогою якого користувач вводить розмірність системи, елементи матриці системи А і вектора правих частин b (1, розділ 1), а після необхідних обчислень на екрані з'являється результат - елементи вектора x.
У роботі, алгоритм Крамера для більшої читабельності, розбитий на окремі функції - методи:
static double det (int n, double [,] B) - метод обчислює визначник матриці. Параметрами цього методу є - кількість рівнянь (n), а так само матриця, в нашому випадку B. Визначник матриці обчислюється непосдедственно, тобто розкладанням по першому рядку [3];
static void equal (int n, double [,] A, double [,] B) - метод привласнювали матриці ( ), Де n-розмірність матриць;
static int SLAU_kramer (int n, double [,] A, double [] b, double [] x) - метод реалізує метод Крамера, згідно блок схемою глави 2.
В якості мови програмування ми використовували об'єктно - орієнтована мова С #. Наш вибір обумовлений його гнучкістю в розробці і створенні програмних продуктів [4-7].
Текст програми призведе нижче.
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication_Kramer
{
class Program
{
static void Main (string [] args)
{
int n / * кількість рівнянь * /
double [,] A = new double [3,3]; / * матриця системи * /
double [] b = new double [3]; / * вектор правих частин * /
double [] x = new double [3]; / * вектор рішення * /
char qq;
Console.Write ("Введіть кількість рівнянь (<= 3) n ->");
n = Convert.ToInt32 (Console.ReadLine ());
if (n> 3 | | n <= 1)
{
Console.WriteLine ("Помилка в розмірності системи (n = 2,3)");
Convert.ToInt32 (Console.ReadLine ());
return;
}
for (int i = 0; i <n; i + +)
for (int j = 0; j <n; j + +)
{
Console.Write ("A {0} {1} ->", i, j);
A [i, j] = Convert.ToDouble (Console.ReadLine ());
}
for (int i = 0; i <n; i + +)
{
Console.Write ("b {0} ->", i);
b [i] = Convert.ToDouble (Console.ReadLine ());
}
if (SLAU_kramer (n, A, b, x) == 1)
{
Console.WriteLine ("Система не має рішення");
Convert.ToInt32 (Console.ReadLine ());
return;
}
else
for (int i = 0; i <n; i + +)
Console.WriteLine ("x" + i + "=" + x [i]);
Console.ReadLine ();
}
private
static double det (int n, double [,] B)
{
if (n == 2)
return B [0,0] * B [1,1] - B [0,1] * B [1,0];
return B [0,0] * (B [1,1] * B [2,2] - B [1,2] * B [2,1]) - B [0,1] * (B [1, 0] * B [2,2] - B [1,2] * B [2,0]) +
B [0,2] * (B [1,0] * B [2,1] - B [1,1] * B [2,0]);
}
static void equal (int n, double [,] A, double [,] B)
{
for (int i = 0; i <n; i + +)
for (int j = 0; j <n; j + +)
A [i, j] = B [i, j];
}
static void change (int n, int N, double [,] A, double [] b)
{
for (int i = 0; i <n; i + +)
A [i, N] = b [i];
}
public
static int SLAU_kramer (int n, double [,] A, double [] b, double [] x)
{
double [,] An = new double [3,3];
double det1 = det (n, A);
if (det1 == 0) return 1;
for (int i = 0; i <n; i + +)
{
equal (n, An, A);
change (n, i, An, b);
x [i] = det (n, An) / det1;
}
return 0;
}
}
}
Програма, яка реалізує метод Крамера, була протестована на наступний тестових прикладах.
Вирішити систему другого порядку

рішення систем є вектор
.
Результат виконання програми представлений на рис. 1.


Рис. 1. Результат виконання програми для системи другого порядку.
Вирішити систему третього порядку

рішення систем є вектор
.
Результат виконання програми представлений на рис. 2.

Рис. 2. Результат виконання програми для системи третього порядку.

У ході тестування або, так само були розглянуті випадки неправильного введення розмірності, результат виконання на рис.3 і випадок несумісності системи рівнянь рис.4.

Рис. 3. Результат виконання програми в слуае помилкового введення розмірності системи.

Рис. 4. Результат виконання програми у разі несумісності системи.
Слід зауважити, що в програмі не ошуществляется перевірка правильність введення елементів матриці і вектора правих частин.

ВИСНОВОК
У роботі, нами був програмно реалізовано метод Крамера для розв'язання системи лінійних алгебраїчних рівнянь. Ми використовували необхідна умова існування розв'язку, тобто не рівність нулю головного визначника системи.
Відмінна риса цього методу полягає в неодноразовому обчисленні визначника матриці. З обчислювальної точки зору це трудомістка операція зі зростанням кількості елементів. У роботі була розглянута система 3-го порядку, а визначники обчислювалися безпосередньо.
Однак це не знижує цінність роботи, оскільки перехід до вирішення СЛАР з невідомою кількістю рівнянь здійснюється зміною методу, який обчислює визначник матриці.

СПИСОК ВИКОРИСТОВУЮТЬСЯ ДЖЕРЕЛ
1. Турчак Л.І. Основи чисельних методів / Л.І. Турчак, П.В. Плотніков. - М.: Фізматліт, 2002. - 304 с.
2. Демидович Б. П. Чисельні методи аналізу / Б.П. Демидович, І.А. Марон,
Е.З. Шувалова. - М.: Наука, 1967 .- 368 с.
3. Вища математика для економістів: Уч. Для вузів / Н.Ш. Кремер, Б.А. Путко, І.М. Тришин, М.М. Фрідман.-М.: Банки і біржі, 1998.-471 с.
4. Мохіка Х. Мова С #: розробка Web-додатків на ASP.NET / Х. Мохіка; пер. з англ. А.А. Слінкіна. - М.: НТ Пресс, 2006. - 464 с. - (Quick Start).
5. Ліберті Дж. Програмування на C #: пров. з англ. / Дж. Ліберті. - 2-е вид. - СПб.: Символ, 2003. - 688 с.: Іл.
6. З #: пров. з англ. / К. Ватсон, М. Белліназо, О. Корнс та ін - СПб.: Пітер, 2006. - 861 с.
7. Галісеев Г.В. Програмування на мові С #: самовчитель / Г.В. Галісеев. - М.: Вільямс, 2006. - 368 с.: Іл.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
28.1кб. | скачати


Схожі роботи:
Розв язування системи лінійних алгебраїчних рівнянь за правилом Крамера методом Гаусса та за до
Рішення систем лінійних алгебраїчних рівнянь прямі методи
Рішення систем нелінійних алгебраїчних рівнянь методом Ньютона
Системи лінійних алгебраїчних рівнянь
Стійкість системи лінійних алгебраїчних рівнянь
Розвязання системи лінійних алгебраїчних рівнянь
Ітераційні методи розв`язання системи лінійних алгебраїчних рівнянь
Матриці дії над ними Обернена матриця Матричний запис системи лінійних алгебраїчних рівнянь т
Пошук рішень системи лінійних рівнянь методом Гауса
© Усі права захищені
написати до нас