Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
report.docx
Скачиваний:
119
Добавлен:
28.03.2015
Размер:
1.47 Mб
Скачать
      1. Метод Гаусса с выбором главного элемента

Таблица идентификаторов

В таблице 5 приведены основные идентификаторы, используемые в программе, реализующей метод Гаусса с выбором главного элемента на языке С++.

Таблица 5 – Идентификаторы для метода главных элементов

a

Исходная матрица коэффициентов СЛАУ

b

Столбец свободных членов

koef

Переменная для сохранения промежуточного множителя строки

Код программы:

#include "stdafx.h" #include <iostream> using namespace std; int main() { const int n = 3; double det_k = 1; double a[n][n]; double b[n]; cout.precision(3); for(int i=0; i<n; i++) { cout << "input string " << i+1 << endl; for(int j=0; j<n; j++) { cout << "\telemet " << j+1 << ": "; cin >> a[i][j]; }; }; for(int i=0; i<n; i++) cin>>b[i]; for(int i = 0; i < n; i++) { for(int j = i+1; j < n; j++) { double koef = a[i][i] / a[j][i]; det_k *= koef; for(int k = i; k < n; k++) { a[j][k] *= koef; } b[j] *= koef; } for(int j = i+1; j < n; j++) { for(int k = i; k < n; k++) { a[j][k] -= a[i][k]; } b[j] -= b[i]; } } cout<<endl<<"Triangle matrix:\n"; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) cout<<a[i][j]<<" "; cout<<" | "<<b[i]<<endl; } for(int i = n-1; i > 0; i--) { for(int j = 0; j <= i-1; j++) { double koef = a[i][i]/a[j][i]; det_k *= koef; for(int k = 0; k < n; k++) a[j][k] *= koef; b[j] *= koef; } for(int k = 0; k < i; k++) { a[k][i] -= a[i][i]; b[k] -= b[i]; } }

cout<<endl<<"Diag matrix:\n"; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) cout<<a[i][j]<<" "; cout<<" | "<<b[i]<<endl; } cout<<"Solve:\n"; for(int i = 0; i < n; i++) { cout<<"x"<<i<<" = "<< b[i]/a[i][i]<<endl; } return 0; }

На рисунках 2.9 и 2.10 показаны результаты работы программы, реализующей метод Гаусса с выбором главного элемента на языке С/С++. Программа предлагает построчно ввести коэффициенты при неизвестных, затем заполнить столбец свободных членов. После чего на экран выводится треугольная, затем диагональная матрица и решение введенной системы.

Пример работы программы:

Рисунок 2.9 - окно с результатом работы программы, реализующей метод Гаусса с выбором главного элемента на языке С/С++ (Король)

Рисунок 2.10 - окно с результатом работы программы, реализующей метод Гаусса с выбором главного элемента на языке С/С++ (Скворцова)

      1. Метод квадратных корней

Таблица идентификаторов

В таблице 6 приведены основные идентификаторы, используемые в программе, реализующей метод квадратных корней на языке С++.

Таблица 6 – Идентификаторы для метода квадратных корней

matrix

Исходная матрица

t

Матрица, составленная из 2х транспонированных между собой матриц

x1, x2, x3

Коэффициенты решения

sum

Переменные, необходимые для сохранения суммы промежуточных вычислений

Код программы:

#include<iostream> #include<complex> #include<math.h> using namespace std; int main() { while(true) { cout.precision(4); //double matrix[3][4]; complex<double>** matrix=new complex<double>*[3]; for(int i=0; i<3; i++) matrix[i]=new complex<double>[4]; cout << "Fill matrix:" << endl; for(int i=0; i<3; i++) { cout << "String " << i+1 << endl; for(int j=0; j<3; j++) { cout << "\telement " << j+1 << ": "; cin >> matrix[i][j]; }; }; cout << "Fill free members:" << endl; for(int i=0; i<3; i++) { cout << "Coll " << i+1 << ": "; cin >> matrix[i][3]; }; complex<double>** t=new complex<double>*[3]; for(int i=0; i<3; i++) t[i]=new complex<double>[4]; t[0][0]=pow(matrix[0][0], (double)1/2); for(int j=1; j<4; j++) t[0][j]=matrix[0][j]/t[0][0]; for(int i=1; i<3; i++) { complex<double> sum(0.0, 0.0); for(int k=0; k<i; k++) { sum=sum+pow(t[k][i],2.0); }; t[i][i]=pow(matrix[i][i]-sum,(double)1/2); for(int j=i+1; j<4; j++) { complex<double> sum(0.0,0.0); for(int k=0; k<i; k++) { sum=sum+(t[k][i]*t[k][j]); }; t[i][j]=(matrix[i][j]-sum)/t[i][i]; }; }; for(int i=0; i<3; i++) { for(int j=0; j<4; j++) cout << t[i][j] << "\t"; cout << endl; }; complex<double> x1(0.0,0.0); complex<double> x2(0.0,0.0); complex<double> x3(0.0,0.0); x3=t[2][3]/t[2][2]; x2=(t[1][3]-t[1][2]*x3)/t[1][1]; x1=(t[0][3]-t[0][2]*x3*t[0][1]*x2)/t[0][0]; }; system ("pause"); return 0; }

На рисунке 2.11 показан результат работы программы, реализующей метод квадратных корней на языке С/С++. Программа предлагает построчно ввести коэффициенты при неизвестных, затем заполнить столбец свободных членов. После чего результат выводится на экран.

Пример работы программы:

Рисунок 2.11 - окно с результатом работы программы, реализующей метод квадратных корней на языке С/С++ (Король)

      1. Схема Халецкого

Таблица идентификаторов

В таблице 7 приведены основные идентификаторы, используемые в программе, реализующей схему Халецкого на языке С++.

Таблица 7 – Идентификаторы для схемы Халецкого

matrix

Исходная матрица

t

Матрица, составленная из нижней треугольной и верхней треугольной с единичной диагональю

x1, x2, x3, x4

Коэффициенты решения

sum

Переменные, необходимые для сохранения суммы промежуточных вычислений

Код программы:

#include<iostream> using namespace std; int main() { while(true) { cout.precision(4); double** matrix=new double*[4]; for(int i=0; i<4; i++) matrix[i]=new double[5]; cout << "Fill matrix:" << endl; for(int i=0; i<4; i++) { cout << "String " << i+1 << endl; for(int j=0; j<4; j++) { cout << "\telement " << j+1 << ": "; cin >> matrix[i][j]; }; }; cout << "Fill free members:" << endl; for(int i=0; i<4; i++) { cout << "Coll " << i+1 << ": "; cin >> matrix[i][4]; }; double** t=new double*[4]; for(int i=0; i<4; i++) t[i]=new double[5]; for(int i=0; i<4; i++) t[i][0]=matrix[i][0]; for(int j=1; j<5; j++) t[0][j]=matrix[0][j]/t[0][0]; for(int i=1; i<4; i++) { for(int j=1; j<=i; j++) { double sum=0.0; for(int k=0; k<j; k++) { sum=sum+t[i][k]*t[k][j]; }; t[i][j]=matrix[i][j]-sum; }; for(int j=i+1; j<5; j++) { double sum=0.0; for(int k=0; k<i; k++) { sum=sum+t[i][k]*t[k][j]; }; t[i][j]=(matrix[i][j]-sum)/t[i][i]; }; }; for(int i=0; i<4; i++) { for(int j=0; j<5; j++) cout << t[i][j] << "\t"; cout << endl; }; double x4=t[3][4]; double x3=t[2][4]-t[2][3]*x4; double x2=t[1][4]-t[1][2]*x3-t[1][3]*x4; double x1=t[0][4]-t[0][1]*x2-t[0][2]*x3-t[0][3]*x4; cout << x1 << "_" << x2 << "_" << x3 << "_" << x4 << endl; };

system(“pause”);return0; }

На рисунках 2.12 и 2.13 показаны результаты работы программы, реализующей схему Халецкого на языке С/С++. Программа предлагает построчно ввести коэффициенты при неизвестных, затем заполнить столбец свободных членов. После чего на экран выводится решение введенной системы.

Пример работы программы:

Рисунок 2.12 - окно с результатом работы программы, реализующей схему Халецкого на языке С/С++ (Король)

Рисунок 2.13 - окно с результатом работы программы, реализующей схему Халецкого на языке С/С++ (Скворцова)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]