finite difference method, why the result is zero?
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Vibration Analysis 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!