Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі icon

Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі




Скачати 123.14 Kb.
НазваЗавдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі
Дата09.06.2013
Розмір123.14 Kb.
ТипРішення

Міністерство освіти і науки України

Сумський державний університет

Кафедра інформатики


Курсова робота

з дисципліни програмування


Виконала

студентка групи Ін-91:

Василенко Є.Д.

Викладач:

Любчак В.О.


Суми-2010

Зміст


Зміст 2

Завдання 3

Постановка задачі 3

Теоретична частина 4

Розглянемо метод Ітерацій: 4

Метод Гауса: 6

Опис програми 8

Опис файлів та їх призначення 9

Меню користувача 10

Результати тестування програми 11

Текст програми 16

Список літратури 23



^

Завдання


Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій.

Постановка задачі


В своїй курсовій роботі я маю розробити програму яка б вирішувала систему лінійних рівнянь методом Гауса та Ітерацій.

В даній програмі необхідно передбачити наступні функції :

- функція, яка б виводила коефіцієнт;

- функція , яка вводить с клавіатури у вигляді двомірного масиву;

- функція за допомогою якої ми б могли робити дії з рівняннями для вирішення ;

  • Функція перестановки рівнянь;

  • Функція множення обох частин рівнянь на одне й те саме число,що не рівне (0);

  • Функція додавання рівнянь;

  • Функції для створення меню користувача;

-функція можливості вибору потрібного методу для рішення (шляхом введення числа ,яке в таблиці визначає метод розв’язання )

-функція , яка виводить результат у вигляді таблиці виду:

Х1=а

Х2=в

Х3=с

Х4=…

Х5=…



-функція яка буде зберігати обчислення у файл, також функція яка буде визивати необхідний файл з вмістом потрібної нам системи;

-передбачити виведення на екран відомості помилки , якщо систему розв’язати не можливо, або якщо в методі Ітерацій не виконуеться умова збіжності, яка потрібна для розв’язання.


^

Теоретична частина


Сучасні комп’ютерні технології дозволяють автоматизувати математичні задачі.Завдяки цьому їх використання стало простішим і доступнішим.В цій курсовій роботі я надаю приклад вирішення систем лінійних рівнянь методом Гауса, та методом Ітерацій.
^

Розглянемо метод Ітерацій:


Припустимо, що рівняння f(x)=0 за допомогою деяких тотожних перетворень зведене до вигляду . Відмітимо, що таке перетворення можна робити різними способами, і при цьому матимемо різні функції в правій частині рівняння. Рівняння f(x)=0 еквівалентне рівнянню для будь-якої функції . Таким чином, можна взяти і при цьому вибрати функцію (або постійну) так, щоб функція задовольняла тим властивостям, які знадобляться нам для забезпечення знаходження кореня рівняння.

Суть методу полягає у заміні початкового рівнян (1) еквівалентним йому рівнянням,     (2)

^ Постановка задачі

Нехай задано рівняння , де– неперервна нелінійна функція. Потрібно визначити корінь  цього рівняння, який знаходиться на відрізку  з заданою похибкою .Виберемо довільним способом  і підставимо його в праву частину рівняння (1); тоді отримаємо . Потім це значення  підставимо знову в праву частину рівняння (2) і отримаємо (рис.1 а,б). Повторюючи цей процес, отримаємо послідовність чисел . При цьому можливі два випадки:

  • послідовність  збігається, тобто має границю, і тоді ця границя буде коренем рівняння (1).

  • послідовність  розбігається, тобто не має границі.


Приведемо без доказу теорему, яка виражає умову, при якій ітераційний процес розв’язку нелінійного рівняння методом ітерацій на ЕОМ збігається.

     

     ^ Рисунок 1Геометрична інтерпретація методу ітерацій

Теорема. Нехай на відрізку  знаходиться єдиний корінь рівняння  та у всіх точках цього відрізку похідна  задовольняє нерівності . Якщо при цьому виконується і умова , то ітераційний процес збігається, а за нульове наближення  можна взяти число з відрізку .Розв’яжемо один етап ітерацій. Виходячи із заданого на попередньому кроці значення , обчислюємо . Якщо , покладемо  і виконаємо наступну ітерацію. Якщо ж , то обчислення закінчують, за наближене значення кореня приймають величину .При використанні методу простих ітерацій основною операцією є вибір функції  в рівнянні , яку слід підібрати так, щоб  і швидкість сходження послідовності до кореня  тим вища, чим менше число . Схема алгоритму метода ітерацій представлена на рисунку( 2).

     

     Рисунок 2 – Схема алгоритму розв'язання лінійного рівняння методом ітерацій


^

Метод Гауса:


Метод Гауса - класичний метод рішення системи лінійних алгебраїчних (СЛАР). Це метод послідовного виключення змінних, коли за допомогою елементарних перетворень система рівнянь приводиться до рівносильній системі трикутного вигляду, з якого послідовно, починаючи з останньої (за номером) змінної, перебувають всі інші змінні.
Опис методу.
Нехай вихідна система виглядає наступним чином:


Для чисельного рішення системи рівнянь зручніше розглядати розширену матрицю:




Знайдемо максимальний елемент aij матриці A. Перестановкою рядків і стовпців розширеної матриці, приведемо її до вигляду::



Всі елементи першого рядка матриці на елемент aij, а у всіх інших рядках занулений перший елемент за допомогою елементарних перетворень. Таким чином отримаємо матрицю:


Далі розглянемо підматрицю:


Знайдемо максимальний елемент матриці, перестановкою рядків і стовпців переставимо максимальний елемент у перший рядок і перший стовпець і так далі. У результаті отримаємо матрицю виду:
      або   .

З останнього рядка одержуємо . З передостаннього рядка знаходимо і так далі.Таким чином отримуємо рішення системи.Щоб отримати рішення вихідної системи потрібно переставити компоненти.


^

Опис програми


Для розробки програми були використані такі функції:

void iteration()-функція яка реалізовує рішення системи методом ітерацій;

void Gauss () –функція яка реалізовує рішення системи методом Гаусса;

double A[N][N]-двовимірний масив для коефіцієнтів при невідомих;

double B[N]-масив правих частин;

double X[N]-масив що зберігає результати розв’язку системи;

double Xi[N]-масив для проміжних значень в методі ітерацій;

int main()-функція для реалізації інтерфейса користувача та створення меню;

#define EPS 0.001-константа що визначає точність розв’язку для методу Ітерацій;

#define N 50- визначає максимальний розмір системи рівнянь;

FILE *in, *out-файлові змінні;

int v- зберігає вибір користувача;

char *fname –зберігає ім’я файлу для зчитування вхідних даних;

В програмі використовується наступні стандартні функції: fopen,scanf,printf,fclose. Функція fopen()-потребує два параметри перший параметр –рядок в якому записано ім.’я файлу з яким буде проводитися взаємодія в програмі , другий параметр –рядок який визначає режим роботі с файлом (зчитування , або запис ), в якості результату функція повертає показчик на файл. Наприклад out = fopen("kursout.txt","w");, це означає ,що показчик “out” буде зв’язано з файлом “kursout.txt” в режимі запису.

Функція scanf() забезпечує зчитування даних з клавіатури. Вона має наступний синтаксис scanf("%lf",&A[i][j]); тут перший параметр визначає формат даних які зчитуються, другий параметр – адреса змінної куди буде записано зчитані данні.

Функція printf()-має аналогічний синтаксис але використовується для виводу даних на екран.

Функція fclose() –закриває файл з яким була з’єднана файлова змінна. Приклад fclose(in);

Функція getch()-використовується для зчитування символа з клавіатури. Тут вона використовується для затримки екрану при роботі з меню користувача.
^

Опис файлів та їх призначення


1.Kurs.cpp- файл з вихідним кодом програми;

2. kurs.exe бінарний файл програми;

3. sis1.txt, sis2.txt, sis3.txt, sis4.txt, sis5.txt-файли з вхідними даними для розрахунків;

4.kursout.txt- файл з результатами роз’язку поточної системи лінійних рівнянь;


^

Меню користувача


При запуску програми користувачу пропонується зробити наступний вибір:
1. Schitat dannie s klaviaturi

2. Schitat dannie s faila

3. Naiti rechenime metodom Gausa

4. Naiti rechenime metodom Iteraciey

5. Vivesti rezultati na ekran

6. Vivesti rezultati v fail;

7.Vihod

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

Najmite lubuu klavishu...

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

Меню користувача розташовано у нескінченному циклі do-while(1), вихід з якого можливий лише при виборі відповідного пункту меню в якому для виходу із циклу використовується оператор return.


^

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


Рішення системи лінійних рівнянь методом Гаусса:



В програмі задаємо усі параметри для рішення даної системи методом Гауcса, а отримуємо аналогічний результат(дані можна ввести с клавіатури або зчитати з файлу «sis5.txt»)



Отриманий результат:




Дану систему можна вирішити методом ітерацій, вибравши в пункті меню «Вирішити методом Ітерацій», отриманий результат буде мати такий вигляд:



Так, як метод Ітерацій являється менш точним методом ніж метод Гаусса, результат трохи відрізніється.


Протестуємо ще одну систему :



В програмі задаємо усі параметри для рішення даної системи методом Гауcса, а отримуємо аналогічний результат(дані можна ввести с клавіатури або зчитати з файлу «sis3.txt»)



Отриманий результат:



Також ,дана програма може записати результат в файл(«kursout.txt») та вивести на екран:



Результат в файлі:



Дану систему можна вирішити методом ітерацій, вибравши в пункті меню «Вирішити методом Ітерацій», отриманий результат буде мати такий вигляд:



Як, ми бачимо дана система не може мати рішення методом ітерацій, так як,за умовою 1)  < 1 норма заданої матриці більше 1, тому система за методом ітерацій не збігається.


^

Текст програми


#include

#include

#include

#include


#define N 50

#define EPS 0.001


double A[N][N],B[N],X[N],Xi[N],t,a,b;

int n,i,c,j,l,m;

FILE *in, *out;

int v;

char *fname;


void iteration(){

// pervoe priblijenie

for ( i =0; i < n; i++) {

^ X[i] = B[i]/A[i][i];

B[i]=X[i];

}


for ( i = 0; i < n; i++){

t = A[i][i];

for ( j = 0; j < n; j++){

A[i][j] = A[i][j]/t;

}

}


// shag 2 (podstanovka)

do{

printf("iteracii\n");

for (i = 0 ; i < n ; i++){

^ Xi[i] = B[i];

for ( j = 0; j < n ; j++){

if ( i == j ) continue;

Xi[i] = Xi[i]-(A[i][j]*X[j]);

}

// Xi[i] = Xi[i]/A[i][i];

}

c = 0;

for ( i = 0; i < n; i++){

if ( fabs(Xi[i]-X[i])

}

for ( i = 0; i < n ; i++){

^ X[i] = Xi[i];

printf("%.5lf\t",X[i]);

}

// getch();

printf("\n");

// c == n Xi - otvet


} while (c

printf("Otvet:\n");

for ( i = 0; i < n ; i++){

^ X[i] = Xi[i];

printf("X%d=%.3lf\n",i,Xi[i]);

}


}

void Gauss () {

//metod Gausa

// Privedenie k diagonalnomu vidu

for ( m = 0; m < n ; m++){

for ( i = m; i < n; i++){

a = A[i][m];

for ( l = m; l < n; l++){

A[i][l] = A[i][l] / a;

}

//if (i >= m)

B[i] = B[i] / a;

}

for ( i = m+1; i < n ; i++){

for ( j = 0; j < n; j++){

A[i][j] = A[i][j] - A[m][j];

}

//if( i>=m)

B[i] =B[i] - B[m];

}

printf("-------------------\n");

for ( i = 0 ; i< n ; i++){

for ( j = 0; j < n; j++){

printf("%.2lf\t",A[i][j]);

}

printf("%.2lf\n",B[i]);

}

}

for ( m = n-1; m > 0; m--){

// m = n - 1;

X[m]=B[m];

for ( i = m-1; i >=0; i--){

A[i][m] = A[i][m]*X[m];

}

X[m-1] = 0;

for ( i = m-1; i

B[m-1] = B[m-1]-A[m-1][i+1];

}

X[m-1] = B[m-1];

// printf("%.2lf\t",X[m-1]);

// printf("\n");

}

printf("-----------------Rezultat----------------\n");

for ( i = 0 ; i< n ; i++){

for ( j = 0; j < n; j++){

printf("%.2lf\t",A[i][j]);

}

printf("%.2lf\n",B[i]);

}

printf("Otvet:\n");

for ( i = 0; i < n; i++){

printf("X%d=%.lf\n",i,X[i]);

}


}

int main(){

out = fopen("kursout.txt","w");

do{

clrscr();

printf("1. Schitat dannie s klaviaturi \n");

printf("2. Schitat dannie s faila \n");

printf("3. Naiti rechenime metodom Gausa \n");

printf("4. Naiti rechenime metodom Iteraciey \n");

printf("5. Vivesti rezultati na ekran\n");

printf("6. Vivesti rezultati v fail\n");

printf("7. Vihod\n");

printf("\tVvedite vash vibor:");

scanf("%d",&v);

switch (v){

case 1: {

printf("Vvedite razmernost sistemi\n");

scanf("%d",&n);

for( i = 0; i < n; i++){

for( j = 0; j< n; j++){

printf("A%d%d=",i,j);

scanf("%lf",&A[i][j]);

}

}

printf("\n");

for( j = 0; j< n; j++){

printf("B%d=",j);

scanf("%lf",&B[j]);

}

break;

}

case 2: {

printf("Vvedite imya faila:");

scanf("%s",fname);

in = fopen(fname,"r");

fscanf(in,"%d",&n);

for( i = 0; i < n; i++){

for( j = 0; j< n; j++){

fscanf(in,"%lf",&A[i][j]);

printf("%.3lf\t",A[i][j]);

}

printf("\n");

}

printf("\n");

for( j = 0; j < n; j++){

fscanf(in,"%lf",&B[j]);

printf("%.3lf\n",B[j]);

}

printf("\n");

break;

}

case 3: {

Gauss();

break;

}

case 4: {

iteration();

break;

}

case 5: {

for ( i = 0; i < n; i++){

printf("X%d=%.3lf\n",i,X[i]);

}

break;

}

case 6: {

for ( i = 0; i < n; i++){

fprintf(out,"X%d=%.3lf\n",i,X[i]);

}

break;

}

case 7 : {

fclose(in); fclose(out);

return 0;

}

};

printf("Najmite lubuu klavishu...");

getch();

} while(1);

}


Список літратури


Схожі:

Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconЗавдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі
В своїй курсовій роботі я маю розробити програму яка б вирішувала систему лінійних рівнянь методом Гауса та Ітерацій
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconТип модуля: обов’язковий Семестр: V обсяг модуля
Задачі, які зводяться до лінійних І нелінійних систем алгебричних рівнянь, до обчислення многочленів Тейлора І фур'є та їх похідних,...
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconРішення задачі лп симплекс-методом. Приклад
Визначення дифіцитних І недифіцитних ресурсів в задачі лп на основі її графічного рішення. Приклад
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconНазва модуля: Лінійна алгебра та аналітична геометрія
Досліджувати І розв’язувати математично сформульовані задачі з використанням понять теорії матриць, визначників, систем лінійних...
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconПрограма з курсу "Вища, математика" Матриці. Визначники матриць. Системи рівнянь першої степені
Розв'язок системи "n" рівнянь з "n" невідомими, правило Крамера. Розв'язок І дослідження систем рівнянь першої степені методом повного...
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі icon“Економіко-математичне моделювання”, ек-09, 2010/2011 н р
...
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconЯ. О. Слободян, канд техн наук 2А. В. Гузь
Ліра. Наведено оцінка похибки лінійного розрахунку порівняно з результатами розв’язання нелінійної задачі кроковим методом послідовного...
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconАкадемія муніципального управління Програма курсу
Розв'язок І до­слідження систем рівнянь першої степені методом повного виключення
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconПоклавши, знайдемо абсцису точки перетину хорди з віссю
Метод хорд — один з поширених ітераційних методів. Його ще називають методом лінійного інтерполювання, методом пропорційних частин,...
Завдання Числове рішення систем лінійних рівнянь Методом Гауса, та Методом Ітерацій. Постановка задачі iconДвох лінійних рівнянь має безліч розв’язків?
Яка система трьох лінійних рівнянь еквівалентна системі двох рівнянь з трьома невідомими?
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи