Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НУ ”Львівська політехніка”
Звіт
про виконання лабораторної роботи №1
з курсу: ”Алгоритмічні основи криптології”
на тему:
”Прямі методи розв’язування систем лінійних алгебраїчних рівнянь ”
Львів-2007
Мета роботи: вивчити найпоширеніші прямі методи розв’язку систем лінійних алгебраїчних рівнянь, навчитись розв’язувати на ЕОМ системи алгебраїчних рівнянь, провести порівняльний аналіз розглянутих методів.
Теоретичні відомості
Методи чисельного розв’язку системи лінійних рівнянь поділяються на дві групи:
точні методи, які дозволяють одержати розв’язок, якщо він існує, як скінчену кількість арифметичних операцій
наближені методи, які дозволяють отримати розв’язок лише заданою точністю з припущенням, що обчислення проводяться без округлень
Точні методи використовуються при розв’язку на ЕОМ системи невисокого порядку (n, де n –число алгебраїчних рівнянь). Наближені використовуються до систем високого порядку.
Метод Гауса
Метод Гауса можна реалізувати у вигляді різних обчислювальних схем, в основі яких лежить одна й таж сама ідея послідовного виключення невідомих.
Розглянемо систему лінійних рівнянь четвертого порядку:
Знаходимо з першого рівняння, одержуємо
Підставляємо в інші рівняння, тоді прийдемо до системи з 3 рівнянь з 3 невідомими
Аналогічні перетворення здійснюємо з іншими змінними в результаті отримаємо систему вигляду:
Знайшовши підставляємо його значення в рівняння і т. д.
Блок схема алгоритму
Текст програми розвязку системи лінійних алгебраїчних рівнянь методом Гауса
#include <stdio.h>
#include <math.h>
#define n 4
#define m 5
void main(void)
{
int i,l,k;
double q,c,s,mm;
double a[n][m],d[n][m],x[n];
/* вводимо значення коефіцієнтів системи*/
for (i=0;i<n;i++)
{
for (k=0;k<m;k++)
{
printf ("a[%i%i]=",i+1,k+1);
scanf ("%lf", &a[i][k]);
d[i][k]=a[i][k];
}
}
/* виконуємо прямий хід */
for (l=0;l<(n-1);l++)
{
c=a[l][l];
for (i=l+1;i<n;i++)
{
mm=-a[i][l]/c;
for (k=l+1;k<=n;k++)
a[i][k]+=mm*a[l][k];
}
}
/* виконуємо зворотній хід */
for (i=0;i<=n;i++)
x[i]=0;
x[n-1]=-a[n-1][n]/a[n-1][n-1];
for (i=n-2;i>=0;i--)
{
s=a[i][n];
for (k=i;k<n;k++)
s+=a[i][k]*x[k];
x[i]=-s/a[i][i];
}
/* виводимо результати */
for (i=0;i<n;i++)
printf("\nx[%i]=%lf",i+1,x[i]);
/ * здійснюємо перевірку перавильності виконаних обчислень */
for (i=0; i<n; i++)
{
q=0;
for (k=0;k<(m-1);k++)
q+=d[i][k]*x[k];
printf ("q%d=%lf\n",i,q);
}
}
Вихідна система лінійних алгебраїчних рівнянь
Результат виконання програми
Висновок: під час виконання даної лабораторної роботи я вивчила найбільш поширені методи розв’язку системи лінійних алгебраїчних рівнянь, ознайомилася детальніше з методом Гауса та навчилася реалізовувати його в середовищі мови програмування Сі.
Похибки округлень при ітераційному методі впливають на остаточні результати значно менше, ніж при розв’язку за методом Гауса, оскільки при його використані похибки не нагромаджуються. Метод ітерації стає особливо зручним при розв’язку систем переважна кількість коефіцієнтів яких дорівнює 0. Недоліком методу ітерації є те, що рішення не завжди збігаються.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!