File:Wave equation 1D fixed endpoints.gif

Wave_equation_1D_fixed_endpoints.gif(274 × 121 pixel, dimensione del file: 129 KB, tipo MIME: image/gif, ciclico, 99 frame, 4,9 s)

Logo di Commons
Logo di Commons
Questo file e la sua pagina di descrizione (discussione · modifica) si trovano su Wikimedia Commons (?)
Descrizione
English: Illustration of solution of one-dimensional wave equation: a gaussian wave on a string fixed at both ends. The wave reflects from each end with a 180° phase shift.
Data (UTC)
Fonte self-made, with en:Matlab
Autore Oleg Alexandrov
 
Questo diagramma in GIF grafica è stato creato con MATLAB.
Public domain Io, detentore del copyright su quest'opera, la rilascio nel pubblico dominio. Questa norma si applica in tutto il mondo.
In alcuni paesi questo potrebbe non essere legalmente possibile. In tal caso:
Garantisco a chiunque il diritto di utilizzare quest'opera per qualsiasi scopo, senza alcuna condizione, a meno che tali condizioni siano richieste dalla legge.

MATLAB source code

% A wave travelling on a string with
% fixed endpoints

function main()

   % KSmrq's colors
   red    = [0.867 0.06 0.14];
   blue   = [0, 129, 205]/256;
   green  = [0, 200,  70]/256;
   yellow = [254, 194,   0]/256;
   white = 0.99*[1, 1, 1];
   
   % length of the string and the grid
   L = 5;
   N = 151;
   X=linspace(0, L, N);

   h = X(2)-X(1); % space grid size
   c = 0.5; % speed of the wave
   tau = 0.25*h/c; % time grid size
   
   K = 5; % steepness of the bump
   S = 0; % shift the wave
   f=inline('exp(-K*(x-S).^2)', 'x', 'S', 'K'); % a gaussian as an initial wave
   df=inline('-2*K*(x-S).*exp(-K*(x-S).^2)', 'x', 'S', 'K'); % derivative of f

   % wave at time 0 and tau
   U0 = 0*f(X, S, K);
   U1 = U0 - 2*tau*c*df(X, S, K);
   
   U = 0*U0; % current U

   Big=10000;
   Ut = zeros(Big, N);
   Ut(1, :) = U0;
   Ut(2, :) = U1;
   
   % hack to capture the first period of the wave
   min_k = 2*N; k_old = min_k; turn_on = 0;

   for j=3:Big

      last_j = j;
      
      %  fixed end points
      U(1)=0; U(N)=0;
      
      % finite difference discretization in time
      for i=2:(N-1)
         U(i) = (c*tau/h)^2*(U1(i+1)-2*U1(i)+U1(i-1)) + 2*U1(i) - U0(i);
      end

      Ut(j, :) = U;
      
      % update info, for the next iteration
      U0 = U1; U1 = U;

      % hack to capture the first period of the wave
      k = find ( abs(U) == max(abs(U)) );
      k = k(1);

      if k > N/2
         turn_on = 1;
      end

      min_k = min(min_k, k_old);
      if k > min_k & min_k == k_old & turn_on == 1
         break;
      end
      k_old = k; 
      
   end

   % truncate to the first period
   last_j = last_j - 1;
   Ut = Ut(1:last_j, :);

  % shift the wave by a certain amount
   shift = floor(last_j/4);
   Vt=Ut;
   Ut((last_j-shift+1):last_j, :) = Vt(1:shift, :);
   Ut(1:(last_j-shift), :)        = Vt((shift+1):last_j, :);

   num_frames = 100;
   spacing=floor(last_j/num_frames)
   
   % plot the wave
   for j=1:(last_j-spacing+1)

      U = Ut(j, :);

      if rem(j, spacing) == 1

         figure(1); clf; hold on;
         axis equal; axis off; 
         lw = 3; % linewidth
         plot(X, U, 'color', red, 'linewidth', lw);
	 
         % plot the ends of the string
         small_rad = 0.06;
         ball(0, 0, small_rad, red);
         ball(L, 0, small_rad, red);
	 
         % size of the window
         ys = 1.1;
         axis([-small_rad, L+small_rad, -ys, ys]);
      
         % small markers to keep the bounding box fixed when saving to eps
         plot(-small_rad, ys, '*', 'color', white);
         plot(L+small_rad, -ys, '*', 'color', white);

         frame_no = floor(j/spacing)+1;
         frame=sprintf('Frame%d.eps', 1000+frame_no);
         disp(frame)
         saveas(gcf, frame, 'psc2');
         
      end
   end
   
function ball(x, y, radius, color) % draw a ball of given uniform color 
   Theta=0:0.1:2*pi;
   X=radius*cos(Theta)+x;
   Y=radius*sin(Theta)+y;
   H=fill(X, Y, color);
   set(H, 'EdgeColor', color);

% The gif image was creating with the command 
% convert -antialias -loop 10000  -delay 15 -compress LZW Frame10* Movie.gif

Didascalie

Aggiungi una brevissima spiegazione di ciò che questo file rappresenta
One-dimensional wave equation

Elementi ritratti in questo file

raffigura

Cronologia del file

Fare clic su un gruppo data/ora per vedere il file come si presentava nel momento indicato.

Data/OraMiniaturaDimensioniUtenteCommento
attuale03:27, 24 ago 2007Miniatura della versione delle 03:27, 24 ago 2007274 × 121 (129 KB)Oleg Alexandrov{{Information |Description=Illustration of en:Wave equation |Source=self-made, with en:Matlab |Date=~~~~~ |Author= Oleg Alexandrov }} {{PD-self}} Category:Waves Category:Partial differential equations [[Catego

La seguente pagina usa questo file:

Utilizzo globale del file

Anche i seguenti wiki usano questo file:

Visualizza l'utilizzo globale di questo file.