function animasjon2

clear all;

pi = 3.141592654;
% Strekk-kraft (N = kg*m/s*s):
S = 4.0;
% Massetettheter (kg/m);
mu1 = 0.040;
mu2 = 0.010;
'Bolgehastigheter (m/s):'
v1 = sqrt(S/mu1)
v2 = sqrt(S/mu2)
% Senter-vinkelfrekvens (1/s):
w0 = 2*pi;
% Dette tilsvarer en periode T = 2*pi/w0 = 0.2 s.
% Senter-bolgetall paa de to delene (1/m):
k01 = w0/v1;
k02 = w0/v2;
'Bolgelengde omraade 1:'
lambda01 = 2*pi/k01
'Bolgelengde omraade 2:'
lambda02 = 2*pi/k02
% Bredde i k-rommet
a = 0.25;
% Antall fourierkomponenter
nk = 25;
for i = 1:nk
   % 25 k-verdier
   k1(i) = k01*(1+a*(2*i-nk-1)/(nk-1));
   k2(i) = k02*(1+a*(2*i-nk-1)/(nk-1));
   % 25 tilhorende w-verdier
   w(i) = k1(i)*v1;
   % Amplituder til innkommende fourierkomponenter (mm):
   A(i) = exp(-4*(2*i-nk-1)^2/(nk-1)^2);
   % Amplituder til reflekterte komponenter (mm):
   B(i) = A(i) * (k2(i)-k1(i))/(k2(i)+k1(i));
   % Amplituder til transmitterte komponenter (mm):
   C(i) = A(i) * 2.0 * k1(i)/(k2(i)+k1(i));   
end;
% Det halve av antall punkter langs x-aksen:
N = 400;
% Antall tidssteg:
M = 400;
% Tabeller for x- og y-verdier, begge med 2*N elementer.
% Velger x-intervallet slik at vi faar minst 40 bolgelengder paa
% begge sider av x=0
k0min = min(k01,k02);
xmax = 15*2*pi/k0min;
ymax = 20;
x = linspace(-xmax,xmax,2*N);
y = linspace(-ymax,ymax,2*N);

% Animasjon av bolgepakken:
p = plot(x,y,'-','EraseMode','xor'); 
axis([-xmax xmax -ymax ymax])
hold on
xlabel('posisjon (m)');
ylabel('utsving (mm)');
title('Transmisjon og refleksjon i x = 0 av harmonisk bølge på streng');
for i=1:M
    % Velger tidssteg slik at animasjonen varer i 5 hele perioder:
    t = -0.5+i*10*2*pi/(w0*M);
    % For j = 1:N er x<0, og der er y = y_inn + y_refl:
    for j = 1:N
        y(j)=0.0;
        for m = 1:nk
            y(j)=y(j)+A(m)*sin(k1(m)*x(j)-w(m)*t)+B(m)*sin(k1(m)*x(j)+w(m)*t);
        end;
    end;
    % For j = N+1:2*N er x>0, og der er y = y_trans:
    for j = N+1:2*N
        y(j)=0.0;
        for m = 1:nk
            y(j) = y(j)+C(m)*sin(k2(m)*x(j)-w(m)*t);
        end;
    end;
    set(p,'XData',x,'YData',y) 
    % MATLAB help: drawnow flushes the event queue and updates the figure window
    drawnow    
    pause(0.10);  % Forsinker framvisningen i 0.1 s (juster hvis nodvendig)
end
