2013-06-04 35 views
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)); 
      } 

这里是我的问题:

I think the standard-deviation spectra (in gray) should look the same?

我认为标准偏差谱(灰色)应该是一样的吗? 我随机检查标准偏差点,他们似乎是正确的。这可能是我的一个循环中的错误? 我希望有人体验相同,beacuase检查通过千点不好玩

在此先感谢。

回答

0

我不知道是否有在中间块注释

// Obere STD格朗兹

下一个错误?

当你想要调用stdSpec函数时,你在调用dt吗?

double.Parse(dt.Rows [I - 1] [0]的ToString()

double.Parse(stdSpec.dtCoords.Rows [I - 1] [0]

+0

修正,仍然无法正常工作,无论如何都是X值。就像我说的那样,所有光谱的x值都是一样的。 –