lisp- решение СЛАУ
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > lisp- решение СЛАУ

lisp- решение СЛАУ

Ответ
Поиск в этой теме
Непрочитано 25.12.2008, 20:00 #1
lisp- решение СЛАУ
Patrick Henry
 
Сообщений: n/a

Стоит задача в рамках программки на лиспе порешать систему линейных алгебраических уравнений (массив коэффициентов, массив своб. членов -> получить массив неизвестных). Как лучше поступить? Можно ли найти соответствующие "кирпичи". Или придется гонять данные в сторонний решатель?
Просмотров: 3139
 
Непрочитано 25.12.2008, 20:19
#2
wyd


 
Регистрация: 18.10.2007
Сообщений: 54


можно посмотреть на http://www.caduser.ru/cgi-bin/f1/board.cgi?t=40776Wu
wyd вне форума  
 
Непрочитано 25.12.2008, 20:26
#3
Patrick Henry


 
Сообщений: n/a


Спасибо. А какой самый мощный англоязычный ресурс по lisp для acad? Обычно такие вещи там проще найти.
 
 
Непрочитано 25.12.2008, 20:43
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Ну если на лиспе, то специально для задач с массивами (в терминологии лиспа - частный случай списков) хорошенько изучить функции apply, mapcar и lambda. Думаю половина вопросов сама отпадет.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 25.12.2008, 21:04
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Цитата:
Сообщение от Patrick Henry Посмотреть сообщение
Спасибо. А какой самый мощный англоязычный ресурс по lisp для acad? Обычно такие вещи там проще найти.
theswamp.org
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.12.2008, 22:53
#6
Patrick Henry


 
Сообщений: n/a


Есть еще идея поковыряться в открытом коде "Максимы", которая на лиспе написана вроде бы как. lisp файлов я оттуда выудил аж 3 мб архива , посмотрю чего они означают. Может быть выужу алгоритмы численные (хотя там символьная математика в основном).
В общем спасибо за информацию
 
 
Непрочитано 25.12.2008, 23:00
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Patrick Henry, на "болоте" были коды решения систем уравнений, "нарисованных" однострочными текстами...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.12.2008, 23:48
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Patrick Henry,
+ Кулик Алексей aka kpblc
A linear equation set solver, thank to Evgeniy's help
Evgeniy - это Елпанов Евгений
То же в картинках под номером 12
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.12.2008, 11:12
#9
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


>Patrick Henry
Мой вариант решения СЛУ, используя алгоритм получения обратной матрицы. Использовал немного переделанную функцию Евгения Елпанова для приведения исходной матрицы к верхнетреугольному виду...
Код:
[Выделить все]
(defun matrix-1 (lst / gauss)
;;;Функция приведения матрицы к верхнетреугольному виду
  (defun gauss (lst)
    (if (car lst)
      (if (zerop (caar lst))
        (if (vl-every (function zerop) (mapcar (function car) lst))
          (if (cdr lst)
            (cons
              (car lst)
              (mapcar
                (function (lambda (x) (cons 0. x)))
                (gauss (mapcar (function cdr) (cdr lst)))
              ) ;_  mapcar
            ) ;_  cons
            lst
          ) ;_  if
          (gauss
            (cons
              (mapcar
                (function +)
                (car lst)
                (car (vl-remove-if
                       (function (lambda (x) (zerop (car x))))
                       (cdr lst)
                     ) ;_ end of vl-remove-if
                ) ;_ end of car
              ) ;_  mapcar
              (cdr lst)
            ) ;_  cons
          ) ;_  gauss
        ) ;_  if
        (if (equal (caar lst) 1.)
          (cons
            (car lst)
            (mapcar
              (function (lambda (x) (cons 0. x)))
              (gauss
                (mapcar
                  (function
                    (lambda (x / i)
                      (setq i (/ (car x) (caar lst)))
                      (mapcar
                        (function -)
                        (cdr x)
                        (mapcar (function (lambda (x1) (* x1 i)))
                                (cdar lst)
                        ) ;_ end of mapcar
                      ) ;_  mapcar
                    ) ;_  lambda
                  ) ;_  function
                  (cdr lst)
                ) ;_  mapcar
              ) ;_  gauss
            ) ;_  mapcar
          ) ;_  cons
          (gauss
            (cons
              (mapcar
                '(lambda (x) (/ x (caar lst)))
                (car lst)
              ) ;_ end of mapcar
              (cdr lst)
            ) ;_ end of cons
          ) ;_ end of gauss
        ) ;_ end of if
      ) ;_  if
    ) ;_  if
  ) ;_ end of defun
  (repeat 2
    (setq lst
           (mapcar
             '(lambda (x)
                (reverse (mapcar 'reverse x))
              ) ;_ end of lambda
             (apply
               'mapcar
               (cons
                 'list
                 (mapcar
                   '(lambda (x)
                      (mapcar
                        '(lambda (f / n)
                           (setq n (length (caar lst)))
                           (vl-remove-if
                             '(lambda (i)
                                (f -1 (setq n (1- n)))
                              ) ;_ end of lambda
                             x
                           ) ;_ end of vl-remove-if
                         ) ;_ end of lambda
                        (list >= <)
                      ) ;_ end of mapcar
                    ) ;_ end of lambda
                   (gauss (apply 'mapcar (cons 'append lst)))
                 ) ;_ end of mapcar
               ) ;_ end of cons
             ) ;_ end of apply
           ) ;_ end of mapcar
    ) ;_ end of setq
  ) ;_ end of repeat
;;;Проверка - является ли (car lst) единичной матрицей
  (if
    (vl-every
      '(lambda (x y) (equal x y))
      ((lambda (a)
         (repeat (1- (length (car lst)))
           (setq a (cons
                     (append (car a) (list 0.))
                     (mapcar '(lambda (x) (cons 0. x)) a)
                   ) ;_ end of cons
           ) ;_ end of setq
         ) ;_ end of repeat
       ) ;_ end of lambda
        (list '(1.))
      )
      (car lst)
    ) ;_ end of vl-every
     (apply 'append (cadr lst))
     (progn (princ "\nИсходная матрица не имеет обратной...")
            nil
     ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun
Код:
[Выделить все]
;|4a-2b-3c-9d=-16
4a+2b-1c-3d=16
4a-6b+4c-3d=-12
0a-3b+2c+2d=-10|;
(matrix-1
  (list
    (list
      (list 4. -2. -3. -9.)
      (list 4. 2. -1. -3.)
      (list 4. -6. 4. -3.)
      (list 0. -3. 2. 2.)
    ) ;_ end of list
    (mapcar 'list (list -16. 16. -12. -10.))
  ) ;_ end of list
) ;_ end of matrix-1
;;; -> (2.0 6.0 4.0 0.0)
;;;Проверка
(mapcar
  '(lambda (x) (apply '+ (mapcar '* x '(2.0 6.0 4.0 0.0))))
  (list
    (list 4. -2. -3. -9.)
    (list 4. 2. -1. -3.)
    (list 4. -6. 4. -3.)
    (list 0. -3. 2. 2.)
  ) ;_ end of list
) ;_ end of mapcar
;;; -> (-16.0 16.0 -12.0 -10.0)
;|-2b+4a-3c-9d=-16
   2b+4a-1c-3d=16
  -6b+4a+4c-3d=-12
  -3b+0a+2c+2d=-10|;
(matrix-1
  (list
    (list
      (list -2. 4. -3. -9.)
      (list 2. 4. -1. -3.)
      (list -6. 4. 4. -3.)
      (list -3. 0. 2. 2.)
    ) ;_ end of list
    (mapcar 'list (list -16. 16. -12. -10.))
  ) ;_ end of list
) ;_ end of matrix-1
;;; -> (6.0 2.0 4.0 0.0)
CB вне форума  
 
Непрочитано 26.12.2008, 11:18
#10
Patrick Henry


 
Сообщений: n/a


Спасибо! Всем.
 
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > lisp- решение СЛАУ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, существуют ли практические руководства по Lisp? vn LISP 261 26.11.2015 13:27
Решение векторных уравнений inst2005 Программирование 4 26.06.2008 09:54
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19