МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
ЗВІТ
До лабораторної роботи №3
з курсу: «Комп’ютерні методи дослідження інформаційних процесів і систем»
на тему: «Ітераційний метод для розв’язування систем лінійних алгебраїчних рівнянь»
Варіант №1
Мета роботи – ознайомлення з ітераційними методами розв’язування систем лінійних алгебраїчних рівнянь.
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Розв’язати систему лінійних алгебраїчних рівнянь ітераційний методом.
/
/
Блок-схема програми
Текст прогами
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication25
{
class Program
{
static void Main(string[] args)
{
Iterations xD = new Iterations();
xD.Initialization();
xD.PerevirkaZbizhnosti();
xD.SomeCalculations();
xD.Checking();
Console.ReadKey();
}
}
class Iterations
{
public int k, p, kil;
public double s, b, rez, E;
public double[] x0 = new double[4];
public double[] x1 = new double[4];
public double[] e = new double[4];
static public double[,] a;
public double[,] alpha;
public double[] beta;
public void Initialization()
{
Console.Write("\n Введiть заданий коефiцiєнт k = ");
k = int.Parse(Console.ReadLine());
Console.Write("\n Введiть заданий коефiцiєнт p = ");
p = int.Parse(Console.ReadLine());
s = 0.2 * k;
b = 0.2 * p;
E = 0.0001;
a = new double[,]{{ 30.3, 12.62+s, 4.1, 1.9, -10.55+b},
{3.92, 8.45, -(1.78-s), 1.4, 12.21}
{3.77, 1.21+s, 8.04, 0.28, 15.45-b},
{2.21, 3.65-s, 1.69, 9.99, -8.35}};
alpha = new double[a.GetLength(0), a.GetLength(0)];
beta = new double[a.GetLength(0)];
}
public void SomeCalculations()
{
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(0); j++)
{
if (i != j)
alpha[i, j] = -(a[i, j] / a[i, i]);
}
}
for (int i = 0, j = (a.GetLength(1) - 1); i < a.GetLength(0); i++)
beta[i] = (a[i, j] / a[i, i]);
for (int i = 0; i < beta.GetLength(0); i++)
x0[i] = beta[i];
do
{
for (int i = 0; i < alpha.GetLength(0); i++)
{
x1[i] = beta[i];
for (int j = 0; j < alpha.GetLength(0); j++)
x1[i] = x1[i] + x0[j] * alpha[i,j];
e[i] = Math.Abs(x1[i] - x0[i]);
x0[i] = x1[i];
}
kil++;
}
while (!(e[0] < E && e[1] < E && e[2] < E && e[3] < E));
}
public void PerevirkaZbizhnosti()
{
for (int i = 0; i < a.GetLength(0); i++)
{
rez = 0;
for (int j = 0; j < a.GetLength(0); j++)
if ( i != j)
rez += Math.Abs(a[i,j]);
if (rez > Math.Abs(a[i,i]))
Console.WriteLine("Умови збiжностi не виконуються");
}
}
public void Checking()
{
Console.WriteLine("Коренi рiвняння:");
foreach (int x in x1)
Console.Write("\t" + x);
double z = x1[0] * a[0, 0] + x1[1] * a[0, 1] + x1[2] * a[0, 2] + x1[3] * a[0, 3];
double z1 = x1[0] * a[1, 0] + x1[1] * a[1, 1] + x1[2] * a[1, 2] + x1[3] * a[1, 3];
double z2 = x1[0] * a[2, 0] + x1[1] * a[2, 1] + x1[2] * a[2, 2] + x1[3] * a[2, 3];
double z3 = x1[0] * a[3, 0] + x1[1] * a[3, 1] + x1[2] * a[3, 2] + x1[3] * a[3, 3];
if (((int)z == (int)a[0, 4]) && ((int)z1 == (int)a[1, 4]) && ((int)z2 == (int)a[2, 4]) && ((int)z3) == ((int)a[3, 4]))
Console.WriteLine("\nСЛАР розв'язана вiрно!!!");
Console.WriteLine("Кiлькiсть iтерцiй = " + kil);
}
}
}
Результат роботи програми
/