Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Uncertainty Calculation
#1
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"
Reply
#2
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))
Irv1n likes this post
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020