Torna alla Home page. DLL per il calcolo matriciale in VB Torna alla Home page.

Utile supporto per eseguire calcoli complessi altrimenti impossibili con Visual Basic.

Questo programma è stato scritto dopo aver riscontrato due fatti macroscopici:
1) L'estrema lentezza dimostrata del Visual Basic nell'eseguire lunghi calcoli
2) Il grande miglioramento (Circa 10 volte più veloce) ottenuto utilizzato il C++.

Non restava che scrivere del codice in C++ ed utilizzarlo da VB tramite un DLL?

Anche se le funzioni esportate nella DLL possono essere usate direttamente nel vostro codice VB vi consiglio di utilizzarle indirettamente tramite la MyVBBlas.DLL che contiene un'interfaccia più sicura e meglio integrata con VB.
Ad esempio se si chiama direttamente la funzione di copia di una matrice 5X3 in un'altra 3X3 il sistema potrebbe bloccare l'applicazione costringendovi a chiudere l'applicazione senza salvarla ... perdendo il lavoro svolto :( se invece si utilizza il MyVBBlas.DLL allora VB visualizzerà un messaggio di errore e nulla più.

Scarica il sistema completo in formato ZIP (137K) compreso il manuale per l'uso di MyBlas.Dll ed MyVbBlas.Dll e programma d'esempio con relativo sorgente MyVbBlasTest.exe.


Counter Visitatori dal 10 aprile 2000

Le funzioni presenti nell'interfaccia contenuta in MyBlas.DLL sono:

MIni Inizializza la matrice azzerando tutti gli elementi a parte quelli sulla diagonale principale che viene inizializzata come un vettore passato come parametro.
MCpy

T/N

Copia il contenuto di una matrice in un'altra moltiplicando ogni elemento per un numero (Alpha)
MCpyBlock

T/N

Copia il contenuto di un blocco di una matrice in un blocco delle stesse dimensioni all'interno di un'altra matrice.
MSum

T/N

Esegue la somma di due matrici moltiplicando la prima per un nomero (Alpha)
MVMul

T/N

Esegue il prodotto matriciale aA*b + bc dove A è una matrice b e c sono vettori ed a e b sono numeri.
MMMul

T/N

Esegue il prodotto matriciale aA*B + bC dove A, B e C sono matrici ed a e b sono numeri.
LSolve

T/N

Risolve il sistema lineare A*x = b dove A è una matrice quadrata, b è il termine noto ed x l'incognita.
LPolyFit Trova il polinomio che interpola i dati passati (Esattamente o nel senso dei minimi quadrati)
VCpy

Copia il contenuto di un vettore in un altro moltiplicando ogni elemento per un numero (Alpha)
VSwap Scambia il contenuto di due vettori
VProd Funz Calcola il prodotto scalare a*b
VProdT Trova la matrice risultate dal prodotto (colonna X riga) tra i vettori a'*b
VNorm1 Funz Calcola la norma uno di un vettore (La norma uno non è altro che la somma di tutti gli elementi del vettore)
VNormMax Funz Calcola la norma infinito detta anche norma del massimo in quanto è il più grande elemento del vettore.
VPolyVal Valuta un polinomio in tutti i punti di un vettore passato come parametro
VIni Inizializza un vettore con valori compresi in un intervallo equispaziato.
VSin Calcola il seno di un vettore (Elemento per elemento)
VCos Calcola il coseno di un vettore (Elemento per elemento)
VSum Esegue la somma di due vettori moltiplicando il primo per un numero (Alpha)

T/N indica che esiste la versione in cui la matrice A viene elaborata come Trasposta o Non trasposta ad esempio la funzione MCpy esegue una copia esatta o una copia di A trasposta.

Le funzioni presenti nell'interfaccia della Classe MyVbBlas.DLL sono:

Inizializza

 

Inizializza la matrice/vettore.
Valuta

 

Valuta il polinomio.
Copia

T/N

Copia matrici/vettori.
CopiaBlocco

T/N

Copia una parte di una matrice/vettore in un'altra matrice/vettore.
Scambia

 

Scambia il contenuto di una matrice/vettore con quello di un'altra matrice/vettore.
Somma

T/N

Somma due matrici/vettori
Moltiplica

T/N

Moltiplica Moltiplica una matrice/vettore per un'altra matrice/vettore.
Seno Coseno   Calcola il seno/coseno di un vettore di valori.
Norma

Funz E/M/U

Calcola la norma di una matrice/vettore.
RisolviSL

T/N

Risolve il sistema lineare
Interpola   Esegue l'interpolazione di dati tramite un polinomio

Questa interfaccia risulta più semplice e sicura da usare con VB.
Nel pacchetto viene fornito anche un programma MyVbBlasTest.exe utile sia per verificare le potenzialità dell'applicativo sia come esempio all'uso.


Molte altre informazioni sono presenti nel file readme.txt e nella guida all'uso di MyBlas.DLL.

Come "installare" le DLL

Per utilizzare l'estensione che ho realizzato basta:
1) Inserire nella directory Windows\System le due DLL contenute nel file compresso
2) Registrare la DLL MyVBBlas.DLL tramite RegSrv32.EXE presente sempre nella stessa directory (\Windows\System) digitando il comando "RegSrv32.EXE MyVBBlas.DLL".
In alcuni sistemi manca anche la libreria cw3215.dll, in questo caso va anche lei copiata a mano come le altre due.
3) Per ogni nuovo progetto che usi le DLL tramite il menu' Project|Reference... seleziona tra le "Avaiables reference" la voce MyVBBlas.DLL o raggiungila direttamente tramite "Browse" nella stessa sezione.
4) Crea una variabile di tipo MyBlas
Dim Libreria As New MyBlas
e tramite i metodi della classe Libreria chiama le varie procedure e funzioni.

Presupposti per il corretto funzionamento del programma.

Le seguenti regole devono essere rispettate pena la visualizzazione di un errore (Nel caso si usi la classe MyBlas contenuta in MyVbBlas.Dll) o il blocco dell'applicazione (Se si usa direttamente la MyBlas.Dll)

Le matrici ed i vettori devono essere di tipo Double e iniziare dall'elemento (0,0) dunque definizioni del tipo
Dim b(5 To 20, -10 To 20) As Double
non possono essere utilizzate.

Le matrici ed i vettori devono avere una dimensione esattamente pari a quella necessaria senza eccedenze o deficienze ricordando che la definizione seguente
Dim a(10,10) as Double
alloca lo spazio per una matrice di 11 x 11 elementi (Da 0 a 10 compresi) e non 10 x 10 come potrebbe crede un programmatore C.
Dunque se si ha una matrice del tipo

1 2 3 4
2 9 5 2

la si dovrà definire in questo modo:
Dim a(1,3) as Double
e non in questo:
Dim a(2,4) as Double

NB: Questo tipo di errore non viene segnalato visto che non si può prevedere cosa l'utente voglia veramente fare e porta a risultati errati, dunque ... attenzione.


Torna alla Home page
Torna all'inizio
Prossimo progetto

1