gpt4 book ai didi

c# - 如何在c#中绘制高斯曲线

转载 作者:行者123 更新时间:2023-11-30 14:46:19 29 4
gpt4 key购买 nike

我有一个包含以下数据的直方图统计条形图。

Count, HistogramBin
0, -1615.25
0, -1056.42
0, -497.48
1, 61.25
1, 620.05
1, 1178.92
0, 1737.76
0, 2296.59

我需要根据上述值形成高斯曲线。谁能指导我如何实现同样的目标。

我写了一个基于维基百科链接的函数:https://en.wikipedia.org/wiki/Gaussian_function

我们的平均值是:340.67SD:标准差:488.98001098632812

 private DataTable GenerateGaussTable1(DataTable histogramDataTable, 
HistogramValueItem histogramValueDBItem)
{
double amplitude = (Average + 3 * Sigma) / 2;
double mean = Average;
double sd = Sigma;
DataTable dt = new DataTable();
dt.Columns.Add("x", typeof(float));
dt.Columns.Add("Y", typeof(float));
foreach (DataRow row in histogramDataTable.Rows)// top provided data
{
double x = Convert.ToDouble(row[1]) / 2;
double var1 = 1 / sd * Math.Sqrt(2 * 3.14);
double var2 = -0.5 * Math.Pow((x - mean)/sd, 2);

double var4= Math.Exp(var2);
double var5 = var1 * var4;
// Y = Amplitude * exp(-0.5 * ((X - Mean) / SD) ^ 2)
double y = var5;
dt.Rows.Add((float)x, (float)y);
}
return dt;
}

最佳答案

enter image description here

这是我的代码:

double gauss(double x, double a, double b, double c)
{
var v1 = ( x - b) / (2d * c * c);
var v2 = -v1 * v1 / 2d;
var v3 = a * Math.Exp(v2);

return v3;
}

和:

private void button_Click(object sender, EventArgs e)
{
Series s1 = chart2.Series[0];
s1.ChartType = SeriesChartType.Line;
s1.Name = "Line";
Series s2 = chart2.Series.Add("Spline");
s2.ChartType = SeriesChartType.Spline;

double avg = 1.8;
double amp = 3;
double sd = 0.53;

List<double> xes = new List<double>
{ 0, 0, 0.05, 0.1, 0.4, 0.9, 1.3, 1.6, 2, 2.4, 2.8, 3.2, 4 };

foreach (var x in xes)
{
s1.Points.AddXY(x, gauss(x, amp, avg, sd));
s2.Points.AddXY(x, gauss(x, amp, avg, sd));
}
}

数学取自wikipedia

我认为您的 SD 太大,无法创建钟形曲线;尝试除以 10-100..! - 当然,你的 SD 实际上非常大,所以你真的不会为这些数据获得有意义的钟形曲线..

关于c# - 如何在c#中绘制高斯曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49674294/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com