Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт
про виконання лабораторної роботи N2
з курсу “Алгоритмічні основи криптології”
на тему: “Ітераційні методи розв’язування
систем лінійних алгебраїчних рівнянь ”
Львів – 2004
Мета роботи: вивчити найпоширеніші ітераційні методи розв’язку систем лінійних алгебраїчних рівнянь, навчитись розв’язувати на ЕОМ системи алгебраїчних рівнянь, провести порівняльний аналіз розглянутих методів.
Завдання: написати програму на мові програмування Сі яка б розв’язувала систему лінійних алгебраїчних рівнянь методом Зейделя.
24,21+s 2,42 3,85
2,31 31,49 1,52
3,49 4,84 28,72+s
30,24
40,95-r
42,81
де s = 0.2*k , r = 0.2*p
k=0, p=5.
Блок – схема алгоритму роботи програми
Текст програми:
#include <math.h>
#include <stdio.h>
#define n 3
#define max(x,y) (fabs(x)>=fabs(y))?x:y
void main (void)
{
float a[n+1][n+1];
float b[n+1],s[n];
float x0[n],x1[n];
double E,Emax,E1[n];
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
scanf("%f",&a[i][j]);
}
for (i=1;i<=n;i++)
scanf("%f",&b[i]);
E=0.00001;
for(i=1;i<=n;i++)
{
x1[i]=b[i]/a[i][i];
E1[i]=1;
}
do
{
for (i=1;i<=n;i++)
{
x0[i]=x1[i];
}
for (i=1;i<=n;i++)
{
x1[i]=b[i];
for (j=1;j<=n;j++)
{
x1[i]=x1[i]-a[i][j]*x0[j];
if (i==j) x1[i]=x1[i]+a[i][j]*x0[j];
}
x1[i]=x1[i]/a[i][i];
}
for (i=1;i<=n;i++)
{
E1[i]=(x1[i]-x0[i])/x1[i];
}
for (i=1;i<=n-2;i++)
{
Emax=max(E1[i],E1[i+1]);
Emax=max(Emax,E1[i+2]);
}
}
while (Emax>E);
for (i=1;i<=n;i++)
{
printf("\n X[%d] = %f",i,x1[i]);
}
for (i=1;i<=n;i++)
{
s[i]=0;
for (j=1;j<=n;j++)
{
s[i]=s[i]+a[i][j]*x1[j];
}
}
for (i=1;i<=n;i++)
{
printf("\n S[%d] = %f",i,s[i]);
}
}
Результат виконання програми:
Висновок:
Розв’язання систем лінійних алгебраїчних рівнянь методом простої ітерації або методом Зейделя можна досить легко реалізувати на ЕОМ за допомогою програми в середовищі Сі. Основна відмінність методу Зейделя полягає в тому, що при обчисленні кожного наступного наближення невідомого аргументу враховуються вже знайдені раніше невідомі поточного наближення. Розв’язання таких систем на ЕОМ є дуже актуальним, оскільки цей процес є набагато легшим та короткотривалішим ніж розв’язання систем лінійних алгебраїчних рівнянь вручну.