1D quadratic finite volume element method
We seek the solution between Ω = ( 0 , 1 ) \Omega=(0,1) Ω = ( 0 , 1 ) ;
Model Problem: − d d x ( p d u d x ) + r d u d x + q u = f -\frac{d}{dx}(p\frac{du}{dx})+r\frac{du}{dx}+qu=f − d x d ( p d x d u ) + r d x d u + q u = f MATLAB code:
% 一维二次元有限体积法
% 两点边值问题
% 对q, r相关计算近似,最好取值较小,否则精度阶被污染
% clc, clear;
% tic
format long ;
iter= 4 ;
% -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
% % eg1
% pde. left= 0 ;
% pde. right= 1 ;
% pde. Alpha= 0 ; % left BC Dirichlet
% pde. Beta= - pi; % right BC Neumann
% pde. p= @( x) x;
% pde. r= @( x) 0 ;
% pde. q= @( x) x;
% pde. f= @( x) pi^ 2 * x. * sin ( pi* x) - pi* cos ( pi* x) + x. * sin ( pi* x) ;
% pde. realu= @( x) sin ( pi* x) ;
% pde. Drealu= @( x) pi* cos ( pi* x) ;
% -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
% % eg2
pde. left= 0 ; % 左边界
pde. right= 1 ; % 右边界
pde. Alpha= 0 ; % 左边值条件Dirichlet
pde. Beta= - pi; % 右边值条件Neumann
pde. p= @( x) 1 ;
pde. r= @( x) 0 ;
pde. q= @( x) 0 ;
pde. f= @( x) pi^ 2 * sin ( pi* x) ;
pde. realu= @( x) sin ( pi* x) ;
pde. Drealu= @( x) pi* cos ( pi* x) ;
% -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
[ L2_convergenceOrder, H1_convergenceOrder] = convergenceOrder ( iter, pde)
function [ ERRL2, ERRH1] = clacerr ( N, pde)
h= ( pde. right- pde. left) / N;
x= pde. left: h: pde. right; % 已经等分,N+ 1 个点 % x ( i) = x_i- 1 , 初始剖分
% 下面是对偶剖分
X= x+ h/ 2 ; X= X ( 1 : N)</