определитель матрицы

Тема в разделе "WASM.A&O", создана пользователем XshStasX, 20 апр 2011.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Есть задача найти определитель матрицы.
    Есть N клиентов которые занимаются расчетами.
    Суть в том чтоб взять одну большую матрицу разбить на меньшые и отправить клиентам для обработки, а потом собрать результат в единое целое.

    Как правильно разбить матрицу при расчете определителя матрицы ??

    Пока только один вариант придумал а именно:
    если размер матрицы четный то ее можно разбить на более мелкие матрицы одинакового размера.
    Рассчитать их определители.
    Из полученных определителей собрать новую матрицу, и рассчитать ее определитель.

    Как быть с матрицами размера не четного размера ?


    Или вообще нужен другой подход??
     
  2. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Както так надо считать:

    http://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    XshStasX
    для общего случая - теорема Лапласа ??? нее ??
    причем тут четность ????
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    А что они реально огромные? Считать на гпу.
     
  5. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    XshStasX, используйте алгоритм приведения матрицы к верхнетреугольному виду и не мучайте себя...
    приходилось считать таким макаром матрицы 1000х1000 - все достаточно быстро...
     
  6. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    gorodon
    ты имеешь ввиду чтоб под главной диагональю матрицы 0 были?
    Как тогда правильно разбить матрицу чтоб каждый клиент мог кусочек ее обработать?
     
  7. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    У меня все в одном потоке работало и достаточно быстро. Но если хочется распараллелить, то надо не матрицу разбивать на куски и обрабатывать, а наоборот - действия над матрицей разбивать на части...

    Представим упрощенный алгоритм:

    for i=1 to N do
    for j=i+1 to N do
    k=a[j]/a
    As[j] = k*As[j]-As
    end;
    end;

    Где: As[j] = k*As[j]-As - действие над строкой
    for k=j to N do
    a[j][k] = k*a[j][k]-a[k]
    end;

    В данном алгоритме можно распараллелить действия над строками:
    for j=i+1 to N do
    k=a[j]/a
    As[j] = k*As[j]-As
    end;

    ... - разбить это на m частей:
    for j=i+1 to N2 ..
    for j=N3+1 to N3 ...
    for j=Nm+1 to N ...
    - каждый for будет выполняться в отдельном потоке (или, как вы выражаетесь - обрабатываться отдельным клиентом)