|
|
|
BLAS - как инвертировать матрицу?
|
|||
|---|---|---|---|
|
#18+
Кто-нибудь может объяснить в простых словах/кинуть ссылку на примерчик: как, используя BLAS и LAPACK вычислить обратную матрицу? Вроде бы нужно использовать LU-разложение... но это все что я понял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 23:56 |
|
||
|
BLAS - как инвертировать матрицу?
|
|||
|---|---|---|---|
|
#18+
Нет, одного LU-разложения (хоть мыслите то Вы в правильном направлении) недостаточно. После того как оно (LU) выполнено, надо попросить соответствующий пакет решить систему линейных уражнений с матрицей правых векторов, представляющих из себя единичную матрицу. Ответ и будет обратной матрицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 01:45 |
|
||
|
BLAS - как инвертировать матрицу?
|
|||
|---|---|---|---|
|
#18+
Ну хоть кто-то откликнулся... я понимаю, что LU factorisation это только первый шаг, и примерно понимаю что делать дальше... у меня даже примерчик есть из книжки по линейной алгебре... Вопрос-то, как _именно_ привязать к этому делу эти чертовы BLAS и LAPACK...например, я не вижу вообще в этих библиотеках отдельной процедуры для LU разложения... только сказано, что оно _используется_ внутри процедур для решения систем лин.ур-ний. Т.е. нет ли тут кого, кто конкретно с этими библиотеками работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 02:19 |
|
||
|
BLAS - как инвертировать матрицу?
|
|||
|---|---|---|---|
|
#18+
Должен признаться что сам с этими пакетами не работал, но принимал участие в написании подобных. Так в нашем пакете была возможность вызова процедуры решения системы линейных алгебраических уравнений методом полного (бывает ещё и incomplete) LU разложения с возможностью передачи в процедуру не одного вектора правой части, а целой матрицы правых частей. Физически это соответствует тому, что Вы хотите решить не одну, а сразу несколько систем линейных уравнений с одной и той же матрицей, но разными правыми частями. Вообще то я бы ожидал что такая возможность существует и в BLAS и в LAPACK. Посмотрите внимательнее. Если это так, то подавайте на вход в соответствующую процедуру в качестве матрицы правых частей единичную матрицу - тогда на выходе в качестве решения получите матрицу обратную Вашей матрице. Если такой возможности в этих пакетах нет (что было бы странно), то обязательно должен быть режим в котором процедура выполняет только LU-разложение. Вызывайте процедуру в этом режиме один раз - она разложит матрицу на произведение нижнедиагональной и верхнедиагональной. Затем вызываете эту же процедуру в цикле n раз, но уже в режиме только решения СЛАУ и в качестве вектора правой части на i-том цикле итерации передаёте в процедуру вектор все элементы которого за исключением i-того нули, а i-тый равен единице. Это другая альтернатива. Посмотрите повмнимательней на интерфеис процедуры и почитайте описание входных/выходных параметров - Вам должно стать всё понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 18:49 |
|
||
|
BLAS - как инвертировать матрицу?
|
|||
|---|---|---|---|
|
#18+
О! Кажется, задребезжал свет... вот имеется там "LAPACK_GESV Procedures This procedure computes the solution to a real system of linear equations a * x = b where a is an n by n matrix and x and b are n by nrhs matrices" Т.о. если я подставлю в "b" единичную матрицу размером тем же, что и "а", то "х" и должна по определению быть обратной к "а"...? "Надо же, какие головы у них на болотах!" (с) Стругацкие :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 20:29 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=34671766&tid=1345941]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
203ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 538ms |

| 0 / 0 |
