pdepe for a fourth-order de

2 次查看(过去 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 中查找有关 Geometry and Mesh 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by