|
Lisp »Tips 'n Tricks
»Lisp & Array
»1
»2
»3
»4
»5
»6
»7
»8
»9
»10
Per moltiplicare uno scalare (numero) per una matrice A si moltiplicano tutti gli elementi della matrice per lo scalare.
S2M2
;|
S2M2.LSP
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
Prodotto tra uno scalare x ed una matrice A
B=x*A
|;
(defun lstArray ( NR NC nome / i j L X e str )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq str (strcat "\n Inserire elemento " nome "[" (itoa i) "],[" (itoa j) "]: "))
(setq e (getreal str))
(setq L (append L (list e)))
(setq j (1+ j))
)
(setq X (append X (list L)))
(setq L nil)
(setq i (1+ i))
)
(princ "\n")
(setq X X)
)
;|
mostra il contenuto della lista 'matrice' nome
|;
(defun scriveArray ( NR NC nome lista / i j e str )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e (nth j (nth i lista)))
(setq str (strcat nome "[" (itoa i) "],[" (itoa j) "]=" (rtos e 2 2)))
(princ str)
(setq j (1+ j))
)
(princ "\n")
(setq i (1+ i))
)
(princ "\n")
)
(defun pScalMat ( NR NC A x / i j e L Y )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e (nth j (nth i A)))
(setq L (append L (list (* x e))))
(setq j (1+ j))
)
(setq Y (append Y (list L)))
(setq L nil)
(setq i (1+ i))
)
(setq Y Y)
)
(defun c:s2m2 ( / NR NC A B x )
; eco OFF
(setvar "cmdecho" 0)
;|
input numero righe = NR
numero colonne = NC
|;
(setq NR (getint "\n Numero righe [3]: "))
(if (= NR nil)(setq NR 3))
(setq NC (getint "\n Numero colonne [4]: "))
(if (= NC nil)(setq NC 4))
(setq x (getreal "\n numero: "))
;|
inizializza la lista 'array' A
|;
(princ "\n Inizializzazione matrice A")
(setq A (lstArray NR NC " A"))
;|
mostra il contenuto dell'array A
|;
(scriveArray NR NC " A" A)
;|
prodotto tra uno scalare x
ed una matrice A
|;
(setq B (pScalMat NR NC A x))
;|
mostra il contenuto dell'array B=x*A
|;
(princ "\n B=x*A\n")
(scriveArray NR NC " B" B)
;|
ripristina l'ambiente
|;
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test del Lisp
Command: s2m2
Numero righe [3]: 2
Numero colonne [4]: 2
numero: 2
Inizializzazione matrice A
Inserire elemento A[0],[0]: 1
Inserire elemento A[0],[1]: 2
Inserire elemento A[1],[0]: 3
Inserire elemento A[1],[1]: 1
A[0],[0]=1 A[0],[1]=2
A[1],[0]=3 A[1],[1]=1
B=x*A
B[0],[0]=2 B[0],[1]=4
B[1],[0]=6 B[1],[1]=2
La differenza tra due matrici è una combinazione lineare ottenuta per k1=1 e k2=-1: C=(1*A)+(-1*B)
D2M
;|
D2M.LSP
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
Differenza tra 2 Matrici bidimensionali
C=A+(-1*B)
|;
(defun lstArray ( NR NC nome / i j L X e str )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq str (strcat "\n Inserire elemento " nome "[" (itoa i) "],[" (itoa j) "]: "))
(setq e (getreal str))
(setq L (append L (list e)))
(setq j (1+ j))
)
(setq X (append X (list L)))
(setq L nil)
(setq i (1+ i))
)
(princ "\n")
(setq X X)
)
;|
mostra il contenuto della lista 'matrice' nome
|;
(defun scriveArray ( NR NC nome lista / i j e str )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e (nth j (nth i lista)))
(setq str (strcat nome "[" (itoa i) "],[" (itoa j) "]=" (rtos e 2 2)))
(princ str)
(setq j (1+ j))
)
(princ "\n")
(setq i (1+ i))
)
(princ "\n")
)
(defun d2Ar ( NR NC A B / i j e1 e2 L X )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e1 (nth j (nth i A)))
(setq e2 (nth j (nth i B)))
(setq L (append L (list (+ e1 (* -1 e2)))))
(setq j (1+ j))
)
(setq X (append X (list L)))
(setq L nil)
(setq i (1+ i))
)
(setq X X)
)
(defun c:d2m ( / NR NC
A B C
)
; eco OFF
(setvar "cmdecho" 0)
;|
input numero righe = NR
numero colonne = NC
|;
(setq NR (getint "\n Numero righe [3]: "))
(if (= NR nil)(setq NR 3))
(setq NC (getint "\n Numero colonne [4]: "))
(if (= NC nil)(setq NC 4))
;|
inizializza la lista 'array' A
|;
(princ "\n Inizializzazione matrice A")
(setq A (lstArray NR NC " A"))
;|
inizializza la lista 'array' B
|;
(princ "\n Inizializzazione matrice B")
(setq B (lstArray NR NC " B"))
;|
mostra il contenuto dell'array A
|;
(scriveArray NR NC " A" A)
;|
mostra il contenuto dell'array B
|;
(scriveArray NR NC " B" B)
;|
sottrae gli elementi dell'array A
agli elementi dell'array B
|;
(setq C (d2Ar NR NC A B))
;|
mostra il contenuto dell'array C=A-B
|;
(princ "\n C=A-B\n")
(scriveArray NR NC " C" C)
;|
ripristina l'ambiente
|;
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test del Lisp
Command: d2m
Numero righe [3]: 2
Numero colonne [4]: 3
Inizializzazione matrice A
Inserire elemento A[0],[0]: 2
Inserire elemento A[0],[1]: 3
Inserire elemento A[0],[2]: -1
Inserire elemento A[1],[0]: 4
Inserire elemento A[1],[1]: 1
Inserire elemento A[1],[2]: 0
Inizializzazione matrice B
Inserire elemento B[0],[0]: 0
Inserire elemento B[0],[1]: -3
Inserire elemento B[0],[2]: 1
Inserire elemento B[1],[0]: 3
Inserire elemento B[1],[1]: 4
Inserire elemento B[1],[2]: -2
A[0],[0]=2 A[0],[1]=3 A[0],[2]=-1
A[1],[0]=4 A[1],[1]=1 A[1],[2]=0
B[0],[0]=0 B[0],[1]=-3 B[0],[2]=1
B[1],[0]=3 B[1],[1]=4 B[1],[2]=-2
C=A-B
C[0],[0]=2 C[0],[1]=6 C[0],[2]=-2
C[1],[0]=1 C[1],[1]=-3 C[1],[2]=2
Command: d2m
Numero righe [3]: Invio
Numero colonne [4]: 3
Inizializzazione matrice A
Inserire elemento A[0],[0]: 2
Inserire elemento A[0],[1]: -1
Inserire elemento A[0],[2]: 4
Inserire elemento A[1],[0]: 5
Inserire elemento A[1],[1]: 2
Inserire elemento A[1],[2]: 1
Inserire elemento A[2],[0]: 3
Inserire elemento A[2],[1]: 4
Inserire elemento A[2],[2]: 6
Inizializzazione matrice B
Inserire elemento B[0],[0]: 2
Inserire elemento B[0],[1]: 5
Inserire elemento B[0],[2]: 3
Inserire elemento B[1],[0]: -1
Inserire elemento B[1],[1]: 2
Inserire elemento B[1],[2]: 4
Inserire elemento B[2],[0]: 4
Inserire elemento B[2],[1]: 1
Inserire elemento B[2],[2]: 6
A[0],[0]=2 A[0],[1]=-1 A[0],[2]=4
A[1],[0]=5 A[1],[1]=2 A[1],[2]=1
A[2],[0]=3 A[2],[1]=4 A[2],[2]=6
B[0],[0]=2 B[0],[1]=5 B[0],[2]=3
B[1],[0]=-1 B[1],[1]=2 B[1],[2]=4
B[2],[0]=4 B[2],[1]=1 B[2],[2]=6
C=A-B
C[0],[0]=0 C[0],[1]=-6 C[0],[2]=1
C[1],[0]=6 C[1],[1]=0 C[1],[2]=-3
C[2],[0]=-1 C[2],[1]=3 C[2],[2]=0
2 -1 4 2 5 3 0 -6 1
A = 5 2 1 B = -1 2 4 C=A-B = 6 0 -3
3 4 6 4 1 6 -1 3 0
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 18 Giugno 2005
|
|