harj55.m

function harj55()

    % Ladataan data
    data = load('data51.txt');

    % Datan koko, sarakkeet (N) ovat x-koordinaatit, rivit (M) y-koordinaatit
    [M,N] = size(data);

    Imax = max(max(data));   % Suurin alkio
    Ifiltteri = 0.05*Imax;   % Suodatusraja
    
    % Muutetaan alkiot jotka pienempiä kuin suodatusraja nollaksi
    for i = 1:N
        for j = 1:M
            if data(j,i) <= Ifiltteri
                data(j,i) = 0;
            end  
        end
    end

    % Edellä oleva silmukka voidaan myös korvata yhdellä käskyllä:
    %data(data<=Ifiltteri) = 0;

    Isum = sum(sum(data)); % Kaikkien alkioiden summa

    % Pisteiden koordinaatit millimetrinä ja milliradiaaneina
    x = linspace(-29.5,30,N);
    y = linspace(-87.3,89.7,M);

    % Lasketaan odotusarvot
    x2 = 0;
    y2 = 0;
    xy = 0;
    for i = 1:N
        for j = 1:M
            x2 = x2 + data(j,i) * x(i)^2;
            y2 = y2 + data(j,i) * y(j)^2;
            xy = xy + data(j,i) * x(i)*y(j);
        end
    end
    x2 = x2/Isum;
    y2 = y2/Isum;
    xy = xy/Isum;

    % Silmukat voidaan korvata myös meshgrid-rakenteella:
    %[xx,yy] = meshgrid(x,y);
    %x2 = sum(sum(data.*xx.^2))/Isum;
    %y2 = sum(sum(data.*yy.^2))/Isum;
    %xy = sum(sum(data.*xx.*yy))/Isum;
    
    epsilon = sqrt(y2*x2-xy^2);
    fprintf( 'Emittanssi on %g mm mrad\n', epsilon )
end

Last modified: Tue Feb 28 16:33:50 2017