Python Forum

Full Version: Uncertainty Calculation
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have 3 list:
dcv_range = [0.1, 1, 10 ,100 ,1000] # range
# Accuracy is given as ± (% measurement +% of range)
dcv_accuracy_meas_90d = [0.0025, 0.0018, 0.0018, 0.0027, 0.0031] # measurement accuracy
dcv_accuracy_range_90d = [0.0035, 0.0007, 0.0005, 0.0006, 0.001] # range accuracy
And need to calculate Uncertainty, for example:

I have a number like 0.05. It is compared with the values in the "dcv_range" variable, if it is less than or equal to 0.1, then the uncertainty is calculated from the values in the "dcv_accuracy_meas_90d" and "dcv_accuracy_range_90d" variables, like:
0.0025 * 0.05 / 100 + 0.0035 * 0.1 / 100.
Accuracy is given as ± (% measurement +% of range).

If I have a number, for example 95, then it is calculated as:
0.0027 * 95/100 + 0.006 * 100/100
Since this number 95 is more than 10 and less than 100 in the variable "dcv_range"
You can used the next function with a condition to stop the iterator. This code says "keep getting index, rng from enumerate(dcv_range) until rng is greater than value. Return last index"
dcv_range = [0.1, 1, 10 ,100 ,1000] # range
# Accuracy is given as ± (% measurement +% of range)
dcv_accuracy_meas_90d = [0.0025, 0.0018, 0.0018, 0.0027, 0.0031] # measurement accuracy
dcv_accuracy_range_90d = [0.0035, 0.0007, 0.0005, 0.0006, 0.001] # range accuracy

def uncertainty(value):
    if value < dcv_range[-1]:  # Blows up if we iterate past end of dcv_range
        index = next(index for index, rng in enumerate(dcv_range) if rng > value)
    else:
        index = len(dcv_range)-1

    print(index, dcv_range[index], dcv_accuracy_meas_90d[index], dcv_accuracy_range_90d[index])
    return dcv_accuracy_meas_90d[index] * value / 100 + dcv_accuracy_range_90d[index] * dcv_range[index]/100

print(uncertainty(0.05))
print(uncertainty(95))