gum_monte_carlo — SPC uncertainty op

• Data kinds: table → table

• Call: import fullseye as fs; fs.ledger.gum_monte_carlo(table, u='u', sensitivity='sensitivity', n=200000, seed=0, level=0.95, correlation=None, distribution=None, value=None, power=None) (implementation को सीधे call करना हो तो import spc; spc.gum_monte_carlo(table, u='u', sensitivity='sensitivity', n=200000, seed=0, level=0.95, correlation=None, distribution=None, value=None, power=None), registry से लेना हो तो opsspc.get("gum_monte_carlo"))

उपयोग

GUM Supplement 1 (JCGM 101) का Monte Carlo propagation (table)।

हर input quantity को उसके distribution से निकालकर y = sum_i c_i x_i बनाता है, और sample से standard uncertainty और सबसे छोटा coverage interval लौटाता है। default normal distribution है; *distribution* में column name देने पर gum_standard_uncertainty जैसे रूप वाले नाम (rectangular / triangular / ...) हर component के लिए दिए जा सकते हैं (half-width नहीं बल्कि standard uncertainty वाला distribution बनता है)।

*value* और *power* में column name देने पर power model चलता है:

y = sum_i c_i (x_i + e_i)^{p_i}

(e_i distribution से निकाला गया उतार-चढ़ाव है। default x_i = 0 / p_i = 1 = linear।) power तक सीमित रखने का कारण यह है कि ledger में दर्ज op declarative होना चाहिए और कोई मनमाना function नहीं ले सकता -- फिर भी standard का nonlinear example (squares का योग) इससे व्यक्त किया जा सकता है, और propagation law के टूटने की स्थितियाँ दोहराई जा सकती हैं।

★ यह gum_propagate का स्वतंत्र cross-check है। propagation law partial derivative और variance का algebra है, यह random sample है -- derivation और implementation दोनों अलग हैं, इसलिए linear model में u_mc -> u_c (1/sqrt(n) की गति से) पास आना चाहिए, और न आए तो दोनों में से कोई एक टूटा हुआ है। correlation Cholesky decomposition से डाला जाता है, इसलिए यह propagation law के correlation term से अलग path से गुज़रता है।

★★ nonlinear में दोनों का मेल न खाना ही सही है। standard के example (comparison loss dY = X1^2 + X2^2, हर u = 0.005) को x1 = x2 = 0 पर चलाने पर:

propagation law sensitivity c_i = 2 x_i दोनों 0 हो जाती हैं, इसलिए u_c = 0, interval [0, 0]

Monte Carlo dy = 50e-6, u = 50e-6, interval [0, 150e-6]

propagation law "शून्य uncertainty" का जवाब देता है -- यह implementation की ग़लती नहीं, बल्कि 1st-order approximation extremum पर जानकारी खो देता है इस method की अपनी सीमा है। ऐसी स्थितियों के कारण ही Supplement 1 का Monte Carlo चाहिए। x1 = 0.010 पर propagation law का interval [-96, +296]e-6 negative loss शामिल करता है (भौतिक रूप से असंभव), और x1 = 0.050 तक दूर जाने पर [1520, 3480] बनाम [1590, 3543] पास आ जाते हैं।

★★ normal distribution न होने वाले input में coverage interval k u_c से मेल नहीं खाता। rectangular distribution जोड़ने पर central limit theorem से normal के पास आता है, पर केवल 1 component हो तो सबसे छोटे 95 % interval का half-width 0.95 a है (support का सिरा a नहीं -- केवल 95 % जितनी चौड़ाई चाहिए), जो k u = 1.96 a/sqrt(3) = 1.1316 a से संकरा है। अनुपात closed form 1.959964/(sqrt(3) x 0.95) = 1.1911 है, measured 1.1914। यह defect नहीं बल्कि propagation law distribution के shape को छोड़ देता है इसका संकेत है, इसलिए दोनों लौटाकर पाठक को दिखाए जाते हैं (शुरू में इस 0.95 को a मान लिया गया था, जिससे gate ग़लत बना)।

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_measurement_system_analysis — py -3.11 examples/poc_measurement_system_analysis.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

msa_anova_table · msa_gauge_rr · msa_bias_linearity · msa_attribute_agreement · gum_standard_uncertainty · gum_propagate · gum_expanded · gum_validate

इसी category के (uncertainty)

gum_standard_uncertainty · gum_propagate · gum_expanded · gum_validate


*Provenance: spc.py — SPC operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.