finite difference method, why the result is zero?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Antworten (0)
Siehe auch
Kategorien
Mehr zu Particle & Nuclear Physics finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!