การหาค่าเฉลี่ยโดยไม่ต้องเก็บค่า

ทุกคนคงทราบอยู่แล้วว่าวิธีการหาค่าเฉลี่ยคือ เอาค่าทั้งหมดมาบวกกัน แล้วหารด้วยจำนวนทั้งหมด
ดังสมการนี้

Avr = sum(X)/length(X)

แต่ในทางปฎิบัติ เราสามารถเก็บค่าได้จำกัด เพราะว่าในขณะที่โปรแกรมกำลังทำงานอยู่ ข้อมูลในตัวแปรทุกตัวจะถูกเก็บเอาไว้ที่ RAM ซึ่งคอมทุกเครื่องมี RAM จำนวนจำกัด ดังนั้นหากเราเก็บข้อมูลไว้ในตัวแปรเยอะเกินไป ก็จะทำให้พื้นที่ RAM ไม่พอใช้งาน ซึ่งจะทำให้คอมพิวเตอร์ค้างได้

ถ้าเราไม่เก็บข้อมูลทุกตัวเอาไว้ แล้วเราจะคำนวณค่าเฉลี่ยได้ยังไงล่ะ?

หลายๆ คนอาจจะกำลังคิดว่าน่าจะคำนวณแบบนี้

ค่าเฉลี่ย = (ค่าใหม่ + ค่าเก่า)/2

อย่างเช่น ค่าเฉลี่ยระหว่าง 1 กับ 2

ค่าเฉลี่ย = (2 + 1)/2 = 1.5

คำตอบก็ถูกต้อง วิธีนี้น่าจะใช้ได้นะ แต่มันใช้ได้จริงรึเปล่า เราลองมาทดสอบกับตัวอย่างอื่นดู เช่น
ค่าเฉลี่ยระหว่าง 1 , 2 และ 3

AV1 = (1+2)/2 = 1.5
AV2 = (AV1+3)/2 = 2.25

จะเห็นว่าผลลัพธ์ไม่ถูกต้อง เพราะ

AV = (1+2+3)/3 = 2

ดังนั้นวิธีการแบบนี้จึงใช้ไม่ได้

แล้ววิธีการที่ถูกต้องควรจะทำยังไงละ มาดูกันเลยครับ

AV = AV - (AV/N)
AV = AV + (X/N)

โดยที่
AV คือ ค่าเฉลี่ย
X คือ ค่าใหม่ที่จะบวกเพิ่ม
N คือ จำนวนข้อมูลทั้งหมด (รวม X ด้วย)

ลองมาดูตัวอย่างโค้ดกันเลยครับ

% ------------------------- MATLAB Programing ------------------------%
% Example: How to calculate average without keep value                %
% Create by: Kritthanit                                               %
% Create date: 22-12-2018                                             %
% Blog: https://loglike.blogspot.com                                  %
% Fanpage: https://www.facebook.com/Matlab-Programing-194695677296190 %
% --------------------------------------------------------------------%
clc;clear;close all;

x = 1:100;
av1 = sum(x)/length(x);
disp('True average')
disp(av1)

av2 = x(1);
for m=2:100
    av2 = (av2+x(m))/2;    
end
disp('Incorrect method')
disp(av2)

av3 = x(1);
for m=2:100
    av3 = (av3 - (av3/m));
    av3 = (av3 + (x(m)/m));
end
disp('Correct method')
disp(av3)

ผลรัน





คราวนี้โปรแกรมเราก็กิน RAM น้อยลงเยอะเลยครับ


ความเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การแก้สมการ Differential ด้วย MATLAB

การเปรียบเทียบข้อมูล