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!