# 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’ :
* Immagini non in scala
* Figura 0
* Figura 0'
si deve ricorre al computo delle funzioni di Bessel, o per via tabellare o con routine di calcolo.

### L'algoritmo di direttività

Questo tipo di direttività, indicato con $C(a)$, è governato dall'algoritmo espresso da una funzione di Bessel ordine zero:
$C(a)=Jo(Z)$
$J_{0}=\int _{0}^{\pi }{\cos \ [z\cdot \cos \ (q)]}\,dq$
Dove
$z=[(6.28318\cdot d/\lambda )\cdot \sin \ (a/2)]$
in cui:
$d=$ diametro della base
$a=$ angolo di provenienza del suono rispetto all'asse del piano dove giace la base
$\lambda =1530/f$
$f=$ frequenza media geometrica della banda delle frequenze ricevute.
Il calco di $C(a)$ è valido se sussiste la condizione $n\geq (6.28\cdot d/\lambda )+2$
dove $n$ è il numero degli idrofoni che compongono la base

### Il listato del programma in Visual Basic

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.

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:

### Impiego del calcolatore

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

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