Listato - Funzione di Lagrange

                   Funzione di Lagrange
Vai ai contenuti

Menu principale:

Listato


Il salto programmatico

Come con Newton ora occorre spiegare "Il salto programmatico".
Questa pagina è dedicata soprattutto ai programmatori.

Il listato sotto calcola sia le funzioni di Newton che quelle di Lagrange.
Questo è possibile perchè il sottoprogramma "CombinazioniFunctioni"
vale per entrambi i calcoli, ed è quello di Newton.

Il sottoprogramma "Function_NG_NW" calcola le funzioni di Newton, mentre
il sottoprogramma "Function_NG_LG" calcola le funzioni di Lagrange.
nGrado è il grado della funzione mentre tXn(W) e tY(W) sono le Xn e le Yn
valgono per entrambi i sottoprogrammi.
Così come tAn(n) sono i dati di uscita per entrambi.

Il sottoprogramma "CombinazioniFunctioni" calcola il (c,e) , ed è quello di Newton.
La variabile nComb = numero delle combinazioni.
La variabile nElem = numero degli elementi.
La variabile tCEPC è il valore di uscita, cioè (c,e).

Valgono tutte le considerazioni fatte per Newton, per cui anche con Lagrange è
possibile arrivare al 99°.

-----------------------------------------------------------------------------------------------

Private Sub Function_NG_NW()
   On Error GoTo NextErr
   ''''''''''''''''''
   th = tXn(1) - tXn(0)
   ''''''''''''''''''
   For W = 1 To nGrado
   tz = tXn(W - 1) + th
   If tz <> tXn(W) Then GoTo NextErr
   Next
   ''''''''''''''''''
   For W = 0 To nGrado
   tyin(W) = tYn(W)
   Next
   ''''''''''''''''''
   For W = 1 To nGrado
   nGradoN = nGrado - W
   tdin(nGradoN) = tyin(nGradoN + 1) - tyin(nGradoN)
   Next
   For K = 1 To nGrado
   For W = 1 To nGrado - K
   nGradoN = nGrado - W
   tdin(nGradoN) = tdin(nGradoN) - tdin(nGradoN - 1)
   Next
   Next
   ''''''''''''''''''
   For W = 0 To nGrado - 1
   txin(W) = tXn(W)
   Next
   ''''''''''''''''''
   th = tXn(1) - tXn(0)
   ''''''''''''''''''
   t_in(0) = 1#
   For W = 1 To nGrado
   t_in(W) = t_in(W - 1) * W
   Next
   ''''''''''''''''''
   tain(0) = tyin(0)
   For W = 1 To nGrado
   tain(W) = tdin(W - 1) / (t_in(W) * th ^ W)
   Next
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   If nGrado = 1 Then nComb = 1: Call CombinazioniFunctioni: GoTo NextFine
   ''''''''''''''''''''''''''''''''' prima riga '''''''''''''''''''''''''''''
   tAn(nGrado) = tain(nGrado)
   ''''''''''''''''''''''''''''''' fine prima riga ''''''''''''''''''''''''''
   '''''''''''''''''''''''' prime due colonne per  n-2 righe ''''''''''''''''
   t_en(0) = txin(0)
   For W = 1 To nGrado - 1
   t_en(W) = t_en(W - 1) + txin(W)
   Next
   ''''''''''''''''''''''''''''''
   For nRig = 1 To nGrado - 1
   nGradoN = nGrado - nRig
   tAn(nGradoN) = tain(nGradoN) - tain(nGradoN + 1) * t_en(nGradoN)
   Next
   ''''''''''''''''''''' fine prime due colonne per  n-2 righe '''''''''''''
   For nRig = 2 To nGrado - 1
   nGradoN = nGrado - nRig
   nComb = 2
   nSegno = -1#
   For nCol = nGradoN + 2 To nGrado
   nElem = nCol - 1
   If nSegno = 1# Then nSegno = -1# Else nSegno = 1#
   Call CombinazioniFunctioni
   If EQZ_Err = -1 Then GoTo NextErr
   tAn(nGradoN) = tAn(nGradoN) + nSegno * tain(nCol) * tCEPC
   nComb = nComb + 1
   Next
   Next
   ''''''''''''''''''''''''''''''''' ultima riga ''''''''''''''''''''''''''''''
   txen(0) = txin(0)
   For W = 1 To nGrado - 1
   txen(W) = txen(W - 1) * txin(W)
   Next
   ''''''''''''''''''''''''''''''
   tAn(0) = tain(0)
   nSegno = 1#
   For nCol = 1 To nGrado
   If nSegno = 1# Then nSegno = -1# Else nSegno = 1#
   tAn(0) = tAn(0) + nSegno * tain(nCol) * txen(nCol - 1)
   Next
   ''''''''''''''''''''''''''  fine ultima riga ''''''''''''''''''''''''''''''
NextFine:
   Exit Sub
NextErr:
   EQZ_Err = -1
   lblFunz.Caption = Space(21) + "Function - Error"
End Sub

Private Sub Function_NG_LG()
   On Error GoTo NextErr
   For W = 0 To nGrado
   txin(W) = tXn(W)
   Next
   ''''''''''''''''''
   For W = 0 To nGrado
   tyin(W) = tYn(W)
   Next
   ''''''''''''''''''
   For W = 0 To nGrado
   tAn(W) = 1#
   Next
   ''''''''''''''''''
   For K = 0 To nGrado
   For W = 0 To nGrado
   If W <> K Then tAn(K) = tAn(K) * (txin(K) - txin(W))
   Next
   Next
   ''''''''''''''''''
   For W = 0 To nGrado
   tBn(W) = tyin(W) / tAn(W)
   Next
   ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   ''''''''''''''''''''''''''''''''' prima riga '''''''''''''''''''''''''''''
   tAn(nGrado) = 0#
   For W = 0 To nGrado
   tAn(nGrado) = tAn(nGrado) + tBn(W)
   Next
   ''''''''''''''''''''''''''''''' fine prima riga ''''''''''''''''''''''''''
   nSegno = -1#: If nGrado = 1 Then GoTo NextGradoUltimo
   ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   ''''''''''''''''''''''''''''''''' seconda riga '''''''''''''''''''''''''''
   tAn(nGrado - 1) = 0#
   For K = 0 To nGrado
   N = 0#
   For W = 0 To nGrado
   If W <> K Then N = N + txin(W)
   Next
   tAn(nGrado - 1) = tAn(nGrado - 1) + tBn(K) * N
   Next
   tAn(nGrado - 1) = nSegno * tAn(nGrado - 1)
   ''''''''''''''''''''''''''''''' fine seconda riga ''''''''''''''''''''''''''
   nSegno = 1#: If nGrado = 2 Then GoTo NextGradoUltimo
   ''''''''''''''''''''''''''''''''' n - 3  righe ''''''''''''''''''''''''''''''
   nElem = nGrado - 1
   For nRig = 2 To nGrado - 1
   nComb = nRig
   nGradoN = nGrado - nRig
   tAn(nGradoN) = 0#
   For nBn = 0 To nGrado
   Call Ordinamento: If EQZ_Err = -1 Then GoTo NextErr
   Call CombinazioniFunctioni: If EQZ_Err = -1 Then GoTo NextErr
   tAn(nGradoN) = tAn(nGradoN) + tBn(nBn) * tCEPC
   Next
   tAn(nGradoN) = nSegno * tAn(nGradoN)
   If nSegno = 1# Then nSegno = -1# Else nSegno = 1#
   Next
   ''''''''''''''''''''''''''''''' fine n - 3 riga ''''''''''''''''''''''''''''
NextGradoUltimo:
   ''''''''''''''''''''''''''''''''' ultima riga ''''''''''''''''''''''''''''''
   For W = 0 To nGrado
   txin(W) = tXn(W)
   Next
   ''''''''''''''''''
   tAn(0) = 0#
   For K = 0 To nGrado
   N = tBn(K)
   For W = 0 To nGrado
   If W <> K Then N = N * txin(W)
   Next
   tAn(0) = tAn(0) + N
   Next
   tAn(0) = nSegno * tAn(0)
   ''''''''''''''''''''''''''  fine ultima riga ''''''''''''''''''''''''''''''
NextFine:
   Exit Sub
NextErr:
   EQZ_Err = -1
   lblFunz.Caption = Space(21) + "Function - Error"
End Sub

Private Sub Ordinamento()
   On Error GoTo NextErr
   W = nBn + 1
   If W > nGrado Then W = 0
   For K = 0 To nGrado
   txin(K) = tXn(W)
   W = W + 1
   If W > nGrado Then W = 0
   Next
   Exit Sub
NextErr:
   EQZ_Err = -1
End Sub

Private Sub CombinazioniFunctioni()
   '**********************************************************************************************
   '//  Entrata  nComb    ////////////////////////////////////////////////////////////////////////
   '//  Entrata  nElem    ////////////////////////////////////////////////////////////////////////
   '//  Uscita   tCEPC    ////////////////////////////////////////////////////////////////////////
   On Error GoTo NextErr
   For W = 0 To 99: tJn(W) = 0#: tCnEX(W) = 0#: tkn(W) = 0#: Next
   For W = 0 To nComb: tkn(W) = CDbl(nComb - W): Next
   If nComb = 1 Then GoTo Next1a
   If nComb = 2 Then GoTo Next2a
   If nComb = 3 Then GoTo Next3a
   If nComb = 4 Then GoTo Next4
   If nComb = 5 Then GoTo Next5
   If nComb = 6 Then GoTo Next6
   If nComb = 7 Then GoTo Next7
   If nComb = 8 Then GoTo Next8
   If nComb = 9 Then GoTo Next9
   If nComb = 10 Then GoTo Next10
   If nComb = 11 Then GoTo Next11
   If nComb = 12 Then GoTo Next12
   If nComb = 13 Then GoTo Next13
   If nComb = 14 Then GoTo Next14
   If nComb = 15 Then GoTo Next15
   GoTo NextErr
   ''''''''''''''''''''''''''''''
   ''''' combinazione da 1 ''''''
Next1a:
   tAn(1) = tain(1)
   tAn(0) = tain(0) - tain(1) * txin(0)
   Exit Sub
   ''''' Fine combinazione da 1 ''''''
   ''''''''''''''''''''''''''''''
   ''''' combinazione da 2 ''''''
Next2a:
   J1 = 0#
   Call Comb2ElemX
   tCEPC = tC2EX
   Exit Sub
   ''''' Fine combinazione da 2 ''''''
   ''''''''''''''''''''''''''''''
   ''''' combinazione da 3 ''''''
Next3a:
   tC3EX = 0#
   For J1 = 1 To nElem - nComb + 2
   Call Comb2ElemX
   tC3EX = tC3EX + txin(J1 - 1) * tC2EX
   Next
   tCEPC = tC3EX
   Exit Sub
   ''''' Fine combinazione da 3 ''''''
   '''''''''''''''''''''''''''''''
   ''''' combinazione da n '''''''
   '''''''''''''''''''''''''''''''
   ''''' combinazione da 15 ''''''
Next15:
   tCnEX(15) = 0#
   tJn(13) = tJn(14) + 1
   ''''' combinazione da 14 ''''''
Next14:
   tCnEX(14) = 0#
   tJn(12) = tJn(13) + 1
   ''''' combinazione da 13 ''''''
Next13:
   tCnEX(13) = 0#
   tJn(11) = tJn(12) + 1
   ''''' combinazione da 12 ''''''
Next12:
   tCnEX(12) = 0#
   tJn(10) = tJn(11) + 1
   ''''' combinazione da 11 ''''''
Next11:
   tCnEX(11) = 0#
   tJn(9) = tJn(10) + 1
   ''''' combinazione da 10 ''''''
Next10:
   tCnEX(10) = 0#
   tJn(8) = tJn(9) + 1
   ''''' combinazione da 9 ''''''
Next9:
   tCnEX(9) = 0#
   tJn(7) = tJn(8) + 1
   ''''' combinazione da 8 ''''''
Next8:
   tCnEX(8) = 0#
   tJn(6) = tJn(7) + 1
   ''''' combinazione da 7 ''''''
Next7:
   tCnEX(7) = 0#
   tJn(5) = tJn(6) + 1
   ''''' combinazione da 6 ''''''
Next6:
   tCnEX(6) = 0#
   tJn(4) = tJn(5) + 1
   ''''' combinazione da 5 ''''''
Next5:
   tCnEX(5) = 0#
   tJn(3) = tJn(4) + 1
   ''''' combinazione da 4 ''''''
Next4:
   tCnEX(4) = 0#
   tJn(2) = tJn(3) + 1
Next3:
   tCnEX(3) = 0#
   For J1 = tJn(2) + 1 To nElem - nComb + tkn(1)
   Call Comb2ElemX
   tCnEX(3) = tCnEX(3) + txin(J1 - 1) * tC2EX
   Next
   tCnEX(4) = tCnEX(4) + txin(tJn(2) - 1) * tCnEX(3)
   tJn(2) = tJn(2) + 1
   If tJn(2) <= nElem - nComb + tkn(2) Then GoTo Next3
   If nComb = 4 Then tCEPC = tCnEX(4): Exit Sub
   ''''' Fine combinazione da 4 ''''''
   tCnEX(5) = tCnEX(5) + txin(tJn(3) - 1) * tCnEX(4)
   tJn(3) = tJn(3) + 1
   If tJn(3) <= nElem - nComb + tkn(3) Then GoTo Next4
   If nComb = 5 Then tCEPC = tCnEX(5): Exit Sub
   ''''' Fine combinazione da 5 ''''''
   tCnEX(6) = tCnEX(6) + txin(tJn(4) - 1) * tCnEX(5)
   tJn(4) = tJn(4) + 1
   If tJn(4) <= nElem - nComb + tkn(4) Then GoTo Next5
   If nComb = 6 Then tCEPC = tCnEX(6): Exit Sub
   ''''' Fine combinazione da 6 ''''''
   tCnEX(7) = tCnEX(7) + txin(tJn(5) - 1) * tCnEX(6)
   tJn(5) = tJn(5) + 1
   If tJn(5) <= nElem - nComb + tkn(5) Then GoTo Next6
   If nComb = 7 Then tCEPC = tCnEX(7): Exit Sub
   ''''' Fine combinazione da 7 ''''''
   tCnEX(8) = tCnEX(8) + txin(tJn(6) - 1) * tCnEX(7)
   tJn(6) = tJn(6) + 1
   If tJn(6) <= nElem - nComb + tkn(6) Then GoTo Next7
   If nComb = 8 Then tCEPC = tCnEX(8): Exit Sub
   ''''' Fine combinazione da 8 ''''''
   tCnEX(9) = tCnEX(9) + txin(tJn(7) - 1) * tCnEX(8)
   tJn(7) = tJn(7) + 1
   If tJn(7) <= nElem - nComb + tkn(7) Then GoTo Next8
   If nComb = 9 Then tCEPC = tCnEX(9): Exit Sub
   ''''' Fine combinazione da 9 ''''''
   tCnEX(10) = tCnEX(10) + txin(tJn(8) - 1) * tCnEX(9)
   tJn(8) = tJn(8) + 1
   If tJn(8) <= nElem - nComb + tkn(8) Then GoTo Next9
   If nComb = 10 Then tCEPC = tCnEX(10): Exit Sub
   ''''' Fine combinazione da 10 ''''''
   tCnEX(11) = tCnEX(11) + txin(tJn(9) - 1) * tCnEX(10)
   tJn(9) = tJn(9) + 1
   If tJn(9) <= nElem - nComb + tkn(9) Then GoTo Next10
   If nComb = 11 Then tCEPC = tCnEX(11): Exit Sub
   ''''' Fine combinazione da 11 ''''''
   tCnEX(12) = tCnEX(12) + txin(tJn(10) - 1) * tCnEX(11)
   tJn(10) = tJn(10) + 1
   If tJn(10) <= nElem - nComb + tkn(10) Then GoTo Next11
   If nComb = 12 Then tCEPC = tCnEX(12): Exit Sub
   ''''' Fine combinazione da 12 ''''''
   tCnEX(13) = tCnEX(13) + txin(tJn(11) - 1) * tCnEX(12)
   tJn(11) = tJn(11) + 1
   If tJn(11) <= nElem - nComb + tkn(11) Then GoTo Next12
   If nComb = 13 Then tCEPC = tCnEX(13): Exit Sub
   ''''' Fine combinazione da 13 ''''''
   tCnEX(14) = tCnEX(14) + txin(tJn(12) - 1) * tCnEX(13)
   tJn(12) = tJn(12) + 1
   If tJn(12) <= nElem - nComb + tkn(12) Then GoTo Next13
   If nComb = 14 Then tCEPC = tCnEX(14): Exit Sub
   ''''' Fine combinazione da 14 ''''''
   tCnEX(15) = tCnEX(15) + txin(tJn(13) - 1) * tCnEX(14)
   tJn(13) = tJn(13) + 1
   If tJn(13) <= nElem - nComb + tkn(13) Then GoTo Next14
   If nComb = 15 Then tCEPC = tCnEX(15): Exit Sub
   ''''' Fine combinazione da 15 ''''''
   Exit Sub
NextErr:
   EQZ_Err = -1
End Sub

Private Sub Comb2ElemX()
   On Error GoTo NextErr
   tC2EX = 0#
   For J = J1 + 1 To nElem
   tC1EX = 0#
   For W = J To nElem
   tC1EX = tC1EX + txin(W)
   Next
   tC2EX = tC2EX + txin(J - 1) * tC1EX
   Next
   Exit Sub
NextErr:
   EQZ_Err = -1
End Sub
'************************************************************************
----------------------------------------------------------------------------------------------------------------------------------------





 
di  Ambrosini  Cesare
Torna ai contenuti | Torna al menu