First order partial differential equations system - Numerical solution

조회 수: 60 (최근 30일)
Malak Galal
Malak Galal 2019년 1월 16일
댓글: Sreejath S 2020년 10월 26일
Hello everyone!
I would like to solve a first order partial differential equations (2 coupled equations) system numerically. I just want to make sure that my thoughts are correct.
So firstly, I will start by doing a discretization to each of the two equations and then I will use ode15s to solve the ordinary differential equations that I got from the first step. Am I right? Which method of discretization do you recommend me to use?
Note: My equations are similar to the linear advection equation but with a source term.
Thank you very much.
Malak
  댓글 수: 2
Torsten
Torsten 2019년 1월 16일
Start with first-order upwind.
Malak Galal
Malak Galal 2019년 1월 18일
편집: Malak Galal 2019년 1월 18일
Thank you very much for your reply.
Is there any document or website that could be of use to me?
I am a bit lost because I have been trying to understand how to use the upwind method to solve my system, but I couldn't really find anything similar to my system. I saw some examples about the advection equation, but they all deal with one equation and with no source term.
My problem is that the source terms in my system couple the two equations.
I would appreciate your help very much! Thanks in advance.
Malak

댓글을 달려면 로그인하십시오.

채택된 답변

Torsten
Torsten 2019년 1월 18일
편집: Torsten 2019년 1월 18일
%program solves
% dy1/dt + v1*dy1/dx = s1*y1*y2
% dy2/dt + v2*dy2/dx = s2*y1*y2
% y1(0,x) = y2(0,x) = 0
% y1(t,1) = y2(t,0) = 1
% for 0 <= t <= 400
function main
nx = 500;
y1 = zeros(nx,1);
y1(end) = 1.0;
y2 = zeros(nx,1);
y2(1) = 1.0;
ystart = [y1;y2];
tstart = 0.0;
tend = 400;
nt = 41;
tspan = linspace(tstart,tend,nt);
xstart = 0.0;
xend = 1.0;
x = linspace(xstart,xend,nx);
x = x.';
v1 = -0.005;
v2 = 0.0025;
v = [v1 v2];
s1 = 3.0e-3;
s2 = -4.0e-3;
s = [s1 s2];
[T,Y] = ode15s(@(t,y)fun(t,y,nx,x,v,s),tspan,ystart);
plot(x,Y(20,1:nx), x,Y(20,nx+1:2*nx))
end
function dy = fun(t,y,nx,x,v,s)
y1 = y(1:nx);
y2 = y(nx+1:2*nx);
dy1 = zeros(nx,1);
dy2 = zeros(nx,1);
dy1(1:nx-1) = -v(1)*(y1(2:nx)-y1(1:nx-1))./(x(2:nx)-x(1:nx-1)) + s(1)*y1(1:nx-1).*y2(1:nx-1);
dy1(nx) = 0.0;
dy2(1) = 0.0;
dy2(2:nx) = -v(2)*(y2(2:nx)-y2(1:nx-1))./(x(2:nx)-x(1:nx-1)) + s(2)*y1(2:nx).*y2(2:nx) ;
dy = [dy1;dy2];
end
  댓글 수: 12
Malak Galal
Malak Galal 2019년 1월 31일
Okay. Thank you very much for your help!
Sreejath S
Sreejath S 2020년 10월 26일
Hi Torsten,
Sorry for commenting on this post, rather than asking my own question. I have a very similar system of coupled first order hyperbolic PDES. But my system has a major diference from the example code you posted.
The first equation has dy1/dt and dy2/dx, and the second equation has dy2/dt and dy1/ds. Kindly note the change (marked bold) in the following lines from the original problem you posted:
% dy1/dt + v1*dy2/dx = s1*y1*y2
% dy2/dt + v2*dy1/dx = s2*y1*y2
% y1(0,x) = y2(0,x) = 0
% y1(t,1) = y2(t,0) = 1
% for 0 <= t <= 400
Can this type of coupled problem be solved using MOL?
I ran the code with this change, but I could not get a solution. The solution is not converging.Kindly help in this regard.
Sincerly,
Sreejath

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Malak Galal
Malak Galal 2019년 1월 21일
Hi Torsten,
Thank you very much for your help!
Malak

Malak Galal
Malak Galal 2019년 2월 22일
Hi Torsten,
I have a question concerning the number of points in space and time (nx and nt). Using a proper discretization method, if I want to use for instance nx=1e5, does nt have to be the same as nx or close to it? It seems to me that when I increase the number of points in space, the number of points in time have to be increased as well. Could you please help me understand the relationship between nx and nt?
Thank you very much!
Malak
  댓글 수: 1
Torsten
Torsten 2019년 2월 22일
Hello Malak,
nx and nt can be chosen completely independent from each other.
Best wishes
Torsten.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by