Міністерство освіти та науки України
Національний університет «Львівська Політехніка»
ІКТА
кафедра БІТ
Звіт про виконання
лабораторної роботи № 3
з курсу:
«Комп’ютерні методи дослідження інформаційних процесів та систем»
на тему:
«ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ
ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ»
Ознайомлення з ітераційними методами розв’язування систем лінійних алгебраїчних рівнянь.
Завдання
Розв’язати систему лінійних алгебраїчних рівнянь методом Зейделя :
S=k*0.2, b=p*0.2,
k=3, b=2.
Блок-схема алгоритму програми
початок
створення масивів А, а, х, b
заповнення масивів А та b
Масиви А та b
Console.ReadLine();
Console.Clear();
система рівнянь
i=0,n
j=0,n
ні так
i=j b[i] = b[i] / a[i, i];
A[i, j] = -a[i, j] / a[i, i]; A[i, j] = 0;
початкове наближення
i=0,n
x[i] = b[i];
масив початкових наближень
v=0;
1
1
while (Math.Abs(x[0]-f)>E)
f=x[0];
v++
i=0,n
Sum = 0;
j=0,n
Sum += A[i, j] * x[j];
x[i] = b[i] + S1 + S2;
x[i]
кінецьСписок ідентифікаторів констант, змінних, процедур і функцій.
WriteLine , ReadLine – функції вводу-виводу даних
for – оператор циклу;
a – матриця коефіцієнтів
A – матриця а, зведена до нормального вигляду
x – стовпцева матриця розв’язків
Остаточний текст програми мовою С#.
using System;
namespace l3
{
class Laba
{
public int i,j;
public int n = 4;
public double m,k,p,f,t,S,Sum;
public double Sum = 0;
public double E = 0.0001;
public double[,] A;
public double[] x;
public double[,] a;
public double[] b;
public void mas()
{
Console.Write("введiть k=");
k = Convert.ToInt32(Console.ReadLine());
Console.Write("введiть p=");
p = Convert.ToInt32(Console.ReadLine());
S = 0.2 * k;
t = 0.2 * p;
}
public void output()
{
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 metod()
{
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] = (2.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.3;
vuvid();
Console.ReadLine();
Console.WriteLine("Розвязок системи лiнiйних рiвнянь методом Зейделя:");
Console.WriteLine();
output();
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.WriteLine("x" + (i + 1) + "=" + x[i]);
}
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();
Console.WriteLine("Кiлькiсть iтерацiй:");
Console.WriteLine(+v);
Console.WriteLine();
Console.WriteLine("Кiнцевий результат:");
for (i = 0; i < n; i++)
{
Console.WriteLine("x" + (i + 1) + "=" + x[i]);
}
Console.ReadLine();
}
public void vuvid()
{
Console.WriteLine("Елементи матрицi");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
Console.Write(a[i, j] + "\t");
}
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("Вiльнi елементи");
for (i = 0; i < n; i++)
{
Console.WriteLine(b[i]);
}
}
}
class Demo
{
static void Main(string[] args)
{
Laba go = new Laba();
go.mas();
go.metod();
}
}
}
Результат виконання програми
Висновок.
Виконавши лабораторну роботу, ми ознайомилися з ітераційними методами розв’язування систем лінійних алгебраїчних рівнянь.