0 / 0 / 0
Регистрация: 12.11.2017
Сообщений: 6
1

Написать функцию, которая найдет произведение двух матриц, заданных в виде массивов. Предусмотреть проверку корректности

17.12.2017, 15:19. Показов 843. Ответов 5
Метки нет (Все метки)

Написать функцию, которая найдет произведение двух матриц, заданных в виде массивов. Предусмотреть проверку корректности ввода исходных данных.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2017, 15:19
Ответы с готовыми решениями:

Написать функцию, которая находит произведение двух матриц
Написать функцию, которая находит произведение двух матриц, заданных в виде массивов. Предусмотреть...

Написать функцию, которая почленно заключает первые четыре элемента двух заданных как параметры массивов типа double
Написать функцию, которая почленно заключает первые четыре элемента двух заданных как параметры...

Написать функцию, вычисляющую произведение двух матриц
Написать функцию, вычисляющую произведение двух матриц..не судите сильно строго еще сильно туповат...

Написать функцию, вычисляющую произведение двух матриц
N.3.Написать функцию, вычисляющую произведение двух матриц.

5
4684 / 4380 / 379
Регистрация: 12.05.2012
Сообщений: 3,087
17.12.2017, 17:02 2
https://www.cyberforum.ru/lisp/thread2159056.html
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun mx-product (w v
                   &aux
                   (a (array-dimension w 0))
                   (b (array-dimension w 1))
                   (c (array-dimension v 1))
                   (z (make-array `(,a ,c) :initial-element 0)))
  (when (= b (array-dimension v 0))
    (loop for i below a do
          (loop for k below c do
                (setf (aref z i k)
                      (loop for j below b
                            sum (* (aref w i j)
                                   (aref v j k)))))
          finally (return z))))
 
> (mx-product #2a((1 2) (3 4)) #2a((1 2 3) (4 5 6)))
#2A((9 12 15) (19 26 33))
> (mx-product #2a((1 2) (3 4) (5 6)) #2a((1 2 3) (4 5 6)))
#2A((9 12 15) (19 26 33) (29 40 51))
> (mx-product #2a((1 2) (3 4) (5 6)) #2a((1 2 3) (4 5 6) (7 8 9)))
NIL
1
4684 / 4380 / 379
Регистрация: 12.05.2012
Сообщений: 3,087
17.12.2017, 17:03 3
варианты: https://www.cyberforum.ru/lisp/thread1163899.html

https://rosettacode.org/wiki/M... ommon_Lisp

https://stackoverflow.com/ques... ommon-lisp
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun mx-product (w v
                   &aux
                   (a (array-dimension w 0))
                   (b (array-dimension w 1))
                   (c (array-dimension v 1))
                   (z (make-array `(,a ,c) :initial-element 0)))
  (when (= b (array-dimension v 0))
    (loop for i below a do
          (loop for k below c do
                (setf (aref z i k)
                      (loop for j below b
                            sum (* (aref w i j)
                                   (aref v j k)))))
          finally (return z))))
 
> (mx-product #2a((1 2) (3 4)) #2a((1 2 3) (4 5 6)))
#2A((9 12 15) (19 26 33))
> (mx-product #2a((1 2) (3 4) (5 6)) #2a((1 2 3) (4 5 6)))
#2A((9 12 15) (19 26 33) (29 40 51))
> (mx-product #2a((1 2) (3 4) (5 6)) #2a((1 2 3) (4 5 6) (7 8 9)))
NIL
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
33828 / 18860 / 3975
Регистрация: 12.02.2012
Сообщений: 31,636
Записей в блоге: 12
17.12.2017, 18:46 4
Любопытно, что обычное матричное произведение еще проще реализуется на списках (и не думаю, что медленнее):

Lisp
1
2
3
4
5
6
7
(defun matr-prod (matr1 matr2)
  (let ((matr2* (apply 'mapcar (cons 'list matr2))))
    (mapcar (lambda (r1) (mapcar (lambda (r2) (apply '+ (mapcar '* r1 r2))) matr2*)) matr1)))
 
(matr-prod '((1 2) (3 4)) '((5 6) (7 8)))
 
==> ((19 22) (43 50))
1
4684 / 4380 / 379
Регистрация: 12.05.2012
Сообщений: 3,087
17.12.2017, 20:29 5
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun mx-product (w v)
  (when (= (length (car w)) (length v))
    (mapcar #'(lambda (r)
                (apply #'mapcar #'(lambda (&rest c)
                                    (reduce #'+ (mapcar #'* r c)))
                       v))
            w)))
 
> (mx-product '((1 2) (3 4)) '((1 2 3) (4 5 6)))
((9 12 15) (19 26 33))
> (mx-product '((1 2) (3 4) (5 6)) '((1 2 3) (4 5 6)))
((9 12 15) (19 26 33) (29 40 51))
> (mx-product '((1 2) (3 4) (5 6)) '((1 2 3) (4 5 6) (7 8 9)))
NIL
1
4516 / 3510 / 358
Регистрация: 12.03.2013
Сообщений: 6,034
17.12.2017, 22:10 6
Если аргументы обозначены a и b, можно проверить их корректность так:
Lisp
1
2
3
4
5
6
(assert (progn
          (check-type a (array number (* *)))
          (check-type b (array number (* *)))
          (= (array-dimension a 1) (array-dimension b 0)))
        (a b)
        "Cannot multiply ~A by ~A." a b)
Если третьим аргументом будет матрица, куда складывать результат (имхо его логично было бы использовать, хотя бы опционально), можно там же проверить её размеры.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2017, 22:10
Помогаю со студенческими работами здесь

Написать функцию которая найдет и напечатает
Написать функцию которая найдет и напечатает все слова которые начинаются и заканчиваються...

Написать функцию, которая возвращает произведение двух целых чисел
Помогите, что то я не могу понять задачи, даже не знаю с чего начать)))) 1. Написать функцию,...

Написать функцию, которая найдет следующее за заданным простое число
пожаааалуйста хелп сказали, что 2 функции здесь будет, 1- будет проверять простое ли число, а 2 -...

Написать функцию, которая найдёт возможный вариант размещения жителей племени
Есть такая интересная задачка, давалась в одном из вузов на экзамене в первом семестре. На...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru