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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2014, 13:09   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Диагональное преобладание

Код:
 public bool diagonalDominating()
        {
            double sum = 0;
 
            for (int i = 0; i < size; i++)
                for (int j = 0; j < size; j++)
                    if(i != j)
                        sum += Math.Abs(a[i][j]);

 
            for (int i = 0; i < size; i++)
                if (Math.Abs(a[i][i]) < sum)
                    return false;
 
            return true;
        }
Написал такую функцию по этому https://ru.wikipedia.org/wiki/%D0%94...BD%D0%B8%D0%B5 алгоритму.

Видимо неправильно закодил, помогите исправить.
Praud вне форума Ответить с цитированием
Старый 27.08.2014, 15:17   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Можно например как вариант так сделать...
Код:
 public bool diagonalDominating()
 {
	double sum = 0;
	bool flag = true;
	
	for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                if(i != j) {
		    sum += Math.Abs(a[i][j]);
		}
	    }
	}
 
        for (int i = 0; i < size; i++) {
            if (Math.Abs(a[i][i]) < sum) {
                flag = false;
		break;
	    }
	}
 
    return flag;    
}
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 27.08.2014 в 15:19.
Bugrimov вне форума Ответить с цитированием
Старый 27.08.2014, 15:45   #3
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

А смысл? Это же то же самое...

Цитата:
Видимо неправильно закодил, помогите исправить.
Контрпример в студию!
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 27.08.2014, 15:48   #4
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Ввожу такую матрицу.

4,2 2,3 1,3
-1,3 7,2 5,4
2,3 5,1 11,2


Вызываю так..
Код:
if (arr.diagonalDominating())
// действие
else // сообщение об ошибке
Вылазит ошибка. Хотя в онлайн калькуляторе решение выдает.
P.S Эта проверка для решения слау методом Зейделя
Praud вне форума Ответить с цитированием
Старый 27.08.2014, 20:22   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Ребят, помогите. Одна проверка, а столько проблем.
Praud вне форума Ответить с цитированием
Старый 27.08.2014, 20:35   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Матрица 6x3
А у Вас size везде один
Poma][a вне форума Ответить с цитированием
Старый 27.08.2014, 21:00   #7
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Матрица 3х3, там double-значения же.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 27.08.2014, 21:00   #8
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

где вы увидели 6х3?

Матрица 3х3.

4.2 2.3 1.3
-1.3 7.2 5.4
2.3 5.1 11.2
Praud вне форума Ответить с цитированием
Старый 27.08.2014, 21:43   #9
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Цитата:
Вылазит ошибка. Хотя в онлайн калькуляторе решение выдает.
Дайте ссылку тогда на этот калькулятор...

По идеи, 2.3+1.3+1.3+5.4+2.3+5.1 = 17.7
Все числа в диагонали меньше суммы остальных элементов. Значит должно выдавать false, не?
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 27.08.2014, 22:01   #10
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Да, вы все верно говорите. Оно и возвращает false.

http://math.semestr.ru/optim/zeidel.php

Может оно автоматически преобразовывает вводимую матрицу?
Praud вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
провести диагональное сечение ulechka128 Помощь студентам 2 25.12.2011 11:43