aref无效 lisp_基于Lisp的矩阵实现

rix)

(let* ((m (car (matrix-dimensions matrix)))

(n (car (cdr (matrix-dimensions matrix))))

(new-matrix (matrix-make n m)))

(dotimes (i n)

(dotimes (j m)

(matrix-mod new-matrix i j (matrix-pos matrix j i))))

new-matrix))

;10、求矩阵中某个数的余子式

(defun yuzishi (matrix m n)

(let* ((k (car (matrix-dimensions matrix)))

(l (car (cdr (matrix-dimensions matrix))))

(new-matrix (matrix-make (- k 1) (- l 1))))

(dotimes (i (- k 1))

(dotimes (j (- l 1))

(cond ((and (&lt i m) (&lt j n)) (matrix-mod new-matrix i j

(matrix-pos matrix i j)))

((and (&lt i m) (&gt= j n)) (matrix-mod new-matrix i j

(matrix-pos matrix i (+ j 1))))

((and (&gt= i m) (&lt j n)) (matrix-mod new-matrix i j

(matrix-pos matrix (+ i 1) j)))

(t (matrix-mod new-matrix i j

(matrix-pos matrix (+ i 1) (+ j 1)))))))

new-matrix))

;11、能够计算某一元素的余子式

(defun matrix-sq (matrix n)

(let ((k (car (cdr (matrix-dimensions matrix)))))

(if (/= 2 k)

(* (expt -1 n) (matrix-pos matrix 0 n) (matrix-sq (yuzishi matrix 0 n) n))

(- (* (matrix-pos matrix 0 0) (matrix-pos matrix 1 1))

(* (matrix-pos matrix 0 1) (matrix-pos matrix 1 0))))))

;12、计算方阵的行列式值

(defun matrix-sq-end (matrix)

(let ((result 0)

(k (car (matrix-dimensions matrix))))

(if (/= k 3)

(dotimes (i k)

(setf result (+ result (matrix-sq-end (yuzishi matrix 0 i)))))

(dotimes (j 3)

(setf result (+ result (matrix-sq matrix j)))))

result))

;13、矩阵两行交换位置(无破坏性)

(defun matrix-row-exchange (matrix m n)

(let* ((k (car (cdr (matrix-dimensions matrix))))

(temp-row (make-array k))

(temp-matrix (matrix-copy matrix)))

(dotimes (i k)

(setf (svref temp-row i) (matrix-pos matrix m i))

(matrix-mod temp-matrix m i (matrix-pos matrix n i))

(matrix-mod temp-matrix n i (svref temp-row i)))

temp-matrix))

;14、将矩阵的某一行乘以某数(无破坏性)

(defun matrix-row-mul (matrix m n)

(let ((k (car (cdr (matrix-dimensions matrix))))

(temp-matrix (matrix-copy matrix)))

(dotimes (i k)

(matrix-mod temp-matrix m i (* (matrix-pos matrix m i) n)))

temp-matrix))

;15、求两个向量的内积

(defun inner-product (vec-1 vec-2)

(let ((v-1 (length vec-1))

(v-2 (length vec-2))

(result 0))

(if (/= v-1 v-2)

(format t "~a与~a的维数不同,不能求得内积!!!" vec-1 vec-2)

(dotimes (i v-1)

(setf result (+ result

(* (svref vec-1 i)

(svref vec-2 i))))))

result))

;15、复制一个矩阵

(defun matrix-copy (matrix)

(let* ((m (car (matrix-dimensions matrix)))

(n (car (cdr (matrix-dimensions matrix))))

(temp-matrix (matrix-make m n)))

(dotimes (i m)

(dotimes (j n)

(matrix-mod temp-matrix i j

(matrix-pos matrix i j))))

temp-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值