cg-Cad

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