Ficheiro:Wave equation 1D fixed endpoints.gif

De testwiki
Saltar á navegación Saltar á procura
Wave_equation_1D_fixed_endpoints.gif (274 × 121 píxeles; tamaño do ficheiro: 129 kB; tipo MIME: image/gif, en bucle, 99 fotogramas, 4,9 s)

Este ficheiro é de Wikimedia Commons e pode utilizarse noutros proxectos. A descrición da páxina de descrición do ficheiro móstrase a continuación.

Resumo

Descrición
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
Orixe Obra propia
Autoría Oleg Alexandrov
GIF desenvolvimento
InfoField
 Esta GIF imaxe foi creada co MATLAB

Licenza

Public domain Eu, como posuidor dos dereitos de autor desta obra, libéroa para que pertenza ao dominio público. Isto é válido en todo o mundo.
Nalgúns países, isto pode non ser legalmente posible; entón:
Concedo a calquera o dereito de empregar esta obra para o propósito que considere oportuno, sen condicións, agás aquelas que sexan requiridas pola lei.

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

Pés de foto

Engade unha explicación dunha liña do que representa este ficheiro
One-dimensional wave equation

Elementos retratados neste ficheiro

representa a

Historial do ficheiro

Prema nunha data/hora para ver o ficheiro tal e como estaba nese momento.

Data/HoraMiniaturaDimensiónsUsuarioComentario
actual24 de agosto de 2007 ás 02:27Miniatura da versión ás 02:27 do 24 de agosto de 2007274 × 121 (129 kB)wikimediacommons>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

A seguinte páxina usa este ficheiro: