Вступ
Бурхливий розвитокновітньої техніки й все більше впровадження сучасних розділів математикинезмірно підвищили вимоги до математичної підготовки фахівців і вдосконалюваннютехніки програмування. Програмістам, що займаються прикладним, системним або Webпрограмуванням необхідно чітко бачити алгоритм створюваного проекту, будь тетекстовий процесор або серйозна операційна система. Математичне утворення даєпрограмістові можливість простіше й оптимальніше побудувати як сам алгоритм,так і програму.
Сьогодні серйознікомпанії працюють над новими мовами програмування й засобами реалізації коду.Так, завдяки Б.Страуструпу було уведено об’єктно — орієнтоване програмування, створений їм мова C++ відкрив передпрограмістами нові обрії. Але час не коштує на місці й C++ перестає бутипопулярним, на зміну йому приходить JAVA, що має винятково класову структуру,написані на ньому програми займають менший об'єм пам'яті й виконуються набагатошвидше. Але деякі мови не мають об’єктно — орієнтованої структури еволюціонувалий представляють саму перспективну галузь серед інших мов, такими мовами єDelphi (Остання версія якого — 2006), Visual Basic 2005(Visual Studio 2005).
У своєму проекті я будувикористовувати Borland C++ версії 4.5, тому що вважаю його найбільш оптимальнимдля поставленої мною задачі.
1.1Загальна характеристика методів рішення систем лінійних рівнянь.
Способи вирішення системлінійних рівнянь в основному розділяються на дві групи: 1) точні методи, що представляють собою кінцеві алгоритми дляобчислення корінь системи ( до таких методів ставляться: правило Крамера, методГаусса, метод головних елементів, метод квадратних корінь і ін.), і 2) ітераційні методи, що дозволяютьодержувати корінь системи із заданою точністю, шляхом збіжних нескінченнихпроцесів (до їхнього числа належать метод ітерацій, метод Зейделя, метод релаксації і ін.).
Внаслідок неминучихокруглень результати навіть точних методів є наближеними, причому оцінкапогрішностей корінь у загальному випадку скрутна. При використанні ітераційнихпроцесів, поверх того, додається погрішність методу.
Однак ефективнезастосування ітераційних методів істотно залежить від вибору початковогонаближення й швидкості збіжності процесу.
1.2 Методрелаксації змінних систем лінійних рівнянь
П.З.:
Дана система лінійних рівнянь, необхідно знайти та ін.
Нехай маємо наступну систему лінійних рівнянь:
(1)
Перетворимо цю систему в такий спосіб: перенесемовільні члени ліворуч і розділимо перше рівняння на — і т.д. Тоді одержимосистему, приготовлену до релаксації,
(2)
де
и.
Нехай початкове наближеннярішення системи (2). Підставляючи ці значення в систему (2), одержимо нев'язання
(3)
Якщо однієї з невідомих дати приріст зменшиться на величину збільшаться навеличини в 0, досить величині дати приріст
і ми будемо мати:
и
при
Метод релаксації (по-російському: ослаблення) уйого найпростішій формі полягає в тім, що на кожному кроці перетворюють у нульмаксимальну по модулі нев'язання шляхом зміни значень відповідного компонентанаближення. Процес закінчується, коли всі нев'язання останньої перетвореноїсистеми будуть рівні 0 із заданою точністю. Питання про збіжність цього процесуми залишаємо без розгляду .
1.3 Використання методарелаксації змінних в системах лінійних рівнянь на прикладі
Приклад.Методом релаксаціївирішити систему
(4)
роблячи обчислення із двома десятковими знаками.
Рішення. Приводимо систему (4) довиду, зручному для релаксації
Вибираючи як початкові наближення корінь нульовізначення
Знаходимо відповідні їм нев'язку
Відповідно до загальної теорії думаємо:
Звідси одержуємо нев'язку
0,60
0,70
0,80
0,16
0,16
-0,80
0,76
0,86
0,17
0,86
-0,86
0,09
0,93
0,09
0,93
-0,93
0,09
0,09
0,09
0,18
0,18
0,04
0,04
-0,18
0,04
0,13
0,13
0,03
-0,13
0,01
0,07
0,07
0,01
-0,07
0,01
0,01
0,01
0,02
0,02
-0,02
0,01
0,01
-0,01
1,00
1,00
1,00
Далі, думаємо
і т.д. Відповідні результати обчислень наведені втаблиці.
Підсумовуючи всі прирости
Для контролю підставляємо знайдені значення коріньу вихідні рівняння; у цьому випадку система вирішена точно.
Висновки
Я навчився розв’язувати системи лінійнихрівнянь методом релаксації змінних, та закріпив отримані навички розробкоюпрограми на мові BorlandC++ 4.5.
Додаток А
Вирішити систему лінійних рівнянь методомрелаксації змінних.
Лістинг програми 1.1:
#include
#include
int maximal(int n,double R0[]);
void main(){
int i,j,n,f,k,iter;
double S,det;
cout>n;
double *x=new double [n];
double **b=new double *[n];
for(i=0;i
b[i]=new double[n+1];
double **a=new double *[n];
for(i=0;i
a[i]=new double[n+1];
cout
cin>>iter;
cout
for(i=0;i
for(j=0;j
cin>>b[i][j];
}
cout
for(i=0;i
for(j=0;j
a[i][j]=-b[i][j]/b[i][i];
a[i][n]=b[i][n]/b[i][i];
}
for(i=0;i
for(j=0;j
cout
cout
}
double *x0=new double [n];
for(i=0;i
x[i]=0.0;
double *R0=new double [n];
cout
for(i=0;i
cin>>x0[i];
S=0.0;
for(i=0;i
for(j=0;j
S=S+a[i][j]*x0[i];
}
for(i=0;i
R0[i]=a[i][n]-x0[i]+S;
cout
}
f=maximal(n,R0);
det=R0[f];
for(k=0;k
cout
for(i=0;i
if(i!=f)R0[i]=R0[i]+a[i][f]*det;
else R0[i]=R0[i]-det;
}
for(i=0;i
cout
x[f]=x[f]+det;
f=maximal(n,R0);
det=R0[f];
}
cout
for(i=0;i
cout
delete []x;
delete []R0;
delete []x0;
delete []a;
}
int maximal(int n,double R0[]){
int i,f;
f=0.0;
for(i=0;i
if(R0[i+1]>R0[i]) f=i+1;
}
return f;
}