Лабораторна робота №5

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Алгоритми та методи обчислень

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторної роботи № 5 з дисципліни: “Алгоритми та методи обчислень” Індивідуальне завдання Реалізувати стандартний алгоритм матричного множення і запрограмувати метод Гауса (розв'язок системи лінійних алгебраїчних рівнянь). Код програми Matrix.h #ifndef MATRIX_H #define MATRIX_H #include <iostream> #include <iomanip> #include <ctime> class Matrix { private: int **data; int m; int n; public: Matrix(int m, int n) { this->m = m; this->n = n; this->data = new int *[this->m]; for (int i = 0; i < this->m; i++) { this->data[i] = new int[this->n]; for (int j = 0; j < this->n; j++) { this->data[i][j] = 0; } } } Matrix(Matrix& matrix) : Matrix(matrix.m, matrix.n) { for (int i = 0; i < this->m; i++) { for (int j = 0; j < this->n; j++) { this->data[i][j] = matrix.data[i][j]; } } } ~Matrix() { for (int i = 0; i < this->m; i++) { delete[] data[i]; } delete[] data; } void fill_matrix_by_random() { srand((unsigned int)time(nullptr)); for (int i = 0; i < this->m; i++) { for (int j = 0; j < this->n; j++) { data[i][j] = rand() % 10; } } } double *gauss() const { if (this->m < this->n - 1) std::cout << "Solution is impossible"; else { double *result = new double[this->m], **buffer = new double *[this->m], temp; for (int i = 0; i < this->m; i++) { buffer[i] = new double[this->n]; for (int j = 0; j < this->n; j++) { buffer[i][j] = (double)this->data[i][j]; } } int k; for (int i = 0; i < this->m; i++) { temp = buffer[i][i]; for (int j = m; j >= i; j--) { buffer[i][j] /= temp; } for (int j = i + 1; j < m; j++) { temp = buffer[j][i]; for (k = m; k >= i; k--) { buffer[j][k] -= temp * buffer[i][k]; } } } result[m - 1] = buffer[m - 1][m]; for (int i = m - 2; i >= 0; i--) { result[i] = buffer[i][m]; for (int j = i + 1; j < m; j++) { result[i] -= buffer[i][j] * result[j]; } } return result; } } Matrix operator*(const Matrix& matrix) const { if (this->n != matrix.m) throw "Multiplication is impossible for these matrixes"; else { Matrix result(this->m, matrix.n); for (int i = 0; i < result.m; i++) { for (int j = 0; j < result.n; j++) { int temp = 0; for (int k = 0; k < this->n; k++) temp += this->data[i][k] * matrix.data[k][j]; result.data[i][j] = temp; } } return result; } } friend std::istream& operator>>(std::istream& in, const Matrix& matrix) { for (int i = 0; i < matrix.m; i++) { for (int j = 0; j < matrix.n; j++) { in >> matrix.data[i][j]; } } return in; } friend std::ostream& operator<<(std::ostream& out, const Matrix& matrix) { for (int i = 0; i < matrix.m; i++) { for (int j = 0; j < matrix.n; j++) { out << std::setw(3) << matrix.data[i][j] << " "; } out << std::endl; } return out; } }; #endif // MATRIX_H Source.cpp #include <iostream> #include <conio.h> #include "Matrix.h" using namespace std; void main() { Matrix matrix1(4, 3), matrix2(3, 2); matrix1.fill_matrix_by_random(); matrix2.fill_matrix_by_random(); Matrix matrix3 = matrix1 * matrix2; cout << matrix1 << endl << " *" << endl << endl << matrix2 << endl << " =" << endl << endl << matrix3 << endl; cout << "Input number of variables:" << endl; int num; cin >> num; Matrix matrix4(num, num + 1); cout << endl << "Input coefficients:" << endl; cin >> matrix4; double *result = matrix4.gauss(); cout << endl << "Result:" << endl; for (int i = 0; i < num; i++) cout << result[i] << " "; cout << endl; _getch(); } Результат виконання програми /
Антиботан аватар за замовчуванням

30.03.2016 11:15

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!