Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПР1

.docx
Скачиваний:
23
Добавлен:
21.06.2021
Размер:
421.44 Кб
Скачать

Цели работы

а) освоение основных методов решения систем линейных алгебраических уравнений (СЛАУ);

б) совершенствование навыков по алгоритмизации и программированию вычислительных задач.

Постановка задачи

Вариант 5

Решить систему линейных уравнений методом Зейделя, где

Математическая часть

Аналитические расчеты

На рисунке 1 представлены входные данные для онлайн калькулятора, использованного для осуществления аналитических расчетов(«ручного счета»).

Рисунок 1 – входные данные

Решение:

Приведем к виду: x1=0.3333 - (0.67x2+0.33x3+0.89x4) x2=0.25 - (0.5x1+0.38x3+0.88x4) x3=0.1429 - (0.57x1+0.86x2+0.57x4) x4=1.3333 - (0.67x1+x2+1.67x3) Покажем вычисления на примере нескольких итераций. N=1 x1=0.3333 - 0*0.6667 - 0*0.3333 - 0*0.8889=0.3333 x2=0.25 - 0.3333*0.5 - 0*0.375 - 0*0.875=0.0833 x3=0.1429 - 0.3333*0.5714 - 0.0833*0.8571 - 0*0.5714=-0.119 x4=1.3333 - 0.3333*0.6667 - 0.0833*1 - (-0.119)*1.6667=1.2262 N=2 x1=0.3333 - 0.0833*0.6667 - (-0.119)*0.3333 - 1.2262*0.8889=-0.7725 x2=0.25 - (-0.7725)*0.5 - (-0.119)*0.375 - 1.2262*0.875=-0.392 x3=0.1429 - (-0.7725)*0.5714 - (-0.392)*0.8571 - 1.2262*0.5714=0.2196 x4=1.3333 - (-0.7725)*0.6667 - (-0.392)*1 - 0.2196*1.6667=1.8743 N=3 x1=0.3333 - (-0.392)*0.6667 - 0.2196*0.3333 - 1.8743*0.8889=-1.1446 x2=0.25 - (-1.1446)*0.5 - 0.2196*0.375 - 1.8743*0.875=-0.9001 x3=0.1429 - (-1.1446)*0.5714 - (-0.9001)*0.8571 - 1.8743*0.5714=0.4974 x4=1.3333 - (-1.1446)*0.6667 - (-0.9001)*1 - 0.4974*1.6667=2.1675 Остальные расчеты сведем в таблицу(полученная таблица приведена на рисунке 2).

Рисунок 2 – Таблица значений

Схема алгоритма решения задачи

Рисунок 3 - Схема функции okr

Рисунок 4 - Схема функции swp

Рисунок 5 – Часть схемы функции main

Рисунок 6 – Часть схемы функции main

Рисунок 7 – Часть схемы функции main

Рисунок 8 – Часть схемы функции main

Рисунок 9 – Часть схемы функции main

Рисунок 10 – Часть схемы функции main

На рисунках 5-10 изображена схема функции main.

Текст программы на языке C++

#include<iostream>

#include<conio.h>

using namespace std;

float okr(float x, double eps)

{

int i = 0;

double neweps = eps;

while (neweps < 1)

{

i++;

neweps *= 10;

}

int okr = pow(double(10), i);

x = int(x * okr + 0.5) / double(okr);

return x;

}

void swp(float* a, float* b)

{

float temp = *a;

*a = *b;

*b = temp;

}

int main(void)

{

setlocale(LC_ALL, "Russian");

float a[10][10], b[10], m[10], n[10];

int p, q = 0, i = 0, j = 0;

double eps = 0;

cout << "Введите размер матрицы A: ";

cin >> p;

for (i = 0; i < p; i++)

{

for (j = 0; j < p; j++) {

cout << "a[" << i << ", " << j << " ]=";

cin >> a[i][j];

}

}

cout << "\nВведите значения матрицы B \n";

for (i = 0; i < p; i++)

{

cout << "b[" << i << "]=";

cin >> b[i];

}

cout << "\nВаше уравнение: " << endl;

for (i = 0; i < p; i++)

{

cout << a[i][0] << "*" << "X1" << " + " << a[i][1] << "*" << "X2" << " + " << a[i][2] <<

"*" << "X3" << " + " << a[i][3] << "*" << "X4" << " = " << b[i];

cout << endl;

}

float max;

int z = p + 1;

int t = 0;

for (j = 0; j < p; j++)

{

max = 0;

for (i = t; i < z; i++)

{

if (a[i][j] > max)

{

max = a[i][j];

for (int q = 0; q < p; q++)

{

swp(&a[i][q], &a[j][q]);

}

swp(&b[i], &b[j]);

}

}

t++;

}

cout << "\nВаше модифицированное уравнение: " << endl;

for (i = 0; i < p; i++)

{

cout << a[i][0] << "*" << "X1" << " + " << a[i][1] << "*" << "X2" << " + " << a[i][2] << "*"

<< "X3" << " + " << a[i][3] << "*" << "X4" << " = " << b[i];

cout << endl;

}

// погрешность

cout << "\nВведите точность вычислений: ";

cin >> eps;

// начальное приближения столбца решения

for (i = 0; i < p; i++) {

m[i] = 0;

}

cout << "\nВведите номер итеррации: ";

cin >> q;

while (q > 0)

{

for (i = 0; i < p; i++)

{

n[i] = (b[i] / a[i][i]);

for (j = 0; j < p; j++)

{

if (j == i)

continue;

n[i] = n[i] - ((a[i][j] / a[i][i]) * m[j]);

m[i] = n[i];

}

cout << "x" << i + 1 << "=" << okr(n[i], eps) << " ";

}

cout << "\n";

q--;

}

return 0;

}

Результат программных расчетов

На рисунке 5 представлен результат работы программы

Рисунок 5 – Результат работы программы

Сравнение результатов программных и аналитических расчетов

В ходе тестирования программы выявлено, что полученные результаты совпадают с предсказанными в ходе аналитических расчетов с точностью до округления.

Выводы

В ходе выполнения лабораторной работы были изучены способы решения системы линейных алгебраических уравнений(СЛАУ). Составлена схема решения поставленной задачи. Так же была написана программа, позволяющая решать СЛАУ методом Зейделя. Полученные после работы программы результаты совпадают с аналитическими расчетами, следовательно программа работает корректно. При отладке ошибок не обнаружено.

Соседние файлы в предмете Вычислительная математика