1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
' Model Surface is Y = a + bX1 + cX2 + dX1X2 + eX1^2 + fX2^2
Imports MathNet
Imports MathNet.Numerics
Imports MathNet.Numerics.LinearRegression
Imports System.Text
Public Class FormModelSurface
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Solve()
End Sub
Private Sub Solve()
' coeff constants ,a,b,c,d,e,f
' Nota Bene :6 coeffs
Dim impvol(5) As Double
impvol = New Double() {10.0, 15.0, -7.0, 5.0, 9.0, -9.0}
' Nota Bene : 6 variables explicatives (xi,yi)
' STRIKE & DTE
' ces longues lignes de code sont données à des fins explicatives
Dim predictorsX1X2(5)() As Double
predictorsX1X2(0) = New Double() {2.0, 5.0} ' MN
predictorsX1X2(1) = New Double() {2.0, 5.0}
predictorsX1X2(2) = New Double() {2.0, 5.0}
predictorsX1X2(3) = New Double() {4.0, 7.0} ' STRIKE
predictorsX1X2(4) = New Double() {4.0, 7.0}
predictorsX1X2(5) = New Double() {4.0, 7.0}
' l'initiation de predictorsX1X2 peut se faire ainsi
'Dim predictorsX1Y1()() As Double =
' {
' New Double() {2.0, 5.0}, New Double() {2.0, 5.0}, New Double() {2.0, 5.0},
' New Double() {4.0, 7.0}, New Double() {4.0, 7.0}, New Double() {2.0, 7.0}
' }
'les basis functions
Dim p00 = Function(x() As Double) 1.0 'constante a
Dim p11 = Function(x() As Double) x(0) 'bX1
Dim p12 = Function(x() As Double) x(1) 'cX2
Dim p22 = Function(x() As Double) x(0) * x(1) 'dX1X2
Dim p31 = Function(x() As Double) x(0) ^ 2 'eX1¨2
Dim p32 = Function(x() As Double) x(1) ^ 2 'fX2^2
Dim ss As Func(Of Double(), Double)
'l'appel de l'API se fait simplement ainsi
' et Dieu reconaitra les siens
Dim regparams1() As Double =
Fit.LinearMultiDim(
predictorsX1X2,
impvol,
p00,
p11,
p12,
p22,
p31,
p32
)
Me.TextBox1.Text = PrintResult(regparams1)
Try
'quant à ce code ,sans les "basis functions"
's'il compile ;il leve une exception à l'éxecution
' car Fit.LinearMultiDim ,ne comporte aucune signature
' sans les "basis functions"
Dim regparams2() As Double =
Fit.LinearMultiDim(
predictorsX1X2,
impvol,
DirectRegressionMethod.QR,
p00,
p11,
p12,
p22,
p31,
p32)
Me.TextBox2.Text = PrintResult(regparams2)
Catch ex As Exception
MessageBox.Show("Conversion Error (Vol Surface)")
Exit Sub
End Try
End Sub
Private Function PrintResult(arr() As Double) As String
Dim sb As New StringBuilder()
For i As Integer = 0 To arr.Length - 1
sb.AppendLine(arr(i).ToString())
Next
Return sb.ToString()
End Function
End Class |
Partager