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.
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 |
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.