Normal distribution
Imports Oxyplot.Axes
Imports Oxyplot.Series
Public Class Form
Private Sub Form_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim Model = New PlotModel With {
.Title = "Normal distribution",
.Subtitle = "Probability density function",
.Background = OxyColors.White
}
Dim linearAxisY = New LinearAxis With {
.Position = AxisPosition.Left,
.Minimum = -0.05,
.Maximum = 1.05,
.MajorStep = 0.2,
.MinorStep = 0.05,
.TickStyle = TickStyle.Inside
}
Model.Axes.Add(linearAxisY)
Dim linearAxisX = New LinearAxis With {
.Position = AxisPosition.Bottom,
.Minimum = -5.25,
.Maximum = 5.25,
.MajorStep = 1,
.MinorStep = 0.25,
.TickStyle = TickStyle.Inside
}
Model.Axes.Add(linearAxisX)
Model.Series.Add(CreateNormalDistributionSeries(-5, 5, 0, 0.2))
Model.Series.Add(CreateNormalDistributionSeries(-5, 5, 0, 1))
Model.Series.Add(CreateNormalDistributionSeries(-5, 5, 0, 5))
Model.Series.Add(CreateNormalDistributionSeries(-5, 5, -2, 0.5))
PlotView.Model = Model
End Sub
Private Function CreateNormalDistributionSeries(ByVal x0 As Double, ByVal x1 As Double, ByVal mean As Double, ByVal variance As Double, Optional ByVal n As Integer = 1001) As DataPointSeries
Dim ls = New LineSeries With {
.Title = String.Format("μ={0}, σ²={1}", mean, variance)
}
For i As Integer = 0 To n - 1
Dim x As Double = x0 + ((x1 - x0) * i / (n - 1))
Dim f As Double = 1.0 / Math.Sqrt(2 * Math.PI * variance) * Math.Exp(-(x - mean) * (x - mean) / 2 / variance)
ls.Points.Add(New DataPoint(x, f))
Next i
Return ls
End Function
End Class

0 件のコメント:
コメントを投稿