0
我想显示一个谱图,它是上下偏差。因此,我有一个Class,“SpectrumClass”,其中cooridantes存储在DataTable(dtCoords)中。如何计算并显示标准偏差?
我显示的光谱是其他几个光谱的平均值。蒙山那些我计算标准偏差如下光谱(全光谱具有数据点的相同金额):
DataTable dt = new DataTable();
DataColumn columnX = new DataColumn("X");
DataColumn columnY = new DataColumn("Y");
dt.Columns.Add(columnX);
dt.Columns.Add(columnY);
SpectrumClass stdSpectrum = new SpectrumClass(0,"Standard deviation",dt);
//Iterate through each Intensity value
for (int i = 0; i < specs[0].dtCoords.Rows.Count; i++)
{
double rShift = 0;
double IntensitySum = 0;
//Calculate std-Points for each Intensity value
foreach(SpectrumClass spec in specs)
{
IntensitySum += Convert.ToDouble(spec.dtCoords.Rows[i][1], System.Globalization.CultureInfo.InvariantCulture);
rShift = Convert.ToDouble(spec.dtCoords.Rows[i ][0], System.Globalization.CultureInfo.InvariantCulture);
}
//Averge-value (Mittelwert)
IntensitySum /= specs.Count;
//Varianz
double variance = 0;
foreach (SpectrumClass spec in specs)
{
//Here IntensitySum is the average value
variance += ((Convert.ToDouble(spec.dtCoords.Rows[i][1], System.Globalization.CultureInfo.InvariantCulture) - IntensitySum) * (Convert.ToDouble(spec.dtCoords.Rows[i][1], System.Globalization.CultureInfo.InvariantCulture) - IntensitySum));
}
//Std-Point
double stdValue = variance /(specs.Count-1);
stdValue = Math.Sqrt(stdValue);
stdSpectrum.dtCoords.Rows.Add(rShift.ToString(System.Globalization.CultureInfo.InvariantCulture), stdValue.ToString(System.Globalization.CultureInfo.InvariantCulture));
}
return stdSpectrum;
后来,当涉及到视觉部分,我创建了两个新的系列应包含上下偏差。在这里,我只是简单地为平均光谱的相应点添加或减去Y值。
for (int i = dt.Rows.Count; i > 0;i--)
{
//Obere STD grenze
if (expMeas.Count > 1)
{
ExpChart.Series["STD+"].Points.AddXY(double.Parse(stdSpec.dtCoords.Rows[i - 1][0].ToString(), System.Globalization.CultureInfo.InvariantCulture)
, double.Parse(dt.Rows[i - 1][1].ToString(), System.Globalization.CultureInfo.InvariantCulture) + double.Parse(stdSpec.dtCoords.Rows[i - 1][1].ToString(), System.Globalization.CultureInfo.InvariantCulture));
ExpChart.Series["STD-"].Points.AddXY(double.Parse(stdSpec.dtCoords.Rows[i - 1][0].ToString(), System.Globalization.CultureInfo.InvariantCulture)
, double.Parse(dt.Rows[i - 1][1].ToString(), System.Globalization.CultureInfo.InvariantCulture) - double.Parse(stdSpec.dtCoords.Rows[i - 1][1].ToString(), System.Globalization.CultureInfo.InvariantCulture));
}
ExpChart.Series["Spectrum"].Points.AddXY(double.Parse(stdSpec.dtCoords.Rows[i - 1][0].ToString(), System.Globalization.CultureInfo.InvariantCulture)
, double.Parse(dt.Rows[i - 1][1].ToString(), System.Globalization.CultureInfo.InvariantCulture));
}
这里是我的问题:
我认为标准偏差谱(灰色)应该是一样的吗? 我随机检查标准偏差点,他们似乎是正确的。这可能是我的一个循环中的错误? 我希望有人体验相同,beacuase检查通过千点不好玩
在此先感谢。
修正,仍然无法正常工作,无论如何都是X值。就像我说的那样,所有光谱的x值都是一样的。 –