finite difference method, why the result is zero?
2 views (last 30 days)
Show older comments
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!
0 Comments
Answers (0)
See Also
Categories
Find more on Vibration Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!