|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Разложение Холецкого
ООО Предприятие "Ирбис"
Екатеринбург
Регистрация: 02.02.2009
Сообщений: 45
|
||
Просмотров: 7472
|
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,171
|
Рекурсия нужна. Поищи по этому слову.
И на caduser.ru была тема "Уроки создания рекурсивных функций" |
|||
![]() |
|
||||
ООО Предприятие "Ирбис" Регистрация: 02.02.2009
Екатеринбург
Сообщений: 45
![]() |
Вот я и пытаюсь сделать рекурсию, у меня почти все функции обработки матриц сделаны через рекурсию. но именно эта часть задачи не получается.
Кстати, если интересно - выкладываю лисп, который в готовом виде должен находить функцию из ряда координат точек, какие довольно часто встречаются в справочниках по гидравлике и всяких СНиПах. Жду критики кода и предложений по его улучшению |
|||
![]() |
|
||||
Цитата:
Извини, но самостоятельно разбираться с необходимым тебе алгоритмом, мне некогда...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
ООО Предприятие "Ирбис" Регистрация: 02.02.2009
Екатеринбург
Сообщений: 45
![]() |
Евгений, спасибо за отзыв!
Постараюсь описать, что требуется от программы. Наверное стоит это делать с момента, когда исходная квадратная матрица А уже готова и имеет вид списка Код:
причем размерность ее может любой. Чтобы получить матрицу L используются формулы во вложении. Первая формула определяет элементы главной диагонали L, т.е. L11, L22, L33 и т.д. Вторая формула определяет все остальные элементы, причем элементы матрицы, находящиеся ниже главной диагонали равны нулю. После расчета матрица должна принять вид Код:
По второй формуле находим элементы первой строки: L21 = 1/L11 * a21 L31 = 1/L11 * a31 L41 = 1/L11 * a41 Далее 2я строка: L22 = sqrt(a22 - L21^2) L32 = 1/L22 * (a32 - L31*L21) L42 = 1/L22 * (a42 - L41*L21) третья строка: L33 = sqrt(a33 - L31^2 - L32^2) L43 = 1/L43 * (a43 - L41*L31 - L42*L32) и четвертая строка: L44 = sqrt(a44 - L41^2 - L42^2 - L43^2) Теперь что сделал я) Элемент Lii на главной диагонали находится как квадратный корень из aii минус сумму квадратов элементов, расположенных над Lii. Эту сумму квадратов вычисляет функция Li: Код:
Код:
Код:
Код:
Код:
Код:
Последний раз редактировалось eugen81, 09.03.2010 в 11:51. |
|||
![]() |
|
||||
Жаль, ты не дал пример исходной матрицы и необходимого результата.
результат не проверял, вычисления выполнял на своей тестовой матрице... Код:
Код:
Код:
Правая часть матрицы: b = '(531. -460. 193.) Ly = b y = '(59. -33. -12.) Lty = x Lt = (apply (function mapcar) (cons (function list) (cholesky '((81. -45. 45.) (-45. 50. -15.) (45. -15. 38.)) nil)) ) x = '(6. -5. -4.)
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 09.03.2010 в 18:39. Причина: исправил ошибку и добавил проверку: |
||||
![]() |
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
Женя!
Цитата:
1. Результирующая матрица Код:
Код:
Код:
Если подставить эту матрицу в твой код, то получается Код:
Код:
Код:
Если первая проверка решается легко, со второй лично у меня пока заминка, т.к. такая проверка производится непосредственно в процессе вычислений и не получается выйти из рекурсии... |
|||
![]() |
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
FEM - Лисп, лицензия BSD
http://savannah.nongnu.org/projects/femlisp
__________________
мой блог по некоторым вопросам |
|||
![]() |
|
||||
Регистрация: 09.12.2008
Сообщений: 4,643
|
BSD это самая вольная лицензия. "Бери, используй, перерабатывай, продавай (можешь стать миллионером
![]()
__________________
мой блог по некоторым вопросам |
|||
![]() |