Fix statistics and improve output
authorLukáš Jiřiště <jiriste@icpf.cas.cz>
Tue, 2 Jul 2024 13:02:44 +0000 (15:02 +0200)
committerLukáš Jiřiště <jiriste@icpf.cas.cz>
Tue, 2 Jul 2024 13:02:44 +0000 (15:02 +0200)
Kalibrace.m
round_deviation.m [new file with mode: 0644]

index a5c114606f93fd1b2e9f14a8200cf52c99a4a436..cb828568a4e6cc15655cc6e34ce0c6a5b2837cc4 100644 (file)
@@ -2,7 +2,7 @@ clear all, close all
 i=1;\r
 mezvak=0.07;\r
 cit=50;\r
-k=50;\r
+k=10;\r
 \r
 Vb=36.81;\r
 KK=616.26;%612.47\r
@@ -23,7 +23,7 @@ for i=1:length(fnamecelk)
     vaku=mean(P{i,1}(P{i,1}<0.01));\r
     P{i,4}(P{i,1}<mezvak)=[];%smazaní evakuace\r
     P{i,1}(P{i,1}<mezvak)=[];\r
-    P{i,2}=-P{i,1}(2:end)+P{i,1}(1:end-1); %derivace odhaluje skoky\r
+    P{i,2}=(-P{i,1}(2:end)+P{i,1}(1:end-1)); %derivace odhaluje skoky\r
     P{i,3}=P{i,2}./(P{i,1}(1:end-1)/max(P{i,1})); %nomralizace skoku\r
     minind=find(P{i,3}<min(P{i,3})/cit);%hledání napouštění\r
     %smazání vakua a napouštění\r
@@ -180,10 +180,18 @@ for i=1:length(fnamecelk)
     \r
 end\r
 for i=1:length(V)\r
-    Vprum(i)=mean(V{i});\r
-    printf("Výsledek z měření %s:\n\tV%i = %f mm^3\n\t", fnamecelk{i}, Vznak(i), Vprum(i));\r
+    Vprum = mean(V{i});\r
+       dev = (sum((Vprum - V{i}).^2) / length(V{i}))^0.5;\r
+       [Vprum, dev, ~, dec] = round_deviation(Vprum, dev);\r
+    printf("Výsledek z %i skoků z měření %s:\n", length(V{i}), fnamecelk{i})\r
+       printf("\tV%i = (%.*f ± %.*f) mm^3\n", Vznak(i), dec, Vprum, dec, dev);\r
 end\r
-V1=mean(Vprum(Vznak==1))\r
-V2=mean(Vprum(Vznak==2))\r
-uA1=(sum((V1-[V{Vznak==1}]).^2)/(length([V{Vznak==1}])-1))^0.5\r
-uA2=(sum((V2-[V{Vznak==2}]).^2)/(length([V{Vznak==2}])-1))^0.5\r
+V1 = mean([V{Vznak == 1}]);\r
+V2 = mean([V{Vznak == 2}]);\r
+dev1 = (sum((V1-[V{Vznak==1}]).^2)/(length([V{Vznak==1}])-1))^0.5;\r
+dev2 = (sum((V2-[V{Vznak==2}]).^2)/(length([V{Vznak==2}])-1))^0.5;\r
+[V1, dev1, ~, dec1] = round_deviation(V1, dev1);\r
+[V2, dev2, ~, dec2] = round_deviation(V2, dev2);\r
+printf("\nCelková statistika:\n")\r
+printf("\tV1 = (%.*f ± %.*f) mm^3\n", dec1, V1, dec1, dev1)\r
+printf("\tV2 = (%.*f ± %.*f) mm^3\n", dec2, V2, dec2, dev2)\r
diff --git a/round_deviation.m b/round_deviation.m
new file mode 100644 (file)
index 0000000..162c869
--- /dev/null
@@ -0,0 +1,17 @@
+function [value, deviation, significant_digits, decimal_digits] = round_deviation(value, deviation)
+       order = floor(log10(deviation));
+       first_digit = floor(deviation * 10^-order);
+       if ((first_digit == 1) || (first_digit == 2))
+               --order
+       end
+       deviation = ceil(deviation * 10^-order) * 10^order;
+       order = floor(log10(deviation));
+       first_digit = floor(deviation * 10^-order);
+       if ((first_digit == 1) || (first_digit == 2))
+               --order;
+       end
+       value = round(value * 10^-order) * 10^order;
+       significant_digits = floor(log10(value)) - order;
+       decimal_digits = max(-order, 0);
+       ++significant_digits;
+end