Calcolo delle funzioni di Bessel in Visual Basic

Nello studio delle caratteristiche di direttività di alcune particolari basi idrofoniche circolari che ricevono il suono nella direzione perpendicolare al piano d’appoggio, vedi figure o e o’ :

si deve ricorre al computo delle funzioni di Bessel, o per via tabellare o con routine di calcolo.

L'algoritmo di direttività

modifica

Questo tipo di direttività, indicato con  , è governato dall'algoritmo espresso da una funzione di Bessel ordine zero:

 

 

Dove

 

in cui:

  diametro della base

  angolo di provenienza del suono rispetto all'asse del piano dove giace la base

 

  frequenza media geometrica della banda delle frequenze ricevute.

Il calco di   è valido se sussiste la condizione  

dove   è il numero degli idrofoni che compongono la base

Il listato del programma in Visual Basic

modifica

La valutazione tabellare è per valori discreti, migliore definizione di calcolo si ha con una routine software in Visual Basic il cui listato a seguire:

Listato del programma

‘Da trasferire in ambiente VB con copia/incolla

Dim s1 As Double

Dim i1 As Double

Dim p1 As Double

Dim y1 As Double

Dim x1 As Double

Private Sub text1_KeyPress(KeyAscii As Integer)

If InStr("-+.0123456789" + Chr(&H8), Chr(KeyAscii)) = 0

Then KeyAscii = 0

End Sub

Private Sub text2_KeyPress(KeyAscii As Integer)

If InStr("-+.0123456789" + Chr(&H8), Chr(KeyAscii)) = 0

Then KeyAscii = 0

End Sub

Private Sub text3_KeyPress(KeyAscii As Integer)

InStr("-+.0123456789" + Chr(&H8), Chr(KeyAscii)) = 0 Then KeyAscii = 0

End Sub

Private Sub Command1_Click()

Label2.Caption = ""

Cls

If Combo1.Text = "n = 0" Then n = 0

If Combo1.Text = "n = 1" Then n = 1

If Combo1.Text = "n = 2" Then n = 2

z = Val(Text1.Text)

s1 = Val(Text2.Text)

If s1 = 0 Then s1 = 0.0001

i1 = 0

a1 = 0

b1 = 3.14159265

For x1 = 0 To b1 Step s1

y1 = (1 / 3.14159265) * Cos(z * Sin(x1) - n * x1)

p1 = y1 * s1

i1 = p1 + i1

PSet (1200 + 610 * x1, 3500), vbRed

Next x1

Dim ns As String

Dim i1s As String

Dim zs As String


zs = z

ns = n

i1s = Format(i1, "#.#####")

Label2.Caption = "J" + ns + "(" + zs + " ) = " + i1s

Circle (1200 + 610 * 3.14, 3500), 44, vbRed

End Sub

‘ Nel combo si devono listare i numeri: 0; 1; 2

Pannello di comando su P.C.

modifica

Per l’impiego della routine si realizza un pannello di comando con alcuni oggetti: un combo, un textbox, un pulsante, un label nascosto sotto il pulsante calcolo, come mostra la figura 1:

 
figura 1

Impiego del calcolatore

modifica

L’impiego del calcolatore è semplice:

-si selezione sul combo l’ordine n della funzione da computare -si digita nel TextBox l’argomento x della funzione -si pigia il pulsante calcolo

a seguito dell’azione sul pulsante sotto di esso si sviluppa, in crescendo, un segmento rosso che indica che la routine sta girando regolarmente, alla fine della computazione all’estremità destra del segmento compare un cerchietto e contemporaneamente, sotto di esso il valore Jn(x) .

Un esempio

modifica

In figura 2 il computo di j2 per x = 0.4563:

j2 =0.94862

 
figura 2

Bibliografia

modifica
  • F. Balena, Visual Basic-il linguaggio-, Mondadori Informatica, 2008
  • G.Frantz, Programmare con Visual Basic, Apogeo 1996
  • M.Padovani, Visual Basic flash, Apogeo, 1997
  • D. Inmann B. Albrecht Programmare in Quik Basic,McGraw-Hill, Marzo 1991
  • C. Del Turco, La matematica con il personal computer- Metodi matematici e grafici in QBasic, Editrice MODERNA La Spezia, 1998