- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
Matrix Matrix::inverse ()
{
Matrix Temp;
Matrix A;
Matrix AL(4,4);
int c1,c2;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
c1 = 0;
for (int k = 0; k < 5; k++)
{
if (k == i) continue;
c2 = 0;
for (int l = 0; l < 5; l++)
{
if (l == j) continue;
AL[c1][c2] = array[k][l];
c2++;
}
c1++;
}
A[i][j] = pow(-1,static_cast<double>(i + j + 2))*AL.determinant();
}
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
Temp[i][j] = 1/determinant()*A[i][j];
}
return Temp;
}
1. размеры A, Temp полагаю лучше инициализировать сразу.
2. необходимость создания матрицы меньшего размера вопрос спорный - ну и черт с ней.
3. pow(-1,static_cast<double>(i + j + 2)) - а подумать?
4. строка 38. 1/determinant() внутри цикла. офигенно.
5. в дополнение - тогда и Temp не понадобится.
Правда, есть шанс, что вызов детерминанта компилятор закеширует.
с какой радости?
Всего лишь не верное утверждение. Признак чистоты функции не в константности возвращаемого значения, если посмотреть на функцию постом выше.
>DirtyFffuuu.
>Dirty
Надеюсь языки знаете.
>Это необходимое, но не достаточное условие.
>Это необходимое
Оно не необходимое. И оно не достаточное.
Функция может быть как чистой, так и не чистой, но при это возвращает константу: Константа - понятие относительное, как видишь из этого примера. Слову "константа" места в определении чистой функции нет. Ты не знаешь определение чистой функции, по всему видно.
> Оно не необходимое
ты, похоже, не в ладах с математикой, говно.
Пруф?
> Оно не необходимое
Раз эта функция может быть как чистой, так и грязной, и не возвращает константу. => Это не необходимое правило для чистых функций.
Ты только в своем последнем посте наконец понял, что константа - это свойство, в данном случае, возвращенной переменной, а не функции. Именно поэтому слово константа не может участвовать в определении чистой функции.
>в данном контексте (функция без параметров, возвращающая число)
>возвращающая число
Ну если у тебя функция ещё и только числа возвращает, но не может другие типы, то почему ты мне это подсовывал как определение чистой функции без параметров?
Ну ты и еблан... Это как раз означает, что условие не является достаточным.
> что константа - это свойство, в данном случае, возвращенной переменной, а не функции
Ты сам то понял, что сморозил?
> Ну если у тебя функция ещё и только числа возвращает
Да, блядь, determinant() возвращает число, ты не знал?
> подсовывал как определение
Где ты увидел определение?
> только числа возвращает
Чистая функция без параметров может с тем же успехом возвращать списки фиксированной структуры, ну ты понял
> ну ты понял
кого я обманываю....
А казался уравновешенным и серьёзным человеком. Я был о тебе более высокого мнения. Ты меня разочаровал.
>Это как раз означает, что условие не является достаточным.
Или ты не уловил суть или ничего не смыслишь в "необходимом и достаточном условии".
Пусть CR - утверждение, что мы возвращаем константу. Пусть CF - утверждение, что функция чистая.
Ты сказал:
>функция без аргументов чиста ТОГДА, когда она возвращает константу. Это необходимое, но не достаточное условие.
Необходимое условие означает:
!CR -> !CF.
Опровергаю твоё утверждение !CR -> !CF.:
int DirtyFffuuu(void) - константу не возвращает, то есть !CR, но при этом она чистая: CF. То есть !CR !-> CF. Но по твоему утверждению !CR -> !CF. Как видишь противоречие на лицо, ну если ты хоть немного знаешь математику.
>Ты сам то понял, что сморозил?
Ну а ты не понял. Я это понял. Ну ты понел.
>Где ты увидел определение?
Согласен, не определение, но это достаточное условие. А оно, как видишь. Не верно.
>Чистая функция без параметров может с тем же успехом возвращать списки фиксированной структуры, ну ты понял
КО? И константную структуру, да. И что? Ты хотел поразить меня своими императивными знаниями?
я такой и есть, ты просто доставляешь мне лулзы
> int DirtyFffuuu(void) - константу не возвращает, то есть !CR, но при этом она чистая
> Dirty
> она чистая
По-моему, ты обосрался, и всячески стараешься это скрыть за умными словами.
> она чистая
Согласен. Не верно назвал. Хорошо переименую:
int CleanFffuuu(void) - константу не возвращает, то есть !CR, но при этом она чистая: CF.
Так стало понятнее? Не важно как функция названа. Главное - какая она на самом деле. Если ты после переименования все ещё не выезжаешь простую логику, то могу повторить простое "математическое" доказательство ещё раз.
Неважно кто тебя посылает нахуй. Главное - что ты пидарасина считаешь разведение унылой дисскусии ни о чем "успешным троллингом", а в реале я вижу тебя как терпеливого хуесоса, несущего ахинею и рефрешащего говнокод в ожидании что кто-нибудь да ответит на твой бред...
> Надеюсь языки знаете.
К твоему сведению, обезьяна, clean - это сортиры драить, для чистых функций используется слово PURE.
сосни хуйца, неуч
только детерминистская функция так себя ведет
В функциях, не меняющих состояние класса (то есть с атрибутом const&) можно заменять на константы обращения к функциям с тем же атрибутом, если вся грязь этих функцию лежит в обращениях к классу (т.е. функции локально чисты).
Не может, если сделать критическую секцию.
A := B.ChangeCell(i, j, NewValue)
и дальше B нигде не используется, и внутри метода ChangeCell первой же строкой написано Result:=*This, то можно сразу писать B на место A.
Но опять же, в многопоточной программе эта оптимизация нарушит логику, то есть надо думать, как бы эту оптимизацию подружить с потоками.
В печень ему!^W^W^W В данном алгоритме все равно матрицу меняем, можно сразу копировать и в чужую область видимости не открываться.
Ты всеж погугли expression elimination и пойми, когда применима эта оптимизация, а когда нет. Нечего голословно что-то утверждать.
Ну если не умеешь программировать, то да.
ССЗБ
Это из серии, что оптимизация лишнего вызова конструктора-деструктора может изменить логику программы.
Так вот, если из-за этого меняется логика, то пейсатель конструктора ошибся.
"Все проблемы от незнания мат части." (c)
Материальная точка либо движется, либо нет. Третьего не дано.
Но всегда можно взять другую систему отсчета, где движущаяся точка стоит.
"Все проблемы от незнания мат части." (c)
Может с твоим мозгом - да.
>когда следующая функция не будет чистой?
Она чиста всегда.
не надо полагаться на то, что компилятор умнее тебя, будет что то там кешировать и ты со всем этим охуенно взлетишь
написал ему "тут должна вызываться функция", рассчитывай, что тупой компилятор тут вызовет функцию
а то привыкли, понимаешь
Расскажи нам лучше ПОЛИМОРФИЗМ В ФИЗИКЕ!
>Материальная точка либо движется, либо нет. Третьего не дано.
>Но всегда можно взять другую систему отсчета, где движущаяся точка стоит.
Как бы ты с помощью портала выебал себя в жопу? Или не стоит?
Вот это: чистая функция?
Но стопудово скоро он прожует то говно, которым его накормили и вернется.
Соскучится же за привычным вкусом во рту.
правда, однопоточное
поэтому зла не держу
ты столько раз фейлился в школьных задачах, что твое мнение о профессиональном программировании даже со спортивной точки зрения никому не интересно
http://govnokod.ru/8426#comment117910
час дня, почему не в школе? природоведение закончилось раньше?
по беглому обзору апи в rtl она скорее похожа на стандартную библиотеку старичка Си
и да, буст кому то может и сторонний, а для кого то такой же стандартный, потому что используется в 100% С++ проектов на работе
правдивость какого-либо утверждения обратно пропорциональна удаленности утверждающего от обьекта обсуждения
есть ли во "вменяемой" библиотеке для дельфей то, что используется в работе каждый день - хотя бы контейнеры, обеспечивающие ожидаемую эффективность под конкретную задачу?
интересует контейнер со сложностью доступа к i элементу за O(1)
контейнер с сложностью вставки в начало, конец и середину за O(1)
контейнер с сложностью поиска элемента по своему ключу в контейнере за O(logN) или лучше и, при этом, сложностью вставки лучше O(N)
алгоритмы сортировки, поиска по этим контейнерам
единообразие работы с ними
да есть такая проблема - в старых версиях дельфи приходилось делать самому:(
Ооооо. Да ты над проектами серьёзными не работал.
я матан вообще стороной стараюсь обходить.
Если тебе не приходилось, то это не значит, что другим не приходилось.
>98% программистов сталкиваются с этой задачей наверное только в студенческие годы
Это твоё утверждение полностью голословно. Или подтверди статистикой или не зачет.
2. с чего я какому-то гавну должен что-то доказывать?
Формочки клепаешь и странички верстаешь? Зачет.
import Numeric.LinearAlgebra -- hmatrix
inv $ (2><2) [1,2,0,1] -- выведет [1,-2,0,1]
вот приведенный выше код, мать его, работает в 1 поток, поэтому сливает на больших матрицах реализациям в том же Maple, поэтому нужно искать другие варианты
в любом случае, С++ не самый удобный язык для математиков
hmatrix реализована с помощью GSL, BLAS and LAPACK, так что полагаю, сравнимо.
> самостоятельно параллелится на доступные вычислительные ресурсы?
Удивился бы). А разве обратная матрица легко параллелится? (для такой задачи надо что-то вроде низкоуровнего mpi).
на маленьких матрицах мапл, конечно, сливал
проверял банальным образом - собрал из этого кода dll и подцпелял в мапле, смотрел мапловское время использования обоих способов на одинаковых матрицах
пришлось погуглить алгоритмы распараллеливания вычисления обратной матрицы, понял, что они существуют, но за пару вечеров я это не сотворю, на чем и остановился
это понятно, имелось ввиду, что это нетривиально
На это натыкались: http://www.mcs.anl.gov/research/projects/mpi/libraries.html? (scalapack).
Возможно, есть пакеты и в дистрибутивах gnu/linux.
создаем матрицу для результата и сразу инициируем её единичной матрицей
подготавливаем матрицу перестановок соответствующего размера
двумя методами проводим LU-разложение и получаем обратную матрицу
никаких магических чисел и ограничений по размеру
Почему?
2. Личные настройки
3. Уведомлять меня о новых комментариях к моему говнокоду := Нет, прекратите это немедленно!
4. ...
5. PROFIT!