cg-Cad

Lisp »Tips 'n Tricks »Lisp & Array »1 »2 »3 »4 »5 »6 »7 »8 »9 »10

Per sommare 2 (o più) matrici degli stessi ordini M,N si sommano gli elementi omologhi.
Le singole somme costituiscono gli elementi della matrice somma (che mantiene gli stessi ordini M,N).
A=[ai,j], B=[bi,j] di dimensione MxN
C=[ci,j]=A+B
ci,j=ai,j+bi,j, i=1,2...M, j=1,2...N

S2M

;|
   S2M.LSP
   Copyright (C) 2005 Claudio Piccini.
   All rights reserved
   www.cg-cad.com

   Somma gli Elementi di 2 Matrici bidimensionali
|;

(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")
)

;|
   somma gli elementi dell'array A
   con gli elementi dell'array B
   return X=A+B

   Esempio
   A    =((-1.0 3.0)(1.0 5.0))
   B    =(( 0.0 1.0)(2.0 3.0))
   C=A+B=((-1.0 4.0)(3.0 8.0))
|;
(defun s2Ar ( 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 e2))))
   (setq j (1+ j))
  )
  (setq X (append X (list L)))
  (setq L nil)
  (setq i (1+ i))
 )
 (setq X X)
)

(defun c:s2m ( / 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)
 ;|
    somma gli elementi dell'array A
    con gli elementi dell'array B
 |;
 (setq C (s2Ar 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: s2m
Numero righe [3]: 2
Numero colonne [4]: 2

Inizializzazione matrice A
Inserire elemento A[0],[0]: -1
Inserire elemento A[0],[1]: 3
Inserire elemento A[1],[0]: 1
Inserire elemento A[1],[1]: 5

Inizializzazione matrice B
Inserire elemento B[0],[0]: 0
Inserire elemento B[0],[1]: 1
Inserire elemento B[1],[0]: 2
Inserire elemento B[1],[1]: 3

A[0],[0]=-1 A[0],[1]=3
A[1],[0]=1 A[1],[1]=5

B[0],[0]=0 B[0],[1]=1
B[1],[0]=2 B[1],[1]=3

C=A+B
C[0],[0]=-1 C[0],[1]=4
C[1],[0]=3 C[1],[1]=8

Command: s2m
Numero righe [3]: 2
Numero colonne [4]: 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]: 4

Inizializzazione matrice B
Inserire elemento B[0],[0]: 0
Inserire elemento B[0],[1]: 0
Inserire elemento B[1],[0]: 0
Inserire elemento B[1],[1]: 0

A[0],[0]=1 A[0],[1]=2
A[1],[0]=3 A[1],[1]=4

B[0],[0]=0 B[0],[1]=0
B[1],[0]=0 B[1],[1]=0

C=A+B
C[0],[0]=1 C[0],[1]=2
C[1],[0]=3 C[1],[1]=4

Command: s2m
Numero righe [3]: 3
Numero colonne [4]: 3

Inizializzazione matrice A
Inserire elemento A[0],[0]: 3
Inserire elemento A[0],[1]: 5
Inserire elemento A[0],[2]: 3
Inserire elemento A[1],[0]: 0
Inserire elemento A[1],[1]: 0
Inserire elemento A[1],[2]: 1
Inserire elemento A[2],[0]: 1
Inserire elemento A[2],[1]: 2
Inserire elemento A[2],[2]: 0

Inizializzazione matrice B
Inserire elemento B[0],[0]: 3
Inserire elemento B[0],[1]: 0
Inserire elemento B[0],[2]: 1
Inserire elemento B[1],[0]: 5
Inserire elemento B[1],[1]: 0
Inserire elemento B[1],[2]: 2
Inserire elemento B[2],[0]: 3
Inserire elemento B[2],[1]: 1
Inserire elemento B[2],[2]: 0

A[0],[0]=3 A[0],[1]=5 A[0],[2]=3
A[1],[0]=0 A[1],[1]=0 A[1],[2]=1
A[2],[0]=1 A[2],[1]=2 A[2],[2]=0

B[0],[0]=3 B[0],[1]=0 B[0],[2]=1
B[1],[0]=5 B[1],[1]=0 B[1],[2]=2
B[2],[0]=3 B[2],[1]=1 B[2],[2]=0

C=A+B
C[0],[0]=6 C[0],[1]=5 C[0],[2]=4
C[1],[0]=5 C[1],[1]=0 C[1],[2]=3
C[2],[0]=4 C[2],[1]=3 C[2],[2]=0

    3 5 3      3 0 1         6 5 4
A = 0 0 1  B = 5 0 2 C=A+B = 5 0 3
    1 2 0      3 1 0         4 3 0

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 18 Giugno 2005