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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2012, 21:39   #1
Евдокия
Новичок
Джуниор
 
Регистрация: 20.05.2012
Сообщений: 1
По умолчанию решение СЛАУ методом Гаусса с выбором главного элемента по столбцу (С++)

Доброго времени суток)
Написала код для решения СЛАУ простым метода Гаусса - все работало, попыталась добавить выбор главного элемента по столбцу - теперь выдает ерунду. Никак не могу найти ошибку... Помогите, пожалуйста)
З.Ы. не ругайтесь за вероятную нерациональность кода: я совсем чайник)

Код:
// решение СЛАУ методом Гаусса
#include <Carbon/Carbon.h>
#include "TApplication.h"
#include "TWindow.h"
#include "iostream.h"
#define NMAX 100

int main ()
{
	float s, a[NMAX][NMAX], f[NMAX], c[NMAX], y[NMAX], h[NMAX], r[NMAX], F[NMAX], A[NMAX][NMAX], helperF, helperA, maxValue;
	int n, i, j, k, l, maxIndex, g, d, m;
	// ввод матрицы 
	cout << "количество неизвестных:  ";
	cin >> n;
	
	for (i = 1; i <= n; i++)
	{
		
		for (j = 1; j <= n; j++)
		{
			
			cout <<  "a[" <<i<< "][" <<j<< "] = ";
			cin >> a[i][j];
		}
	}
	
	for (i = 1; i <= n; i++) 
	{
		cout <<  "f["<<i<<"]= ";
		cin >> f[i];
	}
	
	// создание дубликата исходной матрицы
	for (i = 1; i <= n; i++) 
	{
		for (j = 1; j <= n; j++) 
		{
			F[i] = f[i];
			A[i][j] = a[i][j];
		}
	}


	
	// прямой ход метода Гаусса
	for (i = 1; i <= n; i++) 
	{
		// выбор ведущего элемента столбца

		maxValue = a [i][i];
		maxIndex = i;
		for (m = i + 1; m <= n; m++) 
		{
			if (fabs(maxValue) < fabs(a[m][i]))
			{
				maxValue = a[m][i];
				maxIndex = k;
			}
			if (maxValue == 0) 
			{
			exit(0);
			}
			// перестановка столбцов
			if (i != maxIndex)
			{
				helperF = f[i];
				f[i] = f[m];
				f[m] = helperF;
			for (l = 1; l <= n; l++) 
			{
			helperA = a[i][l];		
			a[i][l] = a[m][l];
			a[m][l] = helperA;
			}
			}
		}
		
		// приведение к треугольному виду
		for (j = i + 1; j <= n; j++) 
		{
			
			c[j] = - (a[j][i] / a[i][i]);
			f[j] = f[j] + c[j] * f[i];
			for (k = 1; k <= n; k++) 
			{
				a[j][k] = a[j][k] + c[j] * a[i][k];
			}
		}
	}
    // обратный ход метода Гаусса
	y[n] = f[n] / a[n][n];
	for (i = n; i >= 1; i--) 
	{	
		s = 0;
		for (j = n; j > i ; j--)
		{
		s = s + a[i][j] * y[j];
		}
		y[i] = (f[i] - s) / a[i][i];
	}
	// вычисление вектора невязки
	for (i = 1; i <= n; i++) 
	{
		h[i] = 0;
		for (j = 1; j <= n; j++) 
		{
			h[i] = h[i] + y[j] * A[i][j];
		}
		r[i] = fabs (F[i] -  h[i]);
	}
		
	
	
	// вывод решений
	for (i = 1; i <= n; i++) 
	{
	cout << "y[" << i << "]=" << y[i] << "\n";
	}
	// вывод вектора невязки
	for (i = 1; i <= n; i++) 
	{
	cout << "r[" << i << "] = " << r[i] << "\n";
	}
	
}
Евдокия вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод гауса с выбором главного элемента по столбцу teemidov Паскаль, Turbo Pascal, PascalABC.NET 0 26.02.2012 14:01
Метод Гаусса с выбором главного элемента Fantom.as Общие вопросы C/C++ 2 17.02.2011 19:35
Метод Гаусса с выбором главного элемента Fantom.as Помощь студентам 1 16.02.2011 12:48
Метод Гаусса с выбором главного элемента для решения СЛАУ lira_slava Помощь студентам 3 21.05.2009 20:56
Решение СЛАУ методом Гаусса с выбором главного элемента МаXsim Помощь студентам 4 21.10.2008 19:04