حل معادله موج به روش تفاضل محدود

11461 بازدید

روش تفاضل محدود (Finite Difference) یکی از پرکاربردترین روش های حل انواع معادلات سیالاتی، دینامیکی، دینامیکی و غیره می باشد که جرء روش های عددی به حساب می آید. در این روش لازم است ابتدا معادله حاکم بر سیستم بدست آورده شود و سپس به کمکاین روش، برای هر جزء که اصطلاحا به آن المان گفته می شود، روش فوق پیاده شود. اساس این روش بر پایه تکرار کی باشد و تکرار تا جایی ادامه می یتبد که جواب ها به مقداری همگرا شده یا تفاوت دو مقدار بدست آمده در دو مرحله پیاپی، از خطای مورد نظر کمتر باشد. در این روش شرایط مرزی (Boundary Condition) یا شرایط اولیه (Initial Condition) ذکر می گردد.

 

Wave Equation Using Finite Difference Method

 

در این قسمتسعی داریم با استفاده از روش تفاضل محدود معادله موج را حل نماییم. معادله موجی که قصد حل آن را داریم، بصورت زیر می باشد:

Utt=Uxx

جهت حل این معادله فرض می شود سمت چپ طناب ثابت و سمت راست آن بصورت آزاد می باشد. جهت حل معادله موج، از زبان برنامه نویسی MATLAB استفاده شده است. آموزش های زیادی در مورد این نرم افزار در سایت موجود می باشد که با جست وجو می توانید از آنها استفاده کنید.

 

کد حل معادله موج (Solving Wave Equation Using Finite Difference Method)

function mit18086_fd_waveeqn
%    Solves the wave equation u_tt=u_xx by the Leapfrog method.
%    Example uses homogeneous Dirichlet b.c. on the left (fixed
%    end) and homogeneous Neumann b.c. right (loose end).

%            http://EngPedia.ir

n = 101;         % number of space gridpoints without boundaries
dt = 1.6e-2;                                         % time step
tf = 8e0;                                           % final time
x = linspace(-1,1,n+2)'; x = x(2:end-1);
h = x(2)-x(1);
r = dt/h;
disp(sprintf('CFL number: %0.2f',r))

u0 = f(x);
U = [u0,u0+dt*g(x)];

I = eye(n);
R = diag(ones(1,n-1),1);
A = r^2*R+2*(1-r^2)*I+r^2*R';
A(end,end) = 2-r^2;
for tn = 3:ceil(tf/dt)
   U = [U(:,2),A*U(:,2)-U(:,1)];
   clf
   plot(x,u0,'b:',x,U(:,2),'r.-')
   axis([-1 1 -1.2 1.2])
   title(sprintf('time t=%0.2f',tn*dt))
   drawnow
end

function y = f(x)
% initial displacement
y = max(1-20*x.^2,0).^2;

function y = g(x)
% initial velocity
y = -[diff(f(x));0]/(x(2)-x(1))/2;

 

نظرات شما باعث دلگرمی و پیشرفت ما می شود!

 

مطالب مرتبط

دیدگاهتان را بنویسید

بخش های مورد نیاز علامت گذاری شده اند

نشانی ایمیل منتشر نخواهد شد

نویسنده : آدرس سایت : ایمیل :
کد روبرو را وارد نمایید
captcha


0

شبکه های اجتماعی

دانشنامه تخصصی مهندسی ایران را در شبکه های اجتماعی دنبال کنید

0 0
درخواست نرم افزار
در صورتی که نیاز به مشاوره در مورد اطلاعات و اخبار نرم افزارها دارید، با ما تماس بگیرید.
    همکاران ما در سریع ترین زمان ممکن پاسخگو شما خواهند بود.