Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447

Как лучше хранить квадратные матрицы и находить в них подматрицы?

02.01.2016, 21:24. Показов 1757. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как лучше хранить квадратную матрицу, если в ней нужно будет находить подматрицы по координатам и суммы элементов этих матриц?
У меня вариант такой

Lisp
1
2
3
4
5
;; Изначально хранить матрицу вот так пр. 4х4
( (0 0 0 0)
  (0 0 0 0)
  (0 0 0 0)
  (0 0 0 0) )
А для подматриц создать структуру

Lisp
1
(defstruct abstract matrix sum)
Не знаю правда как найти подматрицу. Должно быть как-то так


Координаты 0 0 2 1
(0 0 0 0)
(0 0 0 0)
(0 0 0 0)
(0 0 0 0)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.01.2016, 21:24
Ответы с готовыми решениями:

Даны две квадратные матрицы. Напечатать ту из них, которая имеет минимальный след
Даны две квадратные матрицы. Напечатать ту из них, которая имеет минимальный "след' (т.е. сумму элементов главной диагонали)....

Даны две квадратные матрицы. Напечатать ту из них, которая имеет минимальный след
Даны две квадратные матрицы. Напечатать ту из них, которая имеет минимальный "след' (т.е. сумму элементов главной диагонали)....

Как лучше закодировать app.config connectionStrings? Или лучше не здесь хранить подключение к бд?
Я знаю, что app.config можно кодировать через консоль или же с помощью...

22
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
04.01.2016, 16:22
Студворк — интернет-сервис помощи студентам
If the matrix A is given as a 2D array:
http://rosettacode.org/wiki/Ma... ommon_Lisp
Lisp
1
2
3
4
5
6
7
8
9
10
;; Transpose a mxn matrix A to a nxm matrix B=A'.
(defun mtp (A)
  (let* ((m (array-dimension A 0))
         (n (array-dimension A 1))
         (B (make-array `(,n ,m) :initial-element 0)))
    (loop for i from 0 below m do
          (loop for j from 0 below n do
                (setf (aref B j i)
                      (aref A i j))))
    B))
Добавлено через 35 секунд
+
http://rosettacode.org/wiki/Ma... ommon_Lisp
1
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
04.01.2016, 16:24  [ТС]
_sg, Уже сделал
Lisp
1
2
3
4
5
6
7
8
9
10
(defun get-submatrix-sum (matrix coordinates)
    ;;Не знаю как сделать
    "Возвращает массив элементов из подматрицы по координатам данным в виде массива
    Пример:
    (get-submatrix #2A((0 1 2) (3 4 5) (6 7 8)) #(0 0 1 2)) -> (+ 0 1 2 3 4 5) -> 15"
    (let ((sum 0))
        (loop for i from (aref coordinates 0) to (aref coordinates 2) do
            (loop for j from (aref coordinates 1) to (aref coordinates 3) do
                (incf sum (aref matrix i j))))
        sum))
0
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
04.01.2016, 16:28
The following version uses 2D arrays as inputs:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun mmul (A B)
  (let* ((m (car (array-dimensions A)))
         (n (cadr (array-dimensions A)))
         (l (cadr (array-dimensions B)))
         (C (make-array `(,m ,l) :initial-element 0)))
    (loop for i from 0 to (- m 1) do
              (loop for k from 0 to (- l 1) do
                    (setf (aref C i k)
                          (loop for j from 0 to (- n 1)
                                sum (* (aref A i j)
                                       (aref B j k))))))
    C))
 
(mmul #2a((1 2) (3 4)) #2a((-3 -8 3) (-2 1 4)))
#2A((-7 -6 11) (-17 -20 25))
Добавлено через 57 секунд
Another version:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun mmult (a b)
  (loop
       with m = (array-dimension a 0)
       with n = (array-dimension a 1)
       with l = (array-dimension b 1)
       with c = (make-array (list m l) :initial-element 0)
       for i below m do
              (loop for k below l do
                    (setf (aref c i k)
                          (loop for j below n
                                sum (* (aref a i j)
                                       (aref b j k)))))
       finally (return c)))
Добавлено через 3 минуты
+ http://rosettacode.org/wiki/Ma... ommon_Lisp
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
(defun multiply-matrices (matrix-0 matrix-1)
  "Takes two 2D arrays and returns their product, or an error if they cannot be multiplied"
  (let* ((m0-dims (array-dimensions matrix-0))
         (m1-dims (array-dimensions matrix-1))
         (m0-dim (length m0-dims))
         (m1-dim (length m1-dims)))
    (if (or (/= 2 m0-dim) (/= 2 m1-dim))
        (error "Array given not a matrix")
        (let ((m0-rows (car m0-dims))
              (m0-cols (cadr m0-dims))
              (m1-rows (car m1-dims))
              (m1-cols (cadr m1-dims)))
          (if (/= m0-cols m1-rows)
              (error "Incompatible dimensions")
              (do ((rarr (make-array (list m0-rows m1-cols)
                                     :initial-element 0) rarr)
                   (n 0 (if (= n (1- m0-cols)) 0 (1+ n)))
                   (cc 0 (if (= n (1- m0-cols))
                             (if (/= cc (1- m1-cols)) 
                                 (1+ cc) 0) cc))
                   (cr 0 (if (and (= (1- m0-cols) n) 
                                  (= (1- m1-cols) cc))
                             (1+ cr)
                             cr)))
                  ((= cr m0-rows) rarr)
                (setf (aref rarr cr cc)
                      (+ (aref rarr cr cc)
                         (* (aref matrix-0 cr n)
                            (aref matrix-1 n cc))))))))))
 
(defun matrix-identity (dim)
  "Creates a new identity matrix of size dim*dim"
  (do ((rarr (make-array (list dim dim)
                         :initial-element 0) rarr)
       (n 0 (1+ n)))
      ((= n dim) rarr)
    (setf (aref rarr n n) 1)))
 
(defun matrix-expt (matrix exp)
  "Takes the first argument (a matrix) and multiplies it by itself exp times"
  (let* ((m-dims (array-dimensions matrix))
         (m-rows (car m-dims))
         (m-cols (cadr m-dims)))
    (cond
      ((/= m-rows m-cols) (error "Non-square matrix"))
      ((zerop exp) (matrix-identity m-rows))
      ((= 1 exp) (do ((rarr (make-array (list m-rows m-cols)) rarr)
                      (cc 0 (if (= cc (1- m-cols))
                                0
                                (1+ cc)))
                      (cr 0 (if (= cc (1- m-cols))
                                (1+ cr)
                                cr)))
                     ((= cr m-rows) rarr)
                   (setf (aref rarr cr cc) (aref matrix cr cc))))
      ((zerop (mod exp 2)) (let ((me2 (matrix-expt matrix (/ exp 2))))
                             (multiply-matrices me2 me2)))
      (t (let ((me2 (matrix-expt matrix (/ (1- exp) 2))))
           (multiply-matrices matrix (multiply-matrices me2 me2)))))))
Добавлено через 20 секунд
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
CL-USER> (setf 5x5-matrix
               (make-array '(5 5)
                           :initial-contents
                           '((0    1 -1   -2    2)
                             (0.4  4  3.2 -3  -10)
                             (4.5 -2  0.5  1    7)
                             (10   1  0    1.5 -2)
                             (4    5 -3   -2    1))))
#2A((0 1 -1 -2 2)
    (0.4 4 3.2 -3 -10)
    (4.5 -2 0.5 1 7)
    (10 1 0 1.5 -2)
    (4 5 -3 -2 1))
CL-USER> (matrix-expt 5x5-matrix 3)
#2A((-163.25 -19.5 92.25 -7.5999985 -184.3)
    (156.6 -412.09998 0.7999954 331.45 597.4)
    (-129.82501 401.25 -66.975 -302.55 -390.15)
    (-148.9 39.25 -5.200001 -67.225006 -7.300003)
    (-495.05 -231.5 310.85 33.0 -328.5))
CL-USER> (setf 4x4-matrix
               (make-array '(4 4)
                           :initial-contents
                           '(( 1/2 -1/2  4    8)
                             (-3/4  7/3  8/5 -2)
                             (-5   17   20/3 -5/2)
                             ( 3/2 -1   -7/3  6))))                            
#2A((1/2 -1/2 4 8) (-3/4 7/3 8/5 -2) (-5 17 20/3 -5/2) (3/2 -1 -7/3 6))
CL-USER> (matrix-expt 4x4-matrix 3)
#2A((-233/8 182723/720 757/30 353/6)
    (-73517/480 838241/2160 77789/450 -67537/180)
    (-5315/9 66493/45 90883/135 -54445/36)
    (37033/144 -27374/45 -15515/54 12109/18))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2016, 16:28

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

Даны четыре целочисленные квадратные матрицы 5-го порядка. Найти ту из них, норма которой наибольшая
Даны четыре целочисленные квадратные матрицы 5-го порядка. Найти ту из них, норма которой наибольшая. В качестве нормы матрицы взять...

Даны три квадратные матрицы А, В, С n-го порядка. Вывести на печать ту из них, норма которой наименьшая
Даны три квадратные матрицы А, В, С n-го порядка. Вывести на печать ту из них, норма которой наименьшая. Нормой матрицы назовем максимум из...

Даны три квадратные матрицы А, В, С n-го порядка. Вывести на печать ту из них, норма которой наименьшая
Задание: Даны три квадратные матрицы А, В, С n-го порядка. Вывести на печать ту из них, норма которой наименьшая. Помощь. Нормой матрицы...

Даны две квадратные матрицы.Напечатать квадрат той из них,в который наименьший след.
Заранее спасибо!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru