[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Определитель матрицы
ihaveabiggun
Задача: вычислить определитель матрицы NxN.

Пытался решать LU-разложением, но в алгоритме Википедии ошибки, по-моему, которые я не могу сам исправить и доработать алгоритм. На других ресурсах это разложении, вообще жутко описано.
Предложите, пожалуйста, либо нормальный алгоритм LU-разложения, либо какие можно использовать альтернативы?

Заранее спасибо!



Спустя 1 час, 32 минуты, 46 секунд (26.10.2011 - 01:25) imbalance_hero написал(а):
ihaveabiggun
На пхп?

Спустя 25 минут, 22 секунды (26.10.2011 - 01:50) ihaveabiggun написал(а):
Ну да - PHP
Я ведь создал вопрос именно в пхп теме

Спустя 25 минут, 13 секунд (26.10.2011 - 02:15) imbalance_hero написал(а):
ihaveabiggun
Понимаю, что приходится офф-топить, но по другому никак. Очень часто задают новые люди вопросы в разделе ПХП, которые к данном разделу не относятся вообще, поэтому лишь уточнил.
Я не знаю, но будем надеяться, что другие помогут.

Спустя 20 часов, 58 минут, 8 секунд (26.10.2011 - 23:14) ihaveabiggun написал(а):
Собственная проблема решена при помощи алгоритма метода Гаусса (приведения матрицы к ступенчатому виду).

Если кому надо, то вот алгоритм

и кусок программы:


//$n - размерность матрицы
// $a - двумерный массив с элементами матрицы (ключи начинаются с [1][1])


for ($k=1; $k<=$n-1; ++$k)
{
//обнуление
for ($i=$k+1; $i<=$n; ++$i)
{
for ($j=1; $j<=$n; ++$j)
{
$b[$i][$j] = $a[$i][$j] - ($a[$k][$j]*$a[$i][$k] / $a[$k][$k]);
}
}

// переприсваивание
for ($i=2; $i<=$n; ++$i)
{
for ($j=1; $j<=$n; ++$j)
{
$a[$i][$j] = $b[$i][$j];
}
}
}



P.S. Иногда получаем правда Warning деление на ноль, так что править ещё надо ...

Спустя 52 минуты, 37 секунд (27.10.2011 - 00:06) redreem написал(а):
дык, любое формализованное в логических объектах решение доступно для алгоритмизации. проблема видимо только с логикой, так что тут за вас наврядли вникнут в тему.

Спустя 8 минут, 20 секунд (27.10.2011 - 00:15) ihaveabiggun написал(а):
Тему, в принципе. можно считать закрытой.
Разобрался сам. Дописал в циклы аж:


if ($a[$k][$k] ==0)
{
$b[$i][$j] = 0;
}
else
{
$b[$i][$j] = $a[$i][$j] - ($a[$k][$j]*$a[$i][$k] / $a[$k][$k]);
}


Код выложил тому, кто будет искать :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.