111,093
社区成员




def Chauvenet(v):
c = {5:1.65, 6:1.73, 7:1.8, 8:1.86, 9:1.92, 10:1.96, 11:2, 12:2.03}
n = len(v)
ave = getAve(v)
stdDev = getStdDev(v)
if len(v) < 5:
print("数据少于5个,请检查")
else:
Xmin = ave - (c[n]*stdDev)
Xmax = ave + (c[n]*stdDev)
nv = []
bv = []
for i in range(n):
if Xmin < v[i] < Xmax:
nv.append(v[i])
else:
bv.append(v[i])
if len(bv) == 0:
print(str(v))
print("该数据没有坏值")
print()
return nv
else:
print(str(v))
print("该数据有坏值,分别是:")
for i in range(len(bv)):
print(bv)
print()
return Chauvenet(nv)
public static List<double> Chauvenet(List<double> v) {
Dictionary<int, double> c = new Dictionary<int, double>() {
{ 5,1.65},
{ 6,1.73},
{ 7,1.8},
{ 8,1.86},
{ 9,1.92},
{ 10,1.96},
{ 11,2},
{ 12,2.03},
};
int n = v.Count;
var ave = v.Sum() / n;
double Xmin =0, Xmax = 0;
double stdDev = getStdDev(v);
if (n < 5)
{
Console.WriteLine("数据少于5个,请检查");
}
else {
Xmin = ave - (c[n] * stdDev);
Xmax = ave + (c[n] * stdDev);
}
List<double> nv = new List<double>();
List<double> bv = new List<double>();
for (var i = 0; i < n; i++) {
if (Xmin < v[i] && v[i] < Xmax)
{
nv.Add(v[i]);
}
else {
bv.Add(v[i]);
}
}
if (bv.Count == 0)
{
Console.WriteLine(string.Join("", v));
Console.WriteLine("该数据没有坏值");
Console.WriteLine();
return nv;
}
else {
Console.WriteLine(string.Join("", v.Select(x => x.ToString())));
Console.WriteLine("该数据有坏值,分别是:" + string.Join(Environment.NewLine, bv));
Console.WriteLine();
}
return Chauvenet(nv);
}
/// <summary>
/// 标准差
/// </summary>
/// <param name="v"></param>
/// <returns></returns>
private static double getStdDev(List<double> numberList)
{
double ave = numberList.Sum() / numberList.Count;
double sumOfSquare = 0; //平方总和
foreach (var item in numberList)
{
sumOfSquare += Math.Pow((item - ave),2);
}
return Math.Sqrt(sumOfSquare / (numberList.Count - 1));
}