Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт
про виконання лабораторної роботи N1
з курсу “Алгоритмічні основи криптології”
на тему: “Прямі методи розв’язування систем
лінійних алгебраїчних рівнянь”
Львів – 2004
Мета роботи: вивчити найпоширеніші прямі методи розв’язку систем лінійних алгебраїчних рівнянь, навчитись розв’язувати на ЕОМ системи алгебраїчних рівнянь, провести порівняльний аналіз розглянутих методів.
Завдання: написати програму на мові програмування Сі яка б розв’язувала систему лінійних алгебраїчних рівнянь методом LU – розкладу.
8.3*х(1) + (2.62+s)*x(2) + 4.1*x(3) + 1.9*x(4) = -10.65+B
3.92*x(1) + 8.45*x(2) + (7.78-s)*x(3) +2.46*x(4) = 12.21
3.77*x(1) + (7.21+s)*x(2) + 8.04*x(3) + 2.28*x(4) = 15.45 – B
2.21*x(1) + (3.65-s)*x(2) + 1.69*x(3) + 6.99*x(4) = -8.35
де s = 0.2*k , B = 0.2*p
k=0, p=5.
Блок – схема алгоритму роботи програми
Текст програми:
#include <math.h>
#include <stdio.h>
#define n 4
void main (void)
{
float a[n+1][n+1];
float b[n+1];
float L[n+1][n+1],U[n+1][n+1],x[n+1],y[n+1];
int i,j,k,m;
float sum,s1=0;
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]);
k=1;
for (i=1;i<=n;i++)
{
L[i][1]=a[i][1];
}
for (j=2;j<=n;j++)
{
U[1][j]=a[1][j]/a[1][1];
}
for(k=k+1;k<=n;k++)
{
for (i=k;i<=n;i++)
{
sum=0;
for (m=1;m<=k-1;m++)
{
sum=sum+L[i][m]*U[m][k];
}
L[i][k]=a[i][k]-sum;
}
for (j=k+1;j<=n;j++)
{
sum=0;
for (m=1;m<=k-1;m++)
{
sum=sum+L[k][m]*U[m][j];
}
U[k][j]=(a[k][j]-sum)/L[k][k];
}
}
y[1]=b[1]/L[1][1];
for (i=2;i<=n;i++)
{
sum=0;
for (m=1;m<=i-1;m++)
{
sum=sum+L[i][m]*y[m];
}
y[i]=(b[i]-sum)/L[i][i];
}
x[n]=y[n];
for (i=n-1;i>=1;i--)
{
sum=0;
for (m=i+1;m<=n;m++)
{
sum=sum+U[i][m]*x[m];
}
x[i]=y[i]-sum;
}
for (i=1;i<=n;i++)
{
printf("\nX[%d] = %f",i,x[i]);
}
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
s1+=a[i][j]*x[j];
printf("\nsuma[%d]=%f",i,s1);
s1=0;
}
}
Результат виконання програми:
Висновок:
Розв’язання систем лінійних алгебраїчних рівнянь методом Гауса або LU - розкладу можна досить легко реалізувати на ЕОМ за допомогою програми в середовищі Сі. Основна перевага методу LU – розкладу полягає в можливості простішого одержання розв’язку для різних векторів b системи лінійних рівнянь. Розв’язання таких систем на ЕОМ є дуже актуальним, оскільки цей процес є набагато легшим та короткотривалішим ніж розв’язання систем лінійних алгебраїчних рівнянь вручну.