Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт
про виконання лабораторної роботи №2
з курсу “Алгоритмічні основи криптології”
на тему: “ Ітераційні методи розв’язування
систем лінійних алгебраїчних рівнянь ”
Мета роботи: вивчити найпоширеніші ітераційні методи розв’язку систем лінійних алгебраїчних рівнянь, навчитись розв’язувати на ЕОМ системи алгебраїчних рівнянь, провести порівняльний аналіз розглянутих методів.
Завдання: написати програму на мові програмування Сі яка б розв’язувала систему лінійних алгебраїчних рівнянь методом Зейделя.
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=2, p=2.
Блок – схема алгоритму роботи програми
Текст програми:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define n 3
#define m 10
#define e 0.0001
typedef enum {False,True}Boolean;
main()
{
float a[n][n],b[n],l[n][n+1],t[n],x[n][m-1];
float s=0,s1=0;
int i,j,k,h,p;
Boolean d;
for(i=0;i<n;i++)
for (j=0;j<n;j++){
printf("a[%i,%i]=",i+1,j+1);
scanf("%f",&a[i][j]);
}
for(i=0;i<n;i++){
printf("b[%i]=",i+1);
scanf("%f",&b[i]);
}
for(i=0;i<n;i++){
h=0;
for(j=0;j<n;j++){
if (i==j) continue;
l[i][h]=(-a[i][j])/a[i][i];
h++;
}
}
for(i=0;i<n;i++)
t[i]=b[i]/a[i][i];
k=0;
for(i=0;i<n;i++)
x[i][k]=t[i];
do {
k++;
for(i=0;i<n;i++){
s=0;s1=0;
for(j=0;j<=(i-1);j++)
s1+=(l[i][j]*x[j][k]);
for(j=i;j<=n;j++){
if (i==j) continue;
s+=(l[i][j-1]*x[j][k-1]);
}
x[i][k]=t[i]+s+s1;
}
for (i=0;i<n;i++){
if ((fabs(x[i][k]-x[i][k-1]))<e) p=True;
else{
p=False;
break;
}
}
} while (p!=True);
puts("Rezultaty:");
for(i=0;i<n;i++)
printf(" x[%d]=%5.5f",i+1,x[i][k]);
puts("\nPerevirka:");
for(i=0;i<n;i++){
s=0;
for(j=0;j<n;j++)
s+=(x[j][k]*a[i][j]);
printf(" s=%5.5f\n",s);
}
getchar();
}
Результат виконання програми:
Висновок: Розв’язання систем лінійних алгебраїчних рівнянь методом простої ітерації або методом Зейделя можна досить легко реалізувати на ЕОМ за допомогою програми в середовищі Сі. Основна відмінність методу Зейделя полягає в тому, що при обчисленні кожного наступного наближення невідомого аргументу враховуються вже знайдені раніше невідомі поточного наближення. Розв’язання таких систем на ЕОМ є дуже актуальним, оскільки цей процес є набагато легшим та короткотривалішим ніж розв’язання систем лінійних алгебраїчних рівнянь вручну.