Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2017, 19:26   #1
vivatverum
Новичок
Джуниор
 
Регистрация: 02.04.2017
Сообщений: 1
По умолчанию метод простых итераций для слау

Здравствуйте! Пытаюсь реализовать метод простых итераций, все функции, которые работают с матрицей работают нормально, кроме самих итераций. Не могу понять, что не так. Подскажите в чем ошибка, пожалуйста.
Код:
#include <iostream>
#include <iomanip>
#include <cmath>
#define e 0,005
using namespace std;
class Matr
{
private:
	int size;
	double **mas;
	double *mas1;
public:
	Matr()
	{
		size = 0;
		mas = NULL;
		mas1 = NULL;
	}
	Matr(int l)
	{
		size = l;
		mas = new double*[l];
		for (int i = 0; i < l; i++)
			mas[i] = new double[l];
		mas1 = new double[l];
	}
	void Add()
	{
		for (int i = 0; i < size; i++)
			for (int j = 0; j < size; j++)
				cin >> mas[i][j];
		for (int i = 0; i < size; i++)
		{
			cin >> mas1[i];
		}

	}
	void Print()
	{
		for (int i = 0; i < size; i++)
		{
			for (int j = 0; j < size; j++)
			{
				cout << setw(4) << mas[i][j] << " ";
			}
			cout << " " << mas1[i] << endl;
		}
	}
	void Preob()
	{
		double temp = 0;
		for (int k = 0; k < size; k++)
		{
			for (int i = 0; i < size; i++)
			{
				temp = mas[i][i]*(-1);
				mas1[i] /= temp;
				for (int j = 0; j <= size; j++)
				{
					mas[i][j] /= temp;
				}
			}
		}
			for (int i = 0; i < size; i++)
			{
				mas1[i] *= -1;
				for (int j = 0; j < size; j++)
					mas[i][i] = 0;
			}
	}
	double Norma()
	{
		double sum = 0, max = 0;
			for (int i = 0; i < size; i++)
			{
				for (int j = 0; j < size; j++)
				{
					sum += fabs(mas[i][j]);
					if (sum > max) max = sum;
				}
				sum = 0;
			}
			return max;
	}
	double Pogr()
	{
		double eps = 0;
		double norm = Norma();
		if (norm >= 1) cout << "Метод может оказаться несходимым" << endl;
		else eps = (1 - norm) / norm;
		return eps;
	}
	void Itera()
	{
		double *x = new double[size];
		double *x0 = new double[size];
		double *E = new double[size];
		double max = 0;
		for (int i = 0; i < size; i++)
			x0[i] = mas1[i];
		do
		{
			for (int i = 0; i < size; i++)
			{
				x[i] = 0;
				for (int j = 0; j < size; j++)
				{
					x[i] += mas[j][i] * mas1[j];
				}
				x[i] += mas1[i];
				E[i] = fabs(x[i] - x0[i]);
			}
			max = 0;
			for (int i = 0; i < size; i++)
			{
				if (max <= E[i]) max = E[i]; x0[i] = x[i];
			}
		} while (max < Pogr());
		for (int i = 0; i < size; i++)
			cout << "x" << i + 1 << "=" << x[i] << " " << endl;
		delete[] x;
		delete[] x0;
		delete[] E;
	}
};
int main()
{
	setlocale(LC_ALL, "rus");
	int n;
	cout << "Введите количество уравнений:   ";
	cin >> n;
	Matr a(n);
	cout << "Введите матрицу коефициентов, потом столбец свободных членов:" << endl;
	a.Add();
	cout << endl << "Расширенная матрица:" << endl;
	a.Print();
	a.Preob();
	cout << endl << "Преображенная матрица" << endl;
	a.Print();
	cout << endl;
	a.Itera();
	cout << endl;
	system("pause");
	return 0;
}
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 02.04.2017 в 19:43.
vivatverum вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод простых итераций для решения СЛАУ (консоль -> форма) yurez_orsha C++ Builder 1 20.04.2015 11:59
Решение Слау методом простых итераций Medvedko0116 Помощь студентам 0 22.06.2011 19:25
мой метод простых итераций для СЛАУ nikozavr Общие вопросы C/C++ 0 05.06.2011 15:21
Pascal. Слау методом простых итераций. Shiza321 Помощь студентам 4 22.03.2010 21:08
Решение СЛАУ (метод простых итераций) XeN0N Помощь студентам 2 15.02.2009 21:33