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

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

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

Таблица 3 – Идентификаторы для метода простой итерации

matrix

Матрица коэффициентов исходной СЛАУ

oldResult, newResult

Результат последней и текущей итерации соответственно

eps

Величина погрешности

sum

Переменная, хранящая промежуточное значение суммы

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

#include<iostream> #include<stdio.h> #include<math.h> using namespace std; double eps=0.001; const int size=4; bool epsChecking(double* oldResult, double* newResult, int size) { bool res=false; for(int i=0; i<size; i++) if(fabs(newResult[i]-oldResult[i])>eps) res=true; return res; } int main() { double** matrix=new double*[size]; for(int i=0; i<size; i++) matrix[i]=new double[size+1]; cout << "Enter observational error: "; cin >> eps; FILE* f=freopen("input", "r", stdin); for(int i=0; i<size; i++) for(int j=0; j<size+1; j++) cin>>matrix[i][j]; for(int i=0; i<size; i++) { double sum=0.0; for(int j=0; j<size; j++) { if(i!=j) sum+=fabs(matrix[i][j]); }; if(fabs(matrix[i][i])<sum) { cout << "Error!" << endl; return 1; }; }; double* oldResult=new double[size]; double* newResult=new double[size]; for(int i=0; i<size; i++) oldResult[i]=0; int k=0; while(true) { for(int i=0; i<size; i++) { double sum=matrix[i][size]; for(int j=0; j<size; j++) if(i!=j) sum+=(-oldResult[j])*matrix[i][j]; newResult[i]=(sum)/matrix[i][i]; }; for(int i=0; i<size; i++) { cout << newResult[i] << " "; }; cout << endl; cout << endl; if(epsChecking(oldResult, newResult, size)) { for(int i=0; i<size; i++) oldResult[i]=newResult[i]; k++; } else { for(int i=0; i< size; i++) cout << newResult[i] << " "; cout << endl; return 0; }; };

system(“pause”);return0; }

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

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

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

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

      1. Метод Зейделя

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

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

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

matrix

Матрица коэффициентов исходной СЛАУ

oldResult, newResult

Результат последней и текущей итерации соответственно

eps

Величина погрешности

sum

Переменная, хранящая промежуточное значение суммы

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

#include<iostream> #include<stdio.h> #include<math.h> using namespace std; double eps=0.0001; const int size=3; bool epsChecking(double* oldResult, double* newResult, int size) { bool res=false; for(int i=0; i<size; i++) if(fabs(newResult[i]-oldResult[i])>eps) res=true; return res; } int main() { double** matrix=new double*[size]; for(int i=0; i<size; i++) matrix[i]=new double[size+1]; cout << "Enter observational error: "; cin >> eps; FILE* f=freopen("input", "r", stdin); for(int i=0; i<size; i++) for(int j=0; j<size+1; j++) cin>>matrix[i][j]; for(int i=0; i<size; i++) { double sum=0.0; for(int j=0; j<size; j++) { if(i!=j) sum+=fabs(matrix[i][j]); }; if(fabs(matrix[i][i])<sum) { cout << "Error!" << endl; return 1; }; }; double* oldResult=new double[size]; double* newResult=new double[size]; double koefs[size]; for(int i=0; i<size; i++) oldResult[i]=0; for(int i=0; i<size; i++) newResult[i]=0; int k=0; while(true) { for(int i=0; i<size; i++) { double sum=matrix[i][size]; for(int j=0; j<size; j++) { if(i!=j) sum+=(-newResult[j])*matrix[i][j]; }; newResult[i]=(sum)/matrix[i][i]; //oldResult[i]=newResult[i]; }; for(int i=0; i<size; i++) { cout << newResult[i] << " "; }; cout << endl; cout << endl; if(epsChecking(oldResult, newResult, size)) { for(int i=0; i<size; i++) oldResult[i]=newResult[i]; k++; } else { for(int i=0; i< size; i++) cout << newResult[i] << " "; cout << endl; return 0; }; }; return 0; }

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