function bolge_streng clear all; % Genererer posisjonsarray delta_x = 1.0; % skrittlengde i x-retning x = 0:delta_x:200; % x = [0.0, 1.0 , ... 199.0, 200.0] n = length(x); % antall elementer i x-array % Div. parametre for tidsutvikling delta_t = 1.0; % tidsskritt v = 0.8; % b?lgehastighet langs streng faktor = (delta_t*v/delta_x)^2; % en faktor som brukes mye i tidsutviklingen % Velger vinkelfrekvens (w) for oscillerende ende % ved ? velge antall b?lgelengder som skal f? plass % p? strengen (N_lambda). N_lambda = 3.8; lambda = (x(n)-x(1))/N_lambda; k = 2*pi/lambda; w = v*k; % Initialbetingelser: % -- formen p? strengen ved t=0, dvs u(x,0) u = zeros(n); % -- tverrhastighet for hvert punkt p? strengen ved t=0, dvs dudt(x,0) dudt = zeros(n); % Implementerer initialbetingelsene ('u' og 'dudt') % i variablene vi benytter i tidsutviklingen u_jminus1 = u - delta_t*dudt; u_j = u; % Tidsutvikling: % % Arrayene 'u_jminus1', 'u_j', 'u_jplus1' er arrayer som inneholder % utslaget til strengen ved ulike tidspunkt: 'forrige', 'n?' og 'neste'. % % Utslaget i de n ulike posisjonene langs x-aksen % svarer til de n elementene i hver u-array. % u_jplus1 = zeros(1,n); figure(); for t = 1:1000 % Utvikler alle punkt bortsett fra endepunkter u_jplus1(2:n-1) = (2*(1-faktor)).*u_j(2:n-1) - ... u_jminus1(2:n-1) + faktor.*(u_j(3:n)+u_j(1:n-2)); % Utvikler endepunkter u_jplus1(1) = sin(w*t); % venstre endepunkt: oscillerende %u_jplus1(n) = u_jplus1(n-1); % h?yre endepunkt: ?pen u_jplus1(n) = 0; % h?yre endepunkt: l?st % Oppdater plott plot(x,u_j); axis([x(1) x(n) -10.0 10.0]); % benytter x-verdi langs x-aksen %plot(u_j); %axis([0 n+1 -1.2 1.2]); % benytter elementnummer i u-array langs x-aksen drawnow; % Flytter variable fram ett tidsskritt u_jminus1 = u_j; u_j = u_jplus1; end; end