pdepe for a fourth-order de

조회 수: 3 (최근 30일)
Pinco
Pinco 2015년 2월 20일
댓글: Torsten 2015년 2월 23일
Hi everyone. I'm trying to solve the following pde:
and boundary conditions:
Basically, this is a "gradient flow" method for solving classical ODEs; in this case I want to solve the equation u_xxxx = f(x). Henceforth, I build by hand the term F(x) whenever the solution u(x) is chosen.
global F
%%MESH
xa = 0;
xb = 1;
nx = 100;
xmesh = linspace(xa,xb,nx);
%%FUNCTIONS
syms x
U0 = 2*x^2 - x^4 + exp(x)/10 + sin(5*pi*x)/10;
U1 = diff(U0,1);
U2 = diff(U0,2);
U3 = diff(U0,3);
U4 = diff(U0,4);
U0 = matlabFunction(U0);
U1 = matlabFunction(U1);
U2 = matlabFunction(U2);
U3 = matlabFunction(U3);
U4 = matlabFunction(U4);
F = U4;
Using pdepde, I set u'' = y in order to get a lower-order pde, then:
Up to now, this is my code:
coefficients
function [c,f,s] = funpde1coeff(x,t,u,DuDx)
global F
%
c = [1; 0];
%
f = [0 -1;1 0] * DuDx;
%
s = [F(x);-u(2)];
initial conditions
function u0 = funpde1ic(x)
global G
u0 = [G(x); 0];
where the function G(x) is built in such a way it satisfies the BCs (basically it is a third order polynomial function with 4 parameters).
Now how can I impose the original boundary conditions on the first derivative? Moreover, what if I have BCs on both first and second derivative at edges?
Thanks in advance for your help. Best,
Pinco
%============= EDIT ===========
I tried with BCs on second derivative, but I get the following error:
Warning: Failure at t=0.000000e+00. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (7.905050e-323) at time t.
The code is:
global U0a U1a U2a U0b U1b U2b
U0a = U0(xa);
U1a = U1(xa);
U2a = U2(xa);
U0b = U0(xb);
U1b = U1(xb);
U2b = U2(xb);
global F2
F2 = U4;
tspan2 = linspace(0,0.2,10);
m2 = 0;
SOL2 = pdepe(m2,@funpde2coeff,@funpde2ic,@funpde2bc,xmesh,tspan2);
function [c,f,s] = funpde2coeff(x,t,u,DuDx)
global F2
%
c = [1; 0];
%
f = [0 -1;1 0] * DuDx;
%
s = [F2(x);-u(2)];
function u0 = funpde2ic(x)
global G2
u0 = [G2(x); 0];
function [pl,ql,pr,qr] = funpde2bc(xl,ul,xr,ur,t)
global U0a U0b U2a U2b
% left
pl = [ul(1) - U0a ; ul(2)- U2a];
ql = [0; 0];
% right
pr = [ur(1) - U0b ; ur(2)- U2b];
qr = [0; 0];
Where is the mistake?

답변 (1개)

Pinco
Pinco 2015년 2월 21일
any ideas?
  댓글 수: 1
Torsten
Torsten 2015년 2월 23일
Why don't you use bvp4c to solve u_xxxx=f(x) directly ?
Best wishes
Torsten.

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

카테고리

Help CenterFile Exchange에서 PDE Solvers에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by