LINUX.ORG.RU

обращение матрицы методом Гаусса.

 , ,


0

2

народ, встала практическая сабжевая задача, я такого давно не писал, может у кого лаба завалялась? Поделитесь пожалуйста. Я сам писал, но это было много лет назад(не могу найти).

У меня вместо чисел лютая ☣, но она вроде составляет поле с единицей и нулём, сложением, умножением, и однозначным делением. Этого вроде должно быть достаточно для сабжа?

PS: интересует только исходники C/C++.

PPS: ценные мысли приветствуются.

PPPS: борщеедов-скобочников просьба не беспокоится. Задача практическая, сидите на диване далее. Я вас спрошу, если надо будет.


Ответ на: комментарий от anonymous

нет, спасибо. Мне в родной сишке-то не разобраться. Говорю же, смутно помню, как меня дрочили этими СЛАУ, меня от них до сих пор в сон клонит.

emulek
() автор топика

Тебе делать нефиг? Зачем такое извращение использовать? А если матрица вырожденная (что бывает в реальности в 99.99% случаев)? Гаусс тут в задницу.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

Думаю что для этой задачи он больше подойдет. Ведь ТС просто очень сильно хочет потрахаться. В противном случае ответ ищется за три секунды или берется LAPACK.

ebantrop
()
Ответ на: комментарий от Reset

Я вообще GSL пользуюсь, там оно все есть. Через обертки.

Eddy_Em ☆☆☆☆☆
()

раньше читали, потом гуглили, теперь выродились в тупизну и начали спрашивать приматство. язабан

anonymous
()

PS: интересует только исходники C/C++.

А на фортране не подойдёт? Ведь их можно использовать с g++.

Deleted
()
Ответ на: комментарий от Eddy_Em

И не говори - «реальная задача». Ага и ещё скобочников обидел.

stopitplease
()
Ответ на: комментарий от Eddy_Em

Тебе делать нефиг? Зачем такое извращение использовать?

потом покажу.

А если матрица вырожденная

fail

(что бывает в реальности в 99.99% случаев)? Гаусс тут в задницу.

матрица специально подобрана так, что-бы она не вырождалась. Этот вопрос требует отдельного подробного изучения, и математики сейчас над этим работают. Мне не требуется заниматься такой ерундой, я могу обратить матрицу более мелкого порядка если моя вырождается(это всегда возможно), а оставшиеся коэффициенты придётся подбирать перебором. Это уже другая проблема.

В изначальной матрице нет нулей, и она по возможности «взаимно-простая». Т.е. вероятность получения линейно-зависимых строк-столбцов минимальна. Т.ч. случай вырождения ИМХО маловероятен.

И да, мне не нужны ВСЕ решения. Мне достаточно получить(точное) решение с вероятностью 95%. Это вполне реально.

PS: Гаусс не в задницу. Мне подойдёт «частично единичная» матрица. Разве есть иные способы такое сделать, кроме гаусса?

emulek
() автор топика
Ответ на: комментарий от Eddy_Em

и да: зачем велосипедить, когда есть BLAS?

ещё раз: у меня НЕ ЧИСЛА в матрице. Почти единственная связь с числами, так это то, что оно образует поле.

Были-бы числа, я-бы не стал заниматься велосипедизмом.

emulek
() автор топика
Ответ на: комментарий от ebantrop

Ведь ТС просто очень сильно хочет потрахаться.

не, детка. Это ты хочешь. А я уже вовсю за**ался.

В противном случае ответ ищется за три секунды

ну дык и найди. Я тебе скажу спасибо.

emulek
() автор топика
Ответ на: комментарий от anonymous

раньше читали, потом гуглили, теперь выродились в тупизну и начали спрашивать приматство. язабан

пошёл ты. Я гуглил и читал. Если не можешь помочь, иди нафиг отсюда.

emulek
() автор топика
Ответ на: комментарий от no-such-file

А поле-то конечное или нет?

да, конечное.

Поля достаточно.

я тоже так думаю.

emulek
() автор топика

у тебя матрица насколько большая?

а по теме все ж просто довольно. Быстрее написать будет самому, чем подгонять готовый исходник под себя.

dikiy ★★☆☆☆
()
Ответ на: комментарий от Deleted

А на фортране не подойдёт?

давай. Я его правда лет 20 не видел. Попытаюсь разобраться, раз никто другой не помогает.

emulek
() автор топика
Ответ на: комментарий от dikiy

у тебя матрица насколько большая?

маленькая. 6×6, ну максимум 30×30. Но не разряжённая, а наоборот «очень плотная». Я не знаю, как это у математиков называется.

а по теме все ж просто довольно. Быстрее написать будет самому, чем подгонять готовый исходник под себя.

я написал. A*A¯¹≠E. Где-то я в чём-то ошибся... Т.ч. мне подгонять не нужно, нужно просто посмотреть, как другие делают.

Думал быстрее спросить на ЛОРе, чем переделывать в числа, и искать ошибку как обычно.

Ну если никто не знает, то буду сам ковырять свой код в double.

emulek
() автор топика
Ответ на: комментарий от anonymous

спасибо. Нашёл сырцы здесь: http://www.ginac.de/reference/matrix_8cpp_source.html Не совсем то, что хотелось-бы, но тоже годно. Ещё спасибо за направление, в котором надо копать. Я как-то про CAS не догадался погуглить...

emulek
() автор топика
Ответ на: комментарий от anonymous

Почему ты сравниваешь Haskell с Brainf*ck'ом?

А ты не находишь в них что-то общее? Предназначение, целевую аудиторию...

Pavval ★★★★★
()

Меня вот что всегда интересовало в ненавистниках хм, «борщелиспа», «скобочников», и т.п.

Почему когда дело доходит до них, когда дело доходит до «show me the code», до их вопросов - вот все эти их вопросы и код оказываются на уровне в лучшем случае старших классов средней школы. «Как перемножить матрицы?», «Как вывести буковки на консоль?» и так далее.

Как вот объясняется в их головах такой парадокс, что лисперы, да функциональщики вообще, ну и тому подобные люди, являющиеся объектами их ненависти - оказываются вполне себе состоявшимися людьми, с доходами выше среднего(некоторые даже с собственным бизнесом), оказываются людьми, не обделенными среди прочего вниманием противоположного пола, а т.н. «мамкины борщи», «нищебродство», «задротство» и одиночество - оказываются суровой реальностью как раз этих самых ярых ненавистников.

Сколько же этим самым ненавистникам нужно создать у себя в голове иллюзий, чтобы вообще хоть как-то не сойти с ума, или там, не умереть от зависти?

lovesan ★★
()
Ответ на: комментарий от emulek

А я уже вовсю за**ался.

Истинный борщевик хитер и ленив. Настоящий борщевик никогда не будет так делать стоя обутым в ласты в гамаке. Правельный борщевик хлебнет борщеца и сделает такое, например. Это в борще-язычке математика для матриц 4 на 4: http://pastebin.com/ZxHR0Vvp

ebantrop
()
Ответ на: комментарий от lovesan

Кто не ел борща — никогда не познает дзен и не обретет душевный покой.

ebantrop
()

то есть ты не можешь реализовать метод Гаусса, но при этом свое авторитетное мнение суешь в каждый тред? ну ппц...

Waterlaz ★★★★★
()
Ответ на: комментарий от ebantrop

Правельный борщевик хлебнет борщеца и сделает такое, например. Это в борще-язычке математика для матриц 4 на 4: http://pastebin.com/ZxHR0Vvp

бля, зачем ты такое на ночь глядя выкладываешь? я чуть не обосрался.

dikiy ★★☆☆☆
()
Ответ на: комментарий от lovesan

Почему когда дело доходит до них, когда дело доходит до «show me the code», до их вопросов - вот все эти их вопросы и код оказываются на уровне в лучшем случае старших классов средней школы. «Как перемножить матрицы?», «Как вывести буковки на консоль?» и так далее.

детка, у меня таких вопросов не было. Перемножить матрицы и вывести буковки я и сам могу.

Как вот объясняется в их головах такой парадокс, что лисперы, да функциональщики вообще, ну и тому подобные люди, являющиеся объектами их ненависти - оказываются вполне себе состоявшимися людьми, с доходами выше среднего(некоторые даже с собственным бизнесом), оказываются людьми, не обделенными среди прочего вниманием противоположного пола

детка, эта вся хрень ну никак не зависит от навыков в написании кода. Поверь. Скорее даже наоборот, если ты будешь делать деньги и бегать за бабами, то времени на код тупо не останется.

Сколько же этим самым ненавистникам нужно создать у себя в голове иллюзий, чтобы вообще хоть как-то не сойти с ума, или там, не умереть от зависти?

нет у меня никакой зависти. Мне просто не нужны сейчас советы бабников и менеджеров. Хоть они всех королев поимели, и все миллионы украли.

emulek
() автор топика
Ответ на: комментарий от Waterlaz

то есть ты не можешь реализовать метод Гаусса, но при этом свое авторитетное мнение суешь в каждый тред?

то есть ты можешь?

emulek
() автор топика

да, я тут слепил класс рациональных чисел, скормил его в матрицу, и нашёл таки ошибку.

Всем спасибо, тема решена.

emulek
() автор топика

Идея простая: приписываешь к исходной матрице справа единичную. Получаешь такую Nx(2N) прямоугольную. Методом элиминирования Гаусса приводишь левую половину (исходную матрицу) к единичной выполняя операции со строками. Автоматически у тебя в правой половину формируется обратная матрица. Работает в любом кольце отношений (quotient ring)

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

да идею-то я помню. Когда-то писал. Детали реализации забыл.

Уже разобрался. Теперь другим уже занимаюсь...

emulek
() автор топика
Ответ на: комментарий от dikiy

бля, зачем ты такое на ночь глядя выкладываешь? я чуть не обосрался.

Вот руками такое писать можно и обосраться.

ebantrop
()

emulek
не может написать Гаусса на 100 строк
не знает ничего, кроме сишки и крестов
не умеет гуглить

спешит поделиться своим компетентным мнением в каждой теме, мгновенно скатывая оную в тупняк

Лол.

mix_mix ★★★★★
()
Ответ на: комментарий от lovesan

Меня вот что всегда интересовало в ненавистниках хм, «борщелиспа», «скобочников», и т.п.

Почему когда дело доходит до них, когда дело доходит до «show me the code», до их вопросов - вот все эти их вопросы и код оказываются на уровне в лучшем случае старших классов средней школы. «Как перемножить матрицы?», «Как вывести буковки на консоль?» и так далее.

Как вот объясняется в их головах такой парадокс, что лисперы, да функциональщики вообще, ну и тому подобные люди, являющиеся объектами их ненависти - оказываются вполне себе состоявшимися людьми, с доходами выше среднего(некоторые даже с собственным бизнесом), оказываются людьми, не обделенными среди прочего вниманием противоположного пола, а т.н. «мамкины борщи», «нищебродство», «задротство» и одиночество - оказываются суровой реальностью как раз этих самых ярых ненавистников.

мне одно интересно, откуда у скобочников столько анальной боли? Вы никому нафиг не нужны?

emulek
() автор топика
Ответ на: комментарий от Eddy_Em

Тебе делать нефиг? Зачем такое извращение использовать? А если матрица вырожденная (что бывает в реальности в 99.99% случаев)? Гаусс тут в задницу.

УМВР. У меня что-то похожее на http://en.wikipedia.org/wiki/Vandermonde_matrix получилось в итоге. А именно http://en.wikipedia.org/wiki/Alternant_matrix Оно почти никогда не вырождается.

Фишка в том, что если один раз обратить матрицу, то можно потом на неё Over9000 раз умножать, из-за чего у меня получился огромный профит в скорости. Причём скорость самого обращения роли никакой не играет.

emulek
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.