Разница в хранении массивов Fortran и C? - PullRequest
1 голос
/ 17 апреля 2011

Я хочу вычислить декомпозицию qr, используя функцию F77_NAME (dgeqrf) из библиотеки Lapack в программе на c.

Для матрицы 3х3:

12.000000 -51.000000 4.000000
6.000000 167.000000 -68.000000
-4.000000 24.000000 -41.000000

Я получаю вывод 3x3 (комбинация матрицы R и некоторых векторов, используемых для построения Q) (линейная форма):

-52.545219, -0.790144, 0.061972, 165.895209, -70.906839, -0.520684, 27.328842, -31.566433, -23.015097

Затем я использую F77_NAME (dorgqr) из Lapack, чтобы извлечь матрицу Q, получить вывод 3x3 (линейная форма):

-0.228375, 0.970593, -0.076125, -0.618929, -0.084383, 0.780901, 0.751513, 0.225454, 0.619999

Это пример, взятый из википедии, и кажется, что мой Q отличается от википедии Q: http://en.wikipedia.org/wiki/QR_decomposition#Example_2

Может ли быть причиной различие между представлениями массивов fortran и c? Будет ли транспонирование на исходной матрице решить проблему?

1 Ответ

1 голос
/ 18 апреля 2011

Надеюсь, вы не ожидаете, что другие будут выполнять вашу работу. Поскольку вы почти ответили на свой вопрос, я не вижу смысла публиковать его. Также может быть полезно потратить некоторое время на чтение раздела часто задаваемых вопросов на этом сайте перед его использованием. Вы можете найти там полезную информацию.

Что касается ответа на вопрос:

Скорее всего, именно эта разница в представлении массива между C и Fortran и является причиной вашей проблемы. Смотрите это:

http://en.wikipedia.org/wiki/Row-major_order

Для получения общей информации о смешивании кода на языке Fortran и C это может быть полезно:

http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html

...