Matrix 方案制定矩阵

Matrix 方案制定矩阵,matrix,scheme,racket,Matrix,Scheme,Racket,我是scheme的新手,我对scheme中的矩阵有问题。我需要创建一个函数,它接受一个大的和一个小的平方矩阵,条件是:小的长度应该是大的除数,并通过对大的和小的矩阵进行运算来生成一个新的矩阵。我已经成功地将大矩阵拆分为我想要的大小,并且我正在成功地对其进行操作以获得结果 我是这样做的: (define (matrix-op big small x y) (if (< y (/ (length big) (length small)))) (if (< x (/

我是scheme的新手,我对scheme中的矩阵有问题。我需要创建一个函数,它接受一个大的和一个小的平方矩阵,条件是:小的长度应该是大的除数,并通过对大的和小的矩阵进行运算来生成一个新的矩阵。我已经成功地将大矩阵拆分为我想要的大小,并且我正在成功地对其进行操作以获得结果

我是这样做的:

(define (matrix-op big small x y)
    (if (< y (/ (length big) (length small))))
        (if (< x (/ (length big) (length small)))
            (cons (calculate (split-y (split-x big small x) small y) small)
                  (matrix-op big small (+ x 1) y)) 
            (matrix-op big small 0 (+ y 1)) ; <- this is where i need to split
        )
        '()
    )
)
我需要把大的和小的分开,计算结果如下:

for x=0 y=0 part is '(       calculate result is 5
                      (8 0)
                      (7 1)
                      )

for x=1 y=0 part is '(       calculate result is 2
                      (3 1)
                      (1 4)
                      )
我确实返回了计算的结果,但使用我上面给出的方法,我的返回结果类似于'5 2 4 2 6 4 4 4 3 5 4 2 4 6 3,但我想返回为:

'(
  (5 2 4 2) 
  (2 6 4 4) 
  (4 3 5 4) 
  (2 4 6 3)
 )

那么,我如何才能将退货列表拆分到我想要拆分的位置呢?

我认为您试图一次做的事情太多了。把大问题分解成小问题总是可以的

如果我理解你的意思,这个想法是取两个平方矩阵,其中一个可能是另一个维度的倍数,然后对元素执行成对运算。例如:

'((1 2 3)                 '((1 2 3)   '((7 7 7)       '(( 8  9 10)
  (4 5 6)  + '((7))  -->    (4 5 6)  +  (7 7 7)   -->   (11 12 13)
  (7 8 9))                  (7 8 9))    (7 7 7))        (14 15 16))
我将继续假设这是所期望的

请注意,如果两个矩阵的大小相同,则简单的嵌套贴图可以轻松地组合所有元素。剩下的是不同尺寸的问题。 解决这个问题,你就是黄金

概述:

(define (f op small-M big-M)
  (f-apply-pairwise-op 
    op
    (f-biggify small-M (/ (length big-M) (length small-M)))
    big-M))
现在,您已将问题分解为两个较小的部分:

(define (f-apply-pairwise-op op A B) ...)  ; produces pairwise 'A op B'

(define (f-biggify M n) ...)  ; tile M n times wider and taller

祝你好运

请提供样本输入和@ÓscarLópez I给出的程序的预期输出样本输入和输出。希望它能澄清。谢谢你的回答,我意识到我的问题没有在上面得到正确的解释,正如你说的,我需要对不同大小的矩阵进行运算,但我还需要制作一个不同大小的矩阵。我现在将问题扩展。
(define (f-apply-pairwise-op op A B) ...)  ; produces pairwise 'A op B'

(define (f-biggify M n) ...)  ; tile M n times wider and taller