I have a problem comprehending some things about uncertainty in electrical measurements. Here is illustrative example from my textbook. We use voltage-current converter for measurement.


U1 = 10V, I2 = 1mA, δU1 = 0.1%, δR1 = 0.1%, ideal opamp

So I managed to calculate R1 = 10kΩ from U1 and I2. The main task is to come up with expression for uncertainty of I2 and calculate expanded uncertainty. I know that it can be expressed through magnitude of some partial derivations. But what should be the function of these partial derivations? Other issue is that I don't know where to place the delta values which are relative errors according to my textbook. But I don't know how relative errors relate to uncertainties and how to work with them together. Any help would be appreciated.

  • $\begingroup$ A better estimator of the percentage uncertainty in the current is given by $\%I_2 = \sqrt{(\%U_1)^2+(\%R_1)^2}$ $\endgroup$
    – Farcher
    Commented Mar 18, 2022 at 0:18
  • $\begingroup$ Would Electrical Engineering be a better home for this question? $\endgroup$
    – Qmechanic
    Commented Mar 18, 2022 at 8:13

1 Answer 1


You can do uncertainty analysis in many different ways. We are missing here some assumptions in order to be able to derive analytic expression for current uncertainty. For example, what is the distribution (pdf) of voltage and resistance uncertainty?

It is often taken that (almost) 100% of samples lie within confidence interval defined by tolerances, with equal probability for each sample to occur (uniform distribution). In your case, all voltage and resistance samples are assumed to be within

$$U_1 = 10 \pm 0.01 \text{ V} \qquad \text{and} \qquad R_1 = 10000 \pm 10 \text{ }\Omega$$

confidence intervals. If you just want to calculate extreme values for the current then evaluate

$$I_2 = \frac{10 \pm 0.01 \text{ V}}{10000 \pm 10 \text{ }\Omega}$$

where $\pm$ in nominator and denominator are independent. With this we get that the current is bounded between $0.998 \text{ mA}$ and $1.002 \text{ mA}$.

Although voltage and resistance are considered to be uniformly distributed within their respective confidence intervals, the current does not necessarily follow the uniform distribution. In order to get more information on distribution of the current, the easiest and most practical approach would be to do a Monte-Carlo simulation.

The basic principle of a Monte Carlo simulation is simple - generate $N$ random sample pairs $(U_1, R_1)$ and then calculate current as $I_2 = U_1 / R_1$ for each pair. Figure below shows distribution of current for $10^5$ random sample pairs. As it can be seen, although both voltage and resistance have uniform distribution, the current has (nearly) normal distribution* with mean $1 \text{ mA}$ and standard deviation $0.0008 \text{ mA}$. Standard deviation in the context of normal distribution means that 68% of samples fall within mean value plus/minus one standard deviation.

*If you want to learn more why naturally occurring phenomena tend to follow normal (Gaussian) distribution, check central limit theorem (Wiki article).


Figure: Current samples distribution (histogram is true discretized distribution; normal distribution is an idealization)

Here is Octave code to do Monte Carlo simulation for your particular example.

pkg load statistics

% Number of test points
N = 100000; % random variables
M = 100; % samples in each histogram bin

% Mean (expected) values
U = 10; % V
R = 10e3; % ohm

% Tolerances
dU = 0.1; % % of U
dR = 0.1; % % of R

% Confidence interval limits
oU = U * dU / 100;
oR = R * dR / 100;

% Set random number generator seed
rand("seed", time);

% Create random variables
u = U + unifrnd(-oU, oU, N, 1);
r = R + unifrnd(-oR, oR, N, 1);

% Calculate current (random variable)
i = u ./ r * 1000; % mA

% Sort elements
i = sort(i);

% Mean and standard deviation
I = mean(i); % <- mean
oI = std(i); % <- standard deviation

% Current vector for distributions
imax = max(i);
imin = min(i);
ii = linspace(imin, imax, M);

% Generate normal distribution
y = normcdf(ii, I, oI);
y = diff(y);

% Generate histogram (true distribution)
z = hist(i, ii) / N;



bar(ii, z, 'w'); hold on;
plot(ii(2:end), y, 'r-', 'LineWidth', 1.5); grid on;

xlabel('Current (mA)');
legend('Histogram', 'Normal distribution');

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.