SPC
from https://www.researchmfg.com/2016/03/cpk-1-33/
Cpk的計算公式有兩種方法,但基本上結果都是一樣的
Ck = (M-X)/(T/2),M:規格中心值,X:量測數據平均值,T:規格寬度Cp = T/6σ,T:規格寬度,σ:量測數據的標準差Cpk = (1-Ck) x Cp
第二種Cpk的計算公式分別使用規格上下限來計算取最小值就是Cpk:
Cpu(管制上限)= (USL-u)/3σ,
USL(Upper Control Limit,UCL)和:規格上限,u:量測數據平均值, σ:量測數據的標準差Cpl(管制下限 )= (u-LSL)/3σ,
LSL(Lower Control Limit,LCL):規格下限,u:量測數據平均值, σ:量測數據的標準差Cpk(Process Capability Index) = min{Cpl, Cpu},也就是算出Cpu, Cpl後,取兩者中的最小值就是Cpk。
from http://www.researchmfg.com/2011/08/six-sigma-iv/
標準差的計算則是將這種屬於常態分佈的每個個體的值減去平均中心值,然後平方相加,再除以總個位數,最後開平方根就得出了σ(標準差)。有點複雜,但基本上有點像在計算「離散度」,這個數字越小,就表示所有個體間的數值差異越小,也就是每個個體的值趨近於一致,常態分佈就越窄;如果這個數字越大,就表示所有個體間的數值差異越大,個體與個體的數值差距大,常態分佈就越廣(寬)。
其計算式如下:
![]()
N:計算樣品的總個位數μ:樣品的平均中心值χi:個體的數值
from https://stackoverflow.com/questions/5336457/how-to-calculate-a-standard-deviation-array
Using lambdas
double[] someDoubles = { 34.6, 45.1, 55.5, 78.5, 84.66, **1400.32**, 99.04, 103.99 };
double average = someDoubles.Average();
double sumOfSquaresOfDifferences = someDoubles.Select(val => (val - average) * (val - average)).Sum();
double sd = Math.Sqrt(sumOfSquaresOfDifferences / someDoubles.Length);
sd variable will have the standard deviation.
from http://silanors.blogspot.com/2011/06/c.html
使用 C#求標準差
解決方法
- /// <summary>
- /// 標準差(StandardDifference)
- /// </summary>
- /// <param name="val">歷史報酬率</param>
- /// <returns>標準差</returns>
- private double GetSD(List<double> val)
- {
- double avg = AVG(val);
- //double _result = 0;
- //foreach (double d in val) _result += Math.Pow(d - avg, 2);
- double _result =(from a in val
- select Math.Pow(a - avg, 2)).Sum();
- double _sum = _result / (double)(val.Count - 1);
- double _Sqrt = Math.Sqrt(_sum);
- return _Sqrt;
- }
- private double AVG(List<double> val)
- {
- double _avg = SUM(val) / (double)val.Count;
- return _avg;
- }
- private double SUM(List<double> val)
- {
- var _sum = (from g in val
- select g).Sum();
- return _sum;
- }
留言
張貼留言