Linear Algebra (5)

冷静に

てか記述がダウトじゃん。なんか適当に手を動かしてたら試験にパス。一応試験を再度以下に。

(test-section "Fij-lambda")
(test* "(F-i-j-lambda 1 2 -3 '((1 0) (0 1)))"
       '((1 -3) (0 1))
       (F-i-j-lambda 1 2 -3 '((1 0) (0 1))))

(test* "(F-i-j-lambda 2 1 -3 '((1 0) (0 1)))"
       '((1 0) (-3 1))
       (F-i-j-lambda 2 1 -3 '((1 0) (0 1))))
       
(test* "(F-i-j-lambda 1 2 1/2 '((1 0 0) (0 1 0) (0 0 1)))"
       '((1 1/2 0) (0 1 0) (0 0 1))
       (F-i-j-lambda 1 2 1/2 '((1 0 0) (0 1 0) (0 0 1))))

(test* "(F-i-j-lambda 2 1 1/2 '((1 0 0) (0 1 0) (0 0 1)))"
       '((1 0 0) (1/2 1 0) (0 0 1))
       (F-i-j-lambda 2 1 1/2 '((1 0 0) (0 1 0) (0 0 1))))

で、パスしてるのが以下な手続き。

(define (F-i-j-lambda i j n l)
  (let f ((row (v-+-v (scalar-*-v n (getRow j l))
		      (getRow i l)))
	  (now 1)
	  (l l))
    (if (null? l)
	'()
	(cons (if (= now i)
		  row
		  (car l))
	      (f row (+ now 1) (cdr l))))))

ハマッてたダウトな実装が以下。

(define (F-i-j-lambda i j n l)
  (let f ((row (v-+-v (scalar-*-v n (getRow (if (< i j) j i) l))
		      (getRow (if (< i j) i j) l)))
	  (now 1)
	  (l l))
    (if (null? l)
	'()
	(cons (if (= now (if (< i j) i j))
		  row
		  (car l))
	      (f row (+ now 1) (cdr l))))))

テキストがダウトな気がするのは気のせいなのだろうか。