МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра БІТ
Звіт про виконання
лабораторної роботи №3
з курсу: «Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему: «ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ
ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ»
Львів 2015Мета роботи – ознайомлення з ітераційними методами розв’язування систем лінійних алгебраїчних рівнянь.
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Розв’язати систему лінійних алгебраїчних рівнянь методами простої ітерації або Зейделя.
,
3.Блок-схема алгоритму програми
4. Список ідентифікаторів констант, змінних, функцій,
використаних у блок-схемі алгоритму і програмі,
та їх пояснення
WriteLine , ReadLine – функції вводу-виводу даних
for – оператор циклу;
a – матриця коефіцієнтів
A – матриця а, зведена до нормального вигляду
x – стовпцева матриця розв’язків
5. Текст програми
using System;
namespace Palko
{
class Laba
{
public int i, j;
public int n = 4;
public double m, k, p, f, t, S, Sum;
public double E = 0.0001;
public double[,] A;
public double[] x;
public double[,] a;
public double[] b;
public void vvid()
{
Console.Write(" k=");
k = Convert.ToInt32(Console.ReadLine());
Console.Write(" p=");
p = Convert.ToInt32(Console.ReadLine());
S = 0.2 * k;
t = 0.2 * p;
}
public void vyvid()
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
Console.Write(a[i, j]);
Console.Write("\t");
}
Console.WriteLine(" " + b[i]);
}
Console.WriteLine();
}
public void zeidel()
{
a = new double[n, n];
b = new double[n];
A = new double[n, n];
x = new double[n];
a[0, 0] = 13.3; a[0, 1] = (12.62 + S); a[0, 2] = 4.1; a[0, 3] = 1.9;
a[1, 0] = 3.92; a[1, 1] = 8.45; a[1, 2] = (1.78 - S); a[1, 3] = 1.4;
a[2, 0] = 3.77; a[2, 1] = (1.21 + S); a[2, 2] = 8.04; a[2, 3] = 0.28;
a[3, 0] = 2.21; a[3, 1] = (3.65 - S); a[3, 2] = 1.69; a[3, 3] = 9.99;
b[0] = (-10.55 + t); b[1] = 12.21; b[2] = (15.45 - t); b[3] = -8.35;
Console.WriteLine("Система рiвнянь :");
Console.WriteLine();
vyvid();
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i == j)
{
A[i, j] = 0;
}
else
{
A[i, j] = -a[i, j] / a[i, i];
}
}
b[i] = b[i] / a[i, i];
}
Console.WriteLine();
Console.WriteLine("Початкове наближення:");
for (i = 0; i < n; i++)
{
Console.Write("x(" + (i + 1) + ")=" + x[i]+"\n");
}
int v = 0;
do
{
m = 0;
v = v + 1;
for (i = 0; i < n; i++)
{
Sum = 0;
for (j = 0; j < n; j++)
{
Sum += A[i, j] * x[j];
}
f = x[i];
x[i] = b[i] + Sum;
if ((Math.Abs((x[i] - f)) > m))
m = (Math.Abs(x[i] - f));
}
}
while (m > E);
Console.WriteLine("Кiлькiсть iтерацiй:"+(+v));
Console.WriteLine();
Console.WriteLine("Результати :");
for (i = 0; i < n; i++)
{
Console.WriteLine("x(" + (i + 1) + ")=" + x[i]);
}
Console.ReadLine();
}
}
class Demo
{
static void Main()
{
Laba go = new Laba();
go.vvid();
go.zeidel();
}
}
}
6. Результати роботи програми
/
7. Висновки
На даній лабораторній роботі я навчилася розв’язувати системи лінійних
алгебраїчних рівнянь за допомогою комп’ютерних програм . Я розв’язувала
системи за допомогою методу Зейделя. Використовуючи алгоритм ми суттєво скорочуєм час на обчислення лінійних алгебраїчних рівнянь.