Effacer les filtres
Effacer les filtres

finite difference method, why the result is zero?

2 vues (au cours des 30 derniers jours)
sing lai
sing lai le 17 Avr 2014
function [u,x,t] = wave(a,xf,T,it01,it02,i1t0,bx0,bxf,M,N)
%solve a u_xx = u_tt for 0<=x<=xf, 0<=t<=T
% Initial Condition: u(x,0) = it0(x), u_t(x,0) = i1t0(x)
% Boundary Condition: u(0,t)= bx0(t), u(xf,t) = bxf(t)
% M = # of subintervals along x axis
% N = # of subintervals along t axis
%solve_wave
a = 1; h=0.005; d=0.16; L=0.64
it01 = inline('h*x./d','x');
it02 = inline('h*(L-x)./(L-d)','x');
i1t0 = inline('0'); %initial condition
bx0 = inline('0'); bxf = inline('0'); %boundary condition
xf = 1; M = 20; T = 20; N = 50;
dx = xf/M; x = [0:M]'*dx; %space step size
dt = T/N; t = [0:N]*dt; %time step size
for i = 1:M + 1
if 'x' >= 0 && 'x' <= d
u(i,1)=it01(x(i));
elseif 'x' >= d && 'x' <= L
u(i,1)=it02(x(i));
end
end
for k = 1:N + 1
u([1 M + 1],k) = [bx0(t(k)); bxf(t(k))];
end
r = a*(dt/dx)^ 2; r1 = r/2; r2 = 2*(1 - r);
u(2:M,2) = r1*u(1:M - 1,1) + (1 - r)*u(2:M,1) + r1*u(3:M + 1,1) ...
+ dt*i1t0(x(2:M));
for k = 3:N + 1
u(2:M,k) = r*u(1:M - 1,k - 1) + r2*u(2:M,k-1) + r*u(3:M + 1,k - 1)...
- u(2:M,k - 2);
end
figure(1), clf
mesh(t,x,u)
ylabel('x', 'FontSize', 16);
xlabel('t', 'FontSize', 16);
zlabel('u', 'FontSize', 16);
figure(2), clf
for n = 1:N %dynamic picture
plot(x,u(:,n)), axis([0 xf -0.3 0.3]), pause(0.2)
xlabel('t', 'FontSize', 16);
ylabel('u', 'FontSize', 16);
end
I using finite difference method to solve the wave equation of pluked string, but why the result come out all zero? anyone can help me solve the problem is much appreciated, thanks!

Réponses (0)

Catégories

En savoir plus sur Particle & Nuclear Physics dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by