'' Relaione di statistica Relaione del programma di statistica: Curva di Gauss. Vincoli imposti dal problema : Calcolare l area di probabilità compresa tra due intervalli(, ), sottostante la curva normale standardiata detta curva di Gauss. Visualiare il risultato con un grafico che evideni l area di probabilità. 1 Specifiche integrate : e d Per calcolare l integrale ' non è possibile applicare il normale procedimento, perché il risultato non è esprimibile tramite funioni elementari; inoltre non è neppure possibile calcolare il valore esatto dell integrale definito nell intervallo[, ]. Si può affrontare il problema dal punto di vista numerico utiliando il seguente sviluppo di serie di potene: G( ) 1 1 e d 0 n0 Questa serie permette il calcolo dell integrale definito nell intervallo[0, ], per calcolarlo tra e bisogna sottrarli entrambi: G('' )- G ('). Il valore esatto dell integrale si avrebbe sommando infiniti termini, per avere un approssimaione di almeno 10 cifre ho usato una settantina di somme. Struttura dati: Nome I O L v/c Descriione Tipo Double C Numero di Neplero(e=.718818845905) Double C Pigreco =3.1415965358979 Double 1 V Intervallo inferiore Single V Intervallo superiore Single Z V Area della probabilità Double min, Max V Limiti del disegno Single m V Margine del disegno Single Queste variabili sono dichiarate nella seione generale del form1. 1 Legenda I = input, O = output, L = lavoro, v/c = variabile o costante Procedure : 1 CalcolaArea: Calcola l area di probabilità con il calcolo della serie di somme, alla variabile globale Z viene prima sommata, con un ciclo For, la serie che rappresenta l intervallo[0, ], poi viene sottratta la serie che rappresenta l intervallo[0, ]. In fine Z assume il valore dell integrale definito nell intervallo[, ] moltiplicandola per La variabile viene arrotondata a 10 cifre e visualiata sul Form. DisegnaArea: Disegna l area che rappresenta la probabilità compresa tra i due intervalli[, ], con l uso di linee verticali disegnate con uno step adeguato. 3 DisegnaGauss: Disegna la curva di Gauss, gli assi e la loro numeraione; con l utilio dei margini che sono ricavati dal massimo e dal minimo.(m =(Max - min) / 10) 4 fattoriale: Function che calcola il fattoriale, del numero Integer passato alla funione, e ne restituisce uno Double. 5 y: Function che contiene la funione di Gauss, il valore Double passato alla funione rappresenta la variabile indipendente x che nella funione di Gauss è indicata con la lettera. Restituisce un valore Double che contiene la coordinata y nel punto d ascissa x. n n 1 n1 n! 1 Marco Cibelli Pagina 1 di 6 5 C Informatica.
Spiegaione del funionamento del programma : Il programma ha un utilio estremamente semplice, all apertura viene disegnata la curva di Gauss. All utente è richiesto solo l inserimento degli intervalli, di cui si vuol calcolare l area di probabilità. I valori vanno inseriti nelle apposite Text, durante la digitaione viene evideniata nel disegno l area compresa tra gli intervalli, e il valore numerico della probabilità. L utente ha a disposiione dal Menù due opioni: 1 Ricomincia: Aera le variabili e riporta il Form nelle condiioni iniiali. Esci: Chiude l applicaione e torna a Windows. Codice: Const e As Double =.718818845905 'Neplero Const As Double = 3.1415965358979 'Pigreco Dim 1 As Single 'Intervallo inferiore Dim As Single 'Intervallo superiore Dim Z As Double 'Area della probabilità Dim min, Max As Single 'Limiti del disegno Dim m As Single 'Margine del disegno Private Sub Form_Load() min = -5 Max = 5 1 = 0 = 0 Z = 0 Text1.Text = "" Text.Text = "" Text3.Text = "" Private Sub Mnu1_Click(Index As Integer) Select Case Index Case 0 Form_Load Case 1 End End Select Private Sub Text1_Change() If Not IsNumeric(Text1.Text) And Text1.Text <> "" And Text1.Text <> "-" Then MsgBox "È possibile inserire solo numeri reali.", vbcritical, "Error!!!" Text1.Text = "" Text1.SetFocus If IsNumeric(Text.Text) Or Text.Text = "" Then 1 = Val(Text1.Text) Call DisegnaArea Private Sub Text_Change() If Not IsNumeric(Text.Text) And Text.Text <> "" And Text.Text <> "-" Then Marco Cibelli Pagina di 6 5 C Informatica.
MsgBox "È possibile inserire solo numeri reali.", vbcritical, "Error!!!" Text.Text = "" Text.SetFocus If IsNumeric(Text1.Text) Or Text1.Text = "" Then = Val(Text.Text) Call DisegnaArea Public Sub DisegnaArea() Dim i As Double Dim step As Single min = -5 Max = 5 Z = 0 If min > 1 Then min = 1 If Max < Then Max = 'Area soto la curva di Gauss If Sgn( - 1) > 0 Then step = 0.01 step = -0.01 For i = 1 To Step step Picture1.Line (i, 0)-(i, y(i)), RGB(0, 19, 55) Picture1.Line (1, -0.03)-(1, y(cdbl(1))), RGB(0, 0, 55) Picture1.CurrentX = 1 - Picture1.TextWidth("'") / Picture1.CurrentY = -0.03 Picture1.Print "'" Picture1.Line (, -0.03)-(, y(cdbl())), RGB(0, 0, 55) Picture1.CurrentX = - Picture1.TextWidth("''") / Picture1.CurrentY = -0.03 Picture1.Print "''" Call CalcolaArea Public Sub DisegnaGauss() Dim i As Double m = (Max - min) / 10 Picture1.Scale (min - m, 0.5)-(Max + m, -0.05) 'Asse X() Picture1.Line (min - m, 0)-(Max + m, 0), RGB(0, 55, 0) Picture1.CurrentX = Max Picture1.CurrentY = 0.0 Picture1.Print "" 'Asse Y(Z) Picture1.Line (0, 0.5)-(0, -0.05), RGB(0, 55, 0) Marco Cibelli Pagina 3 di 6 5 C Informatica.
Picture1.CurrentX = 0 + m / 4 Picture1.CurrentY = 0.49 Picture1.Print "Z" 'Curva di Gauss For i = min - m To Max + m Step 0.01 Picture1.Line (i, y(i))-(i + 0.01, y(i + 0.01)), RGB(0, 0, 55) 'Numeraione For i = 0.1 To 0.5 Step 0.1 Picture1.Line (0 - m / 4, i)-(m / 4, i), RGB(0, 55, 0) Picture1.CurrentX = -m Picture1.CurrentY = i + 0.01 Picture1.Print CStr(i) For i = CInt(min) To -1 Picture1.Line (i, -0.005)-(i, 0.005), RGB(0, 55, 0) Picture1.CurrentX = i - Picture1.TextWidth(CStr(i)) / Picture1.CurrentY = -0.01 Picture1.Print CStr(i) For i = 1 To CInt(Max) Picture1.Line (i, -0.005)-(i, 0.005), RGB(0, 55, 0) Picture1.CurrentX = i - Picture1.TextWidth(CStr(i)) / Picture1.CurrentY = -0.01 Picture1.Print CStr(i) Public Function y(x As Double) As Double y = (1 / Sqr( * )) * e ^ (-(x ^ ) / ) End Function Public Sub CalcolaArea() Dim n As Integer Z = 0 For n = 0 To ( * ) + 75 Z = Z + ((-0.5) ^ n) * (( ^ ( * n + 1)) / (( * n + 1) * fattoriale(n))) Next n For n = 0 To ( * 1) + 75 Z = Z - ((-0.5) ^ n) * ((1 ^ ( * n + 1)) / (( * n + 1) * fattoriale(n))) Next n Z = Z * (1 / Sqr( * )) Text3.Text = CStr(Round(Z, 10)) Public Function fattoriale(x As Integer) As Double Dim i As Integer fattoriale = 1 For i = 1 To x fattoriale = fattoriale * i End Function Interfaccia: Ecco alcuni esempi di possibili esercii svolti dal programma: Marco Cibelli Pagina 4 di 6 5 C Informatica.
Marco Cibelli Pagina 5 di 6 5 C Informatica.
Firma Marco Cibelli Pagina 6 di 6 5 C Informatica.