特征值问题的有限元MATLAB程序(一维)

薛定谔特征值问题和拉普拉斯特征值问题的有限元MATLAB程序(一维)

(p(x)u(x))+q(x)u(x)=λω(x)u(x)
in Ω=(a,b),u(a)=0,u(b)=0

这是对一般的Sturm-Liouville问题的一个表述。下面主要谈这个问题的两个特例,拉普拉斯特征值问题和薛定谔特征值问题。

  • 拉普拉斯特征值问题是:

    u′′(x)=λu(x) in Ω=(0,1)
    u(0)=0,u(1)=0

    作为SL问题的一个特例,它有精确解:
    un(x)=sin(nπx),λn=n2π2(n=1,2...)

  • 带调和势的薛定谔特征值问题的一般表述是:

    u′′(x)2+V(x)u(x)=ϵu(x) in Ω=(L,L)
    u(L)=0,u(L)=0

    这里的L在程序中给定为10, V(x) 取为 x22

    略过简单的变分过程,下面直接给出这两类问题的一个程序:

两个调用函数的主程序:

拉普拉斯主程序:
clear all; close all;

options = struct('verbose','on','problem','laplace','domain',[0 1], ...
                 'analysis','fe', ...
                 'element_type','spectral','element_order',5,'numel',8, ...
                 'nsp',7, ... % number of quadrature points
                 'eigsolver','eigs','eigtol',1e-14,'nbeigs',6);

[lambda,numdofs,cond] = fem1d_evp(options);

sumeig = sum(lambda);

% Exact solution = n^2 pi^2 , n = 1, 2, ...
exact = 91*pi^2;  % 1 + 4 + 9 + 16 + 25 + 36 = 91

erreig = sumeig - exact;
fprintf('Error in the sum of the first six eigenvalues = %15.7e\n',erreig);
薛定谔主程序:
clear all; close all;

options = struct('verbose','on','problem','schrodinger','domain',[-10 10], ...
                 'analysis','fe', ...
                 'element_type','spectral','element_order',5,'numel',8, ...
                 'nsp',7, ... % number of quadrature points
                 'eigsolver','eigs','eigtol',1e-14,'nbeigs',6);

[lambda,numdofs,cond] = fem1d_evp(options);

sumeig = sum(lambda);

% Exact solution = n + 1/2 , n = 0,1,....
exact = 18; % 1/2 + 3/2 + 5/2 + 7/2 + 9/2 + 11/2 = 18

erreig = sumeig - exact;
fprintf('Error in the sum of the first six eigenvalues = %15.7e\n',erreig);

下面给出几个主要的子程序:

  • fem1d_evp.m求解特征值问题的主要函数:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Scientific Computing : Computational Methods for Nonlinear 
% Eigenvalue Problems, LSEC, Chinese Academy of Sciences, Beijing, China.
%============================================================================
%
% Finite Element Code for Laplace and Schrodinger Eigenvalue Problems
% -------------------------------------------------------------------
% Author    : Song Lu, LSEC
% E-mail    : lusongcool@163.com
%
%============================================================================
%
% MODEL 1D Problem (Strong Form)
% ==============================
% One-dimensional spectral finite element program to solve the Laplace and
% Schrodinger eigenproblems:
%
%     -u''/A + V u = \lambda u in \Omega = (a,b),
%
% where V is the harmonic potential in the Schrodinger equation and V = 0 for 
% the Laplace eigenproblem). The constant A is 2 for the Schrodinger and 1 
% for the Laplace problem. \lambda is the eigenvalue and u is the eigenfunction
%
% Boundary conditions are: u(0) = u(1) = 0 for Laplace eigenproblem
%                          u(-10) = u(10) = 0 for Schrodinger eigenproblem
%
% FE Approximation
% ================
% Galerkin method with spectral finite elements
%
% -------------------------------------------------------
% USAGE: fem1d_evp(options)
% -------------------------------------------------------
% options : structure
%         : options.verbose = 'on' or 'off';
%         : options.problem = 'laplace' or 'schrodinger' 
%         : options.domain  = [0 1] or [-10 10], etc.
%         : options.numel   = number of elements
%         : options.nsp     = number of quadrature points
%         : options.analysis = 'fe'
% Default setting : 
% options = struct('verbose','on','problem','laplace','domain',[0 1], ...
%                  'analysis','fe','element_type','spectral', ...
%                  'element_order',4,'numel',3,'nsp',6, ...
%                  'eigsolver','eigs','eigtol',1e-12,'nbeigs',6);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [lambda,numdofs,condbigs] = fem1d_evp(options)
%Hu = lambdaSu
global bigh;%H
global bigs;%S

condbigs = 0;%H的条件数

if nargin < 1
  help(mfilename);
  options = struct('verbose','on','problem','laplace','domain',[0 1],'analysis','fe',...
                   'element_type','spectral','element_order',4,'numel',3,...
                   'nsp',6,'eigsolver','eigs','eigtol',1e-12,'nbeigs',6);
end

addpath(genpath(pwd));%将子文件的路径

problem = options.problem;
if (~strcmp(problem,'laplace') && ~strcmp(problem,'schrodinger'))
  error('Aborting: Problem name not known');
end%主要考虑拉普拉斯方程和薛定谔方程

numel   = options.numel;
order   = options.element_order;%每个基元分几段
nsp     = options.nsp;
numnod  = order*numel + 1;%节点总数

options.numnod = numnod;

%
% start timing
%
tStart  = tic;%计时函数

%
% call mesher
%

fprintf('Constructing mesh . . .\n\n');
[coord,connect] = mesher(options);%构建洛巴托积分点坐标和连接矩阵
%coord(2:end,:)-coord(1:end-1,:) coordy洛巴托积分点坐标
fprintf('Arrays for dof info \n\n');
[nodaldofs,dofinfo,numdofs] = setupdofs(options,coord,connect);
%找出哪些分点是自由的,nodaldofs是结构体,指出每个点是第几个自由点,dofinfo是
%自由点在整个节点中的编号,numdofs是自由点编号。
options.numdofs = numdofs;

fprintf('Allocate arrays for I, J, XH, XS: sparse assembly\n\n');
m = 0; % size of index arrays

for e = 1:numel
  conn = connect(e,:); sctr = [ nodaldofs(conn).list ];
  m = m + (length(sctr))^2;
end
%根据自由度,计算来存放各个矩阵需要的空间
I = zeros(m,1); J = I; XH = I; XS = I;%初始化

%
% compute and assemble Hamiltonian matrix H and overlap matrix S
%
% loop over all the elements
%

ind = 1; % indices for arrays I, J, XH, XS
for e = 1:numel

  printelementnumber(e,numel);%根据基元数情况打印编号

  conn = connect(e,:); sctr = [ nodaldofs(conn).list ];
%提取每个单元上节点的整体序号,以及自由点的内部序数
%
% compute element contributions to Hamiltonian H (kinectic energy) and overlap S
%
  [he,se] = elemhamiltonianoverlap(options,e,coord,conn,sctr,dofinfo);

%组装单元刚度矩阵
% insert he, se into vector arrays
%
  sctrlen = length(sctr);
  temp = meshgrid(sctr);
  I(ind:ind+sctrlen^2-1) = temp(:);%把temp按列拉直
  temp = temp';
  J(ind:ind+sctrlen^2-1) = temp(:);%按行拉直
  XH(ind:ind+sctrlen^2-1) = he(:);
  XS(ind:ind+sctrlen^2-1) = se(:);
  ind = ind + sctrlen^2;

end

%
% Create H and S-matrices from the arrays
%

fprintf('Performing sparse assembly of system matrices (%d x %d)\n\n',numdofs,numdofs);

bigh = sparse(I,J,XH,numdofs,numdofs);
bigs = sparse(I,J,XS,numdofs,numdofs);

fprintf('Freeing memory: I, J, XH, XS arrays\n\n',numdofs,numdofs);
clear I; clear J; clear XH; clear XS;

condbigs = condest(bigs);
fprintf('Condition number of S = %g\n',condbigs);

%
% solve the generalized eigenvalue problem: H c = \lambda S c
%

fprintf('Solving generalized eigenproblem . . .\n\n');
[lambda,eigv] = eigsolverinterface(options.eigsolver,options.nbeigs);

%%%%%%%%%%%%%%%%%%
% DISPLAY RESULTS
%%%%%%%%%%%%%%%%%%

fprintf('\n\nFEM RESULTS\n');
fprintf('===========\n');
format long;
fprintf('Problem domain = [%g %g]\n', options.domain(1), options.domain(2));
fprintf('Number of elements = %d\n', options.numel);
fprintf('Number of nodes = %d\n', options.numnod);
fprintf('Number of quadrature points = %d\n', nsp);
fprintf('Number of DOFs  = %d\n', options.numdofs);
fprintf('Condition number of S = %g\n',condbigs);
fprintf('Eigenvalues = ');

fprintf('%18.10f ', sort(lambda)); % ascending order
fprintf('\n\n');

tEnd = toc(tStart);
fprintf('Total time in fem1d_evp: %d minutes and %f seconds\n\n',floor(tEnd/60),rem(tEnd,60));

return
end
  • mesher.m定义节点以及各点间的相互关系(连接矩阵)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Purpose
% =======
% Finite element mesh in 1D with option to create regular (m-node) elements.
% Output plot is also generated to show the mesh.
%
%----------------------------------------------------------------------------
% Function Syntax
% ===============
% function [coord,connect] = mesher(options)
%
% Inputs
% ======                               
% options          : data structure with mesh/element information 
%
% Outputs
% =======        
% coord            : 1D array which stores the coordinates of the nodes
%                    coord(I,1) : node I coordinates
% connect          : element connectivity 
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%

function [coord,connect] = mesher(options)

element_type = options.element_type;
order = options.element_order;

switch element_type
  case 'spectral'
  otherwise
    fprintf('Mesh generator not coded for element type = %s'\n,element_type);
    error('Aborting . .');
end

numel  = options.numel;
plot   = options.verbose;
domain = options.domain;
xmin   = domain(1); xmax = domain(2);

numnod = order*numel+1;%节点数目

coord  = zeros(numnod,1);

coord(:,1) = linspace(xmin,xmax,numnod);%坐标等分

%
% connectivity
%

connect = zeros(numel,order+1);%连接矩阵,没行表示一个基元块
for e = 1:numel
  is = order*(e-1) + 1; 
  connect(e,:) = is:is+order;
end

%
% modify nodal coordinates (Lobatto points)
%

if (order >= 2)
  xi = lobatto_points(order+1);% [-1 1]上的洛巴托积分点
  for e = 1:numel
    is = order*(e-1) + 1; 
    a = coord(is,:); b = coord(is+order,:);%不同基元上的左右两点
    for n = is:is+order
      index = n-is+1;%节点的元内编号
      coord(n,:) = 0.5*(b + a) + 0.5*(b - a).*xi(index);
      %通过映射关系找出每个基元上的洛巴托点对应的点
    end
  end
end
%把均分点调整成洛巴托积分点
%-------------------------------------------------------------------
% Mesh plotting
%-------------------------------------------------------------------

if (strcmp(plot,'on'))
  hold on;
  axis([xmin xmax -1 1 ]);
  xlabel('x','fontsize', 12);  % label for x-axis
  plotnodes(coord);     
  hold off;
end

return
end
  • plotnodes.m画一下修正为洛巴托积分点的各个节点,其实不是必要的:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% Purpose
% =======
% Plot nodes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function plotnodes(coord) 

close all;
x = coord(:,1);
y = zeros(1,length(x));
set(gcf,'Position',[0 0 600 100]);
plot(x,y,'.','Linewidth',3,'MarkerEdgeColor','b','MarkerFaceColor','b','MarkerSize',25);

return
end
  • eigsolverinterface.m用于求解矩阵特征值问题的特征值和特征向量,比起eigs函数,多了一步对非对称矩阵做对称化操作,大大加快了求解速度。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [lambda,eigv] = eigsolverinterface(solvertype,nbeigs)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

global bigh;
global bigs;

solvertype = lower(solvertype);
%统统变小写
%
% solve the generalized eigenvalue problem: H c = \lambda S c
%

nbfreedofs = length(bigh(:,1));

switch solvertype

  case 'eigs'
    opts.maxit = 1000;
    opts.tol   = 1.e-12;
    opts.disp  = 2;
    % symmetrize
    bigs = 0.5*(bigs + bigs');
    [eigv,D,failureflag] = eigs(bigh,bigs,nbeigs,'SM',opts);
    for i = 1:nbeigs
      lambda(i,1) = D(i,i);
    end

   otherwise
    error('Aborting - solvertype undefined');

end
  • elemhamiltonianoverlap.m计算每个单元上的刚度和载荷矩阵。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% function [he,se] = elemhamiltonianoverlap(options,e,coord,nodes,dofs,dofinfo)
% Purpose
% =======
% Element Hamiltonian and overlap matrices for spectral finite elements
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [he,se] = elemhamiltonianoverlap(options,e,coord,nodes,dofs,dofinfo)


% initialize element Hamiltonian and overlap matrices to zero
%

nsp     = options.nsp;%高斯点数
problem = options.problem;%
numel   = options.numel;%基元数目

fac = 0.5;%针对于薛定谔问题的系数
if (strcmp(problem,'laplace')) fac = 1.0; end

eorder = options.element_order;%order就是每个单元涉及到的基函数的数目

dofs_to_nodes = dofinfo(dofs); % dofs = DOFs of the element,当前单元自由节点对应的总节点编号
ndofs = length(dofs_to_nodes); % global node Ids that correspond to these DOFs,这个单元自由节点的数目
dofs_to_locindices = zeros(1,ndofs);
for i = 1:ndofs
  dofs_to_locindices(i) = find(nodes == dofs_to_nodes(i));
  %自由节点们在单元中的序号
end

xe = coord(nodes,1); % xe是单元节点的洛巴托坐标
a = xe(1); b = xe(end);%单元两端坐标(洛巴托)
Le = b - a; detj = Le/2.;%区间长度与伸缩比

he = zeros(ndofs,ndofs);
se = zeros(ndofs,ndofs);%单刚初始化

%
% loop over Gauss points in xi-direction
%

gauss = gauss_points(nsp); % Using Gauss-Legendre quadrature (not Gauss-Lobatto !)
weight = gauss_weights(nsp);%获取6个高斯点以及权重

for i = 1:nsp %按高斯点来对基函数配对
  xi = gauss(i);

  x = 0.5*(1. - xi)*a + 0.5*(1. + xi)*b;%x为高斯点在该段区间中对应的值

%
% FE shape functions and local derivatives
%
  [NFE, dNFEdxi ] = shapefunctions(eorder,xi); % all the shapefunctions
%各个标准区间上的节点基函数在高斯点出的函数值
  N = NFE(dofs_to_locindices);
  dNdxi = dNFEdxi(dofs_to_locindices);
  %高斯点在具有自由度的几个基函数上的值

% derivative of shape function with respect to global coordinate x
  dNdx = dNdxi/detj;
  %导数值映射到一般区间上会变

%
% assemble element Hamiltonian (he) and overlap matrices (se)
%
  he = he + fac*weight(i)*(dNdx'*dNdx)*detj;
  se = se + weight(i)*N'*N*detj; 

  if (strcmp(problem,'schrodinger')) 
    % V = x^2/2 - Harmonic potential
    he = he + 0.5*x*x*weight(i)*N'*N*detj; 
  end
end

return

end
  • gauss_points.m,gauss_weights.m,lobatto_points.m,lobatto_weights.m 顾名思义,分别给出高斯点和洛巴托点及其权重:
  function x = guass_points(n);
%
%  function x = gauss_points(n)
%
%  For 1 <= n <= 30, returns the abscissas x of an n point
%  Gauss-Legendre quadrature rule over the interval [-1,1].
%
  x = ones(1,n);

  if ( n == 1 ) 
    x(1) = 0.0;
  elseif ( n == 2 )
    x(1) = - 0.577350269189625764509148780502; 
    x(2) =   0.577350269189625764509148780502;  
  elseif ( n == 3 )
    x(1) = - 0.774596669241483377035853079956; 
    x(2) =  0.000000000000000;
    x(3) =   0.774596669241483377035853079956;
  elseif ( n == 4 )
    x(1) = - 0.861136311594052575223946488893;
    x(2) = - 0.339981043584856264802665759103;
    x(3) =   0.339981043584856264802665759103;
    x(4) =   0.861136311594052575223946488893;
  elseif ( n == 5 )
    x(1) = - 0.906179845938663992797626878299;
    x(2) = - 0.538469310105683091036314420700;
    x(3) =   0.0;
    x(4) =   0.538469310105683091036314420700;
    x(5) =   0.906179845938663992797626878299;
  elseif ( n == 6 ) 
    x(1) = - 0.932469514203152027812301554494;
    x(2) = - 0.661209386466264513661399595020;
    x(3) = - 0.238619186083196908630501721681;
    x(4) =   0.238619186083196908630501721681;
    x(5) =   0.661209386466264513661399595020;
    x(6) =   0.932469514203152027812301554494;
  elseif ( n == 7 ) 
    x(1) = - 0.949107912342758524526189684048;
    x(2) = - 0.741531185599394439863864773281;
    x(3) = - 0.405845151377397166906606412077;
    x(4) =   0.0;
    x(5) =   0.405845151377397166906606412077;
    x(6) =   0.741531185599394439863864773281;
    x(7) =   0.949107912342758524526189684048;
  elseif ( n == 8 )
    x(1) = - 0.960289856497536231683560868569;
    x(2) = - 0.796666477413626739591553936476;
    x(3) = - 0.525532409916328985817739049189;
    x(4) = - 0.183434642495649804939476142360;
    x(5) =   0.183434642495649804939476142360;
    x(6) =   0.525532409916328985817739049189;
    x(7) =   0.796666477413626739591553936476;
    x(8) =   0.960289856497536231683560868569;
  elseif ( n == 9 )
    x(1) = - 0.968160239507626089835576202904;
    x(2) = - 0.836031107326635794299429788070;
    x(3) = - 0.613371432700590397308702039341;
    x(4) = - 0.324253423403808929038538014643;
    x(5) =   0.0;
    x(6) =   0.324253423403808929038538014643;
    x(7) =   0.613371432700590397308702039341;
    x(8) =   0.836031107326635794299429788070;
    x(9) =   0.968160239507626089835576202904;
  elseif ( n == 10 )
    x(1) =  - 0.973906528517171720077964012084;
    x(2) =  - 0.865063366688984510732096688423;
    x(3) =  - 0.679409568299024406234327365115;
    x(4) =  - 0.433395394129247290799265943166;
    x(5) =  - 0.148874338981631210884826001130;
    x(6) =    0.148874338981631210884826001130;
    x(7) =    0.433395394129247290799265943166;
    x(8) =    0.679409568299024406234327365115;
    x(9) =    0.865063366688984510732096688423;
    x(10) =   0.973906528517171720077964012084;
  elseif (n == 11)
    x(1)=-0.978228658146056992803938001123;
    x(2)=-0.887062599768095299075157769304;
    x(3)=-0.730152005574049324093416252031;
    x(4)=-0.519096129206811815925725669459;
    x(5)=-0.269543155952344972331531985401;
    x(6)= 0;
    x(7)= 0.269543155952344972331531985401;
    x(8)= 0.519096129206811815925725669459;
    x(9)= 0.730152005574049324093416252031;
    x(10)= 0.887062599768095299075157769304;
    x(11)= 0.978228658146056992803938001123;
  elseif (n == 12)
    x(1)=-0.981560634246719250690549090149;
    x(2)=-0.904117256370474856678465866119;
    x(3)=-0.769902674194304687036893833213;
    x(4)=-0.587317954286617447296702418941;
    x(5)=-0.367831498998180193752691536644;
    x(6)=-0.125233408511468915472441369464;
    x(7)= 0.125233408511468915472441369464;
    x(8)= 0.367831498998180193752691536644;
    x(9)= 0.587317954286617447296702418941;
    x(10)= 0.769902674194304687036893833213;
    x(11)= 0.904117256370474856678465866119;
    x(12)= 0.981560634246719250690549090149;
  elseif (n == 13)
    x(1)=-0.984183054718588149472829448807;
    x(2)=-0.917598399222977965206547836501;
    x(3)=-0.801578090733309912794206489583;
    x(4)=-0.642349339440340220643984606996;
    x(5)=-0.448492751036446852877912852128;
    x(6)=-0.230458315955134794065528121098;
    x(7)= 0;
    x(8)= 0.230458315955134794065528121098;
    x(9)= 0.448492751036446852877912852128;
    x(10)= 0.642349339440340220643984606996;
    x(11)= 0.801578090733309912794206489583;
    x(12)= 0.917598399222977965206547836501;
    x(13)= 0.984183054718588149472829448807;
  elseif (n == 14)
    x(1)=-0.986283808696812338841597266704;
    x(2)=-0.928434883663573517336391139378;
    x(3)=-0.827201315069764993189794742650;
    x(4)=-0.687292904811685470148019803019;
    x(5)=-0.515248636358154091965290718551;
    x(6)=-0.319112368927889760435671824168;
    x(7)=-0.108054948707343662066244650220;
    x(8)= 0.108054948707343662066244650220;
    x(9)= 0.319112368927889760435671824168;
    x(10)= 0.515248636358154091965290718551;
    x(11)= 0.687292904811685470148019803019;
    x(12)= 0.827201315069764993189794742650;
    x(13)= 0.928434883663573517336391139378;
    x(14)= 0.986283808696812338841597266704;
  elseif (n == 15)
    x(1)=-0.987992518020485428489565718587;
    x(2)=-0.937273392400705904307758947710;
    x(3)=-0.848206583410427216200648320774;
    x(4)=-0.724417731360170047416186054614;
    x(5)=-0.570972172608538847537226737254;
    x(6)=-0.394151347077563369897207370981;
    x(7)=-0.201194093997434522300628303395;
    x(8)= 0;
    x(9)= 0.201194093997434522300628303395;
    x(10)= 0.394151347077563369897207370981;
    x(11)= 0.570972172608538847537226737254;
    x(12)= 0.724417731360170047416186054614;
    x(13)= 0.848206583410427216200648320774;
    x(14)= 0.937273392400705904307758947710;
    x(15)= 0.987992518020485428489565718587;
  elseif (n == 16)
    x(1)=-0.989400934991649932596154173450;
    x(2)=-0.944575023073232576077988415535;
    x(3)=-0.865631202387831743880467897712;
    x(4)=-0.755404408355003033895101194847;
    x(5)=-0.617876244402643748446671764049;
    x(6)=-0.458016777657227386342419442984;
    x(7)=-0.281603550779258913230460501460;
    x(8)=-0.0950125098376374401853193354250;
    x(9)= 0.0950125098376374401853193354250;
    x(10)= 0.281603550779258913230460501460;
    x(11)= 0.458016777657227386342419442984;
    x(12)= 0.617876244402643748446671764049;
    x(13)= 0.755404408355003033895101194847;
    x(14)= 0.865631202387831743880467897712;
    x(15)= 0.944575023073232576077988415535;
    x(16)= 0.989400934991649932596154173450;
  elseif (n == 17)
    x(1)=-0.990575475314417335675434019941;
    x(2)=-0.950675521768767761222716957896;
    x(3)=-0.880239153726985902122955694488;
    x(4)=-0.781514003896801406925230055520;
    x(5)=-0.657671159216690765850302216643;
    x(6)=-0.512690537086476967886246568630;
    x(7)=-0.351231763453876315297185517095;
    x(8)=-0.178484181495847855850677493654;
    x(9)= 0;
    x(10)= 0.178484181495847855850677493654;
    x(11)= 0.351231763453876315297185517095;
    x(12)= 0.512690537086476967886246568630;
    x(13)= 0.657671159216690765850302216643;
    x(14)= 0.781514003896801406925230055520;
    x(15)= 0.880239153726985902122955694488;
    x(16)= 0.950675521768767761222716957896;
    x(17)= 0.990575475314417335675434019941;
  elseif (n == 18)
    x(1)=-0.991565168420930946730016004706;
    x(2)=-0.955823949571397755181195892930;
    x(3)=-0.892602466497555739206060591127;
    x(4)=-0.803704958972523115682417455015;
    x(5)=-0.691687043060353207874891081289;
    x(6)=-0.559770831073947534607871548525;
    x(7)=-0.411751161462842646035931793833;
    x(8)=-0.251886225691505509588972854878;
    x(9)=-0.0847750130417353012422618529358;
    x(10)= 0.0847750130417353012422618529358;
    x(11)= 0.251886225691505509588972854878;
    x(12)= 0.411751161462842646035931793833;
    x(13)= 0.559770831073947534607871548525;
    x(14)= 0.691687043060353207874891081289;
    x(15)= 0.803704958972523115682417455015;
    x(16)= 0.892602466497555739206060591127;
    x(17)= 0.955823949571397755181195892930;
    x(18)= 0.991565168420930946730016004706;
  elseif (n == 19)
    x(1)=-0.992406843843584403189017670253;
    x(2)=-0.960208152134830030852778840688;
    x(3)=-0.903155903614817901642660928532;
    x(4)=-0.822714656537142824978922486713;
    x(5)=-0.720966177335229378617095860824;
    x(6)=-0.600545304661681023469638164946;
    x(7)=-0.464570741375960945717267148104;
    x(8)=-0.316564099963629831990117328850;
    x(9)=-0.160358645640225375868096115741;
    x(10)= 0;
    x(11)= 0.160358645640225375868096115741;
    x(12)= 0.316564099963629831990117328850;
    x(13)= 0.464570741375960945717267148104;
    x(14)= 0.600545304661681023469638164946;
    x(15)= 0.720966177335229378617095860824;
    x(16)= 0.822714656537142824978922486713;
    x(17)= 0.903155903614817901642660928532;
    x(18)= 0.960208152134830030852778840688;
    x(19)= 0.992406843843584403189017670253;
  elseif (n == 20)
    x(1)=-0.993128599185094924786122388471;
    x(2)=-0.963971927277913791267666131197;
    x(3)=-0.912234428251325905867752441203;
    x(4)=-0.839116971822218823394529061702;
    x(5)=-0.746331906460150792614305070356;
    x(6)=-0.636053680726515025452836696226;
    x(7)=-0.510867001950827098004364050955;
    x(8)=-0.373706088715419560672548177025;
    x(9)=-0.227785851141645078080496195369;
    x(10)=-0.0765265211334973337546404093988;
    x(11)= 0.0765265211334973337546404093988;
    x(12)= 0.227785851141645078080496195369;
    x(13)= 0.373706088715419560672548177025;
    x(14)= 0.510867001950827098004364050955;
    x(15)= 0.636053680726515025452836696226;
    x(16)= 0.746331906460150792614305070356;
    x(17)= 0.839116971822218823394529061702;
    x(18)= 0.912234428251325905867752441203;
    x(19)= 0.963971927277913791267666131197;
    x(20)= 0.993128599185094924786122388471;
  elseif (n == 21)
    x(1)=-0.99375217062038950026024203593794;
    x(2)=-0.96722683856630629431662221490770;
    x(3)=-0.92009933415040082879018713371497;
    x(4)=-0.85336336458331728364725063858757;
    x(5)=-0.76843996347567790861587785130623;
    x(6)=-0.66713880419741231930596666999034;
    x(7)=-0.55161883588721980705901879672431;
    x(8)=-0.42434212020743878357366888854379;
    x(9)=-0.28802131680240109660079251606460;
    x(10)=-0.14556185416089509093703098233869;
    x(11)=0;
    x(12)=0.14556185416089509093703098233869;
    x(13)=0.28802131680240109660079251606460;
    x(14)=0.42434212020743878357366888854379;
    x(15)=0.55161883588721980705901879672431;
    x(16)=0.66713880419741231930596666999034;
    x(17)=0.76843996347567790861587785130623;
    x(18)=0.85336336458331728364725063858757;
    x(19)=0.92009933415040082879018713371497;
    x(20)=0.96722683856630629431662221490770;
    x(21)=0.99375217062038950026024203593794;
  elseif (n == 22)
    x(1)=-0.99429458548239929207303142116130;
    x(2)=-0.97006049783542872712395098676527;
    x(3)=-0.92695677218717400052069293925905;
    x(4)=-0.86581257772030013653642563701938;
    x(5)=-0.78781680597920816200427795540835;
    x(6)=-0.69448726318668278005068983576226;
    x(7)=-0.58764040350691159295887692763865;
    x(8)=-0.46935583798675702640633071096641;
    x(9)=-0.34193582089208422515814742042738;
    x(10)=-0.20786042668822128547884653391955;
    x(11)=-0.069739273319722221213841796118628;
    x(12)=0.069739273319722221213841796118628;
    x(13)=0.20786042668822128547884653391955;
    x(14)=0.34193582089208422515814742042738;
    x(15)=0.46935583798675702640633071096641;
    x(16)=0.58764040350691159295887692763865;
    x(17)=0.69448726318668278005068983576226;
    x(18)=0.78781680597920816200427795540835;
    x(19)=0.86581257772030013653642563701938;
    x(20)=0.92695677218717400052069293925905;
    x(21)=0.97006049783542872712395098676527;
    x(22)=0.99429458548239929207303142116130;
  elseif (n == 23)
    x(1)=-0.99476933499755212352392571544557;
    x(2)=-0.97254247121811523195602407682078;
    x(3)=-0.93297108682601610234919698903842;
    x(4)=-0.87675235827044166737815688593415;
    x(5)=-0.80488840161883989215111840699678;
    x(6)=-0.71866136313195019446162448374862;
    x(7)=-0.61960987576364615638509731164960;
    x(8)=-0.50950147784600754968979304786685;
    x(9)=-0.39030103803029083142148887288061;
    x(10)=-0.26413568097034493053386953828331;
    x(11)=-0.13325682429846611093174268224177;
    x(12)=0;
    x(13)=0.13325682429846611093174268224177;
    x(14)=0.26413568097034493053386953828331;
    x(15)=0.39030103803029083142148887288061;
    x(16)=0.50950147784600754968979304786685;
    x(17)=0.61960987576364615638509731164960;
    x(18)=0.71866136313195019446162448374862;
    x(19)=0.80488840161883989215111840699678;
    x(20)=0.87675235827044166737815688593415;
    x(21)=0.93297108682601610234919698903842;
    x(22)=0.97254247121811523195602407682078;
    x(23)=0.99476933499755212352392571544557;
  elseif (n == 24)
    x(1)=-0.99518721999702136017999740970074;
    x(2)=-0.97472855597130949819839199300817;
    x(3)=-0.93827455200273275852364900170872;
    x(4)=-0.88641552700440103421315434198220;
    x(5)=-0.82000198597390292195394987266975;
    x(6)=-0.74012419157855436424382810309998;
    x(7)=-0.64809365193697556925249578691075;
    x(8)=-0.54542147138883953565837561721837;
    x(9)=-0.43379350762604513848708423191335;
    x(10)=-0.31504267969616337438679329131981;
    x(11)=-0.19111886747361630915863982075707;
    x(12)=-0.064056892862605626085043082624745;
    x(13)=0.064056892862605626085043082624745;
    x(14)=0.19111886747361630915863982075707;
    x(15)=0.31504267969616337438679329131981;
    x(16)=0.43379350762604513848708423191335;
    x(17)=0.54542147138883953565837561721837;
    x(18)=0.64809365193697556925249578691075;
    x(19)=0.74012419157855436424382810309998;
    x(20)=0.82000198597390292195394987266975;
    x(21)=0.88641552700440103421315434198220;
    x(22)=0.93827455200273275852364900170872;
    x(23)=0.97472855597130949819839199300817;
    x(24)=0.99518721999702136017999740970074;
  elseif (n == 25)
    x(1)=-0.99555696979049809790878494689390;
    x(2)=-0.97666392145951751149831538647959;
    x(3)=-0.94297457122897433941401116965847;
    x(4)=-0.89499199787827536885104200678280;
    x(5)=-0.83344262876083400142102110869357;
    x(6)=-0.75925926303735763057728286520436;
    x(7)=-0.67356636847346836448512063324762;
    x(8)=-0.57766293024122296772368984161265;
    x(9)=-0.47300273144571496052218211500919;
    x(10)=-0.36117230580938783773582173012764;
    x(11)=-0.24386688372098843204519036279745;
    x(12)=-0.12286469261071039638735981880804;
    x(13)=0;
    x(14)=0.12286469261071039638735981880804;
    x(15)=0.24386688372098843204519036279745;
    x(16)=0.36117230580938783773582173012764;
    x(17)=0.47300273144571496052218211500919;
    x(18)=0.57766293024122296772368984161265;
    x(19)=0.67356636847346836448512063324762;
    x(20)=0.75925926303735763057728286520436;
    x(21)=0.83344262876083400142102110869357;
    x(22)=0.89499199787827536885104200678280;
    x(23)=0.94297457122897433941401116965847;
    x(24)=0.97666392145951751149831538647959;
    x(25)=0.99555696979049809790878494689390;
  elseif (n == 26)
    x(1)=-0.99588570114561692900321695932291;
    x(2)=-0.97838544595647099110058035431193;
    x(3)=-0.94715906666171425013591528351804;
    x(4)=-0.90263786198430707421766559923121;
    x(5)=-0.84544594278849801879750706146784;
    x(6)=-0.77638594882067885619296724724228;
    x(7)=-0.69642726041995726486381391372942;
    x(8)=-0.60669229301761806323197874691689;
    x(9)=-0.50844071482450571769570306472557;
    x(10)=-0.40305175512348630648107737709888;
    x(11)=-0.29200483948595689514283538207783;
    x(12)=-0.17685882035689018396905774841834;
    x(13)=-0.059230093429313207093718575198403;
    x(14)=0.059230093429313207093718575198403;
    x(15)=0.17685882035689018396905774841834;
    x(16)=0.29200483948595689514283538207783;
    x(17)=0.40305175512348630648107737709888;
    x(18)=0.50844071482450571769570306472557;
    x(19)=0.60669229301761806323197874691689;
    x(20)=0.69642726041995726486381391372942;
    x(21)=0.77638594882067885619296724724228;
    x(22)=0.84544594278849801879750706146784;
    x(23)=0.90263786198430707421766559923121;
    x(24)=0.94715906666171425013591528351804;
    x(25)=0.97838544595647099110058035431193;
    x(26)=0.99588570114561692900321695932291;
  elseif (n == 27)
    x(1)=-0.99617926288898856693888720838123;
    x(2)=-0.97992347596150122285587335566105;
    x(3)=-0.95090055781470500685190803064388;
    x(4)=-0.90948232067749110430064501820969;
    x(5)=-0.85620790801829449030273722270684;
    x(6)=-0.79177163907050822714439734410727;
    x(7)=-0.71701347373942369929481621164234;
    x(8)=-0.63290797194649514092773463763449;
    x(9)=-0.54055156457945689490030094155998;
    x(10)=-0.44114825175002688058597415568928;
    x(11)=-0.33599390363850889973031903420728;
    x(12)=-0.22645936543953685885723910736023;
    x(13)=-0.11397258560952996693289498386998;
    x(14)=0;
    x(15)=0.11397258560952996693289498386998;
    x(16)=0.22645936543953685885723910736023;
    x(17)=0.33599390363850889973031903420728;
    x(18)=0.44114825175002688058597415568928;
    x(19)=0.54055156457945689490030094155998;
    x(20)=0.63290797194649514092773463763449;
    x(21)=0.71701347373942369929481621164234;
    x(22)=0.79177163907050822714439734410727;
    x(23)=0.85620790801829449030273722270684;
    x(24)=0.90948232067749110430064501820969;
    x(25)=0.95090055781470500685190803064388;
    x(26)=0.97992347596150122285587335566105;
    x(27)=0.99617926288898856693888720838123;
  elseif (n == 28)
    x(1)=-0.99644249757395444995043639048331;
    x(2)=-0.98130316537087275369455994580783;
    x(3)=-0.95425928062893819725410183970522;
    x(4)=-0.91563302639213207386968942332993;
    x(5)=-0.86589252257439504894225456737969;
    x(6)=-0.80564137091717917144788595542528;
    x(7)=-0.73561087801363177202814451029253;
    x(8)=-0.65665109403886496121989817650674;
    x(9)=-0.56972047181140171930800328335643;
    x(10)=-0.47587422495511826103441184766743;
    x(11)=-0.37625151608907871022135720955609;
    x(12)=-0.27206162763517807767682635612577;
    x(13)=-0.16456928213338077128147177789117;
    x(14)=-0.055079289884034270426516527341880;
    x(15)=0.055079289884034270426516527341880;
    x(16)=0.16456928213338077128147177789117;
    x(17)=0.27206162763517807767682635612577;
    x(18)=0.37625151608907871022135720955609;
    x(19)=0.47587422495511826103441184766743;
    x(20)=0.56972047181140171930800328335643;
    x(21)=0.65665109403886496121989817650674;
    x(22)=0.73561087801363177202814451029253;
    x(23)=0.80564137091717917144788595542528;
    x(24)=0.86589252257439504894225456737969;
    x(25)=0.91563302639213207386968942332993;
    x(26)=0.95425928062893819725410183970522;
    x(27)=0.98130316537087275369455994580783;
    x(28)=0.99644249757395444995043639048331;
  elseif (n == 29)
    x(1)=-0.99667944226059658616319153254935;
    x(2)=-0.98254550526141317487092601578638;
    x(3)=-0.95728559577808772579820803698082;
    x(4)=-0.92118023295305878509375343608311;
    x(5)=-0.87463780492010279041779342125658;
    x(6)=-0.81818548761525244498957221457878;
    x(7)=-0.75246285173447713391261007721214;
    x(8)=-0.67821453760268651515618500539199;
    x(9)=-0.59628179713822782037958621118899;
    x(10)=-0.50759295512422764210262791962752;
    x(11)=-0.41315288817400866389070658603162;
    x(12)=-0.31403163786763993494819592319105;
    x(13)=-0.21135228616600107450637572890294;
    x(14)=-0.10627823013267923017098239243038;
    x(15)=0;
    x(16)=0.10627823013267923017098239243038;
    x(17)=0.21135228616600107450637572890294;
    x(18)=0.31403163786763993494819592319105;
    x(19)=0.41315288817400866389070658603162;
    x(20)=0.50759295512422764210262791962752;
    x(21)=0.59628179713822782037958621118899;
    x(22)=0.67821453760268651515618500539199;
    x(23)=0.75246285173447713391261007721214;
    x(24)=0.81818548761525244498957221457878;
    x(25)=0.87463780492010279041779342125658;
    x(26)=0.92118023295305878509375343608311;
    x(27)=0.95728559577808772579820803698082;
    x(28)=0.98254550526141317487092601578638;
    x(29)=0.99667944226059658616319153254935;
  elseif (n == 30)
    x(1)=-0.99689348407464954027163005091870;
    x(2)=-0.98366812327974720997003258160566;
    x(3)=-0.96002186496830751221687102558180;
    x(4)=-0.92620004742927432587932427708047;
    x(5)=-0.88256053579205268154311646253023;
    x(6)=-0.82956576238276839744289811973250;
    x(7)=-0.76777743210482619491797734097450;
    x(8)=-0.69785049479331579693229238802664;
    x(9)=-0.62052618298924286114047755643119;
    x(10)=-0.53662414814201989926416979331107;
    x(11)=-0.44703376953808917678060990032285;
    x(12)=-0.35270472553087811347103720708937;
    x(13)=-0.25463692616788984643980512981781;
    x(14)=-0.15386991360858354696379467274326;
    x(15)=-0.051471842555317695833025213166723;
    x(16)=0.051471842555317695833025213166723;
    x(17)=0.15386991360858354696379467274326;
    x(18)=0.25463692616788984643980512981781;
    x(19)=0.35270472553087811347103720708937;
    x(20)=0.44703376953808917678060990032285;
    x(21)=0.53662414814201989926416979331107;
    x(22)=0.62052618298924286114047755643119;
    x(23)=0.69785049479331579693229238802664;
    x(24)=0.76777743210482619491797734097450;
    x(25)=0.82956576238276839744289811973250;
    x(26)=0.88256053579205268154311646253023;
    x(27)=0.92620004742927432587932427708047;
    x(28)=0.96002186496830751221687102558180;
    x(29)=0.98366812327974720997003258160566;
    x(30)=0.99689348407464954027163005091870;
  elseif (n == 48)
    x(1) = -0.9987710072524256;
    x(2) = -0.9935301722663504;
    x(3) = -0.9841245837228260;
    x(4) = -0.9705915925462471;
    x(5) = -0.9529877031604301;
    x(6) = -0.9313866907065540;
    x(7) = -0.9058791367155696;
    x(8) = -0.8765720202742477;
    x(9) = -0.8435882616243932;
    x(10) = -0.8070662040294426;
    x(11) = -0.7671590325157405;
    x(12) = -0.7240341309238147;
    x(13) = -0.6778723796326640;
    x(14) = -0.6288673967765133;
    x(15) = -0.5772247260839724;
    x(16) = -0.5231609747222329;
    x(17) = -0.4669029047509581;
    x(18) = -0.4086864819907169;
    x(19) = -0.3487558862921609;
    x(20) = -0.2873624873554553;
    x(21) = -0.2247637903946891;
    x(22) = -0.1612223560688917;
    x(23) = -0.0970046992094628;
    x(24) = -0.0323801709628695;
    x(25) = 0.0323801709628694;
    x(26) = 0.0970046992094629;
    x(27) = 0.1612223560688917;
    x(28) = 0.2247637903946892;
    x(29) = 0.2873624873554556;
    x(30) = 0.3487558862921611;
    x(31) = 0.4086864819907164;
    x(32) = 0.4669029047509585;
    x(33) = 0.5231609747222328;
    x(34) = 0.5772247260839727;
    x(35) = 0.6288673967765133;
    x(36) = 0.6778723796326639;
    x(37) = 0.7240341309238144;
    x(38) = 0.7671590325157402;
    x(39) = 0.8070662040294421;
    x(40) = 0.8435882616243933;
    x(41) = 0.8765720202742481;
    x(42) = 0.9058791367155694;
    x(43) = 0.9313866907065542;
    x(44) = 0.9529877031604304;
    x(45) = 0.9705915925462472;
    x(46) = 0.9841245837228265;
    x(47) = 0.9935301722663505;
    x(48) = 0.9987710072524260;
  else
    error('GAUSS_WEIGHTS - Fatal error! Illegal value of n.');
  end

return
end
  function w = gauss_weights(n);
%
%  function w = gauss_weights(n);
%
%  For 1 <= n <= 30, returns the weights w of an
%  n point Gauss-Legendre quadrature rule over the interval [-1,1].
%

  w = ones(1,n); 

  if ( n == 1 ) 
    w(1) = 2.0;
  elseif ( n == 2 )
    w(1) =  1.0; 
    w(2) =  w(1);
  elseif ( n == 3 )
    w(1) =  0.5555555555555555555555555555565;
    w(2) =  0.8888888888888888888888888888889;
    w(3) =  0.5555555555555555555555555555565;
  elseif ( n == 4 )
    w(1) = 0.347854845137453857373063949222;
    w(2) = 0.652145154862546142626936050778;
    w(3) = 0.652145154862546142626936050778;
    w(4) = 0.347854845137453857373063949222;
  elseif ( n == 5 )
    w(1) = 0.236926885056189087514264040720;
    w(2) = 0.478628670499366468041291514836;
    w(3) = 0.568888888888888888888888888889;
    w(4) = 0.478628670499366468041291514836;
    w(5) = 0.236926885056189087514264040720;
  elseif ( n == 6 ) 
    w(1) = 0.171324492379170345040296142173;
    w(2) = 0.360761573048138607569833513838;
    w(3) = 0.467913934572691047389870343990;
    w(4) = 0.467913934572691047389870343990;
    w(5) = 0.360761573048138607569833513838;
    w(6) = 0.171324492379170345040296142173;
  elseif ( n == 7 ) 
    w(1) = 0.129484966168869693270611432679;
    w(2) = 0.279705391489276667901467771424;
    w(3) = 0.381830050505118944950369775489;
    w(4) = 0.417959183673469387755102040816;
    w(5) = 0.381830050505118944950369775489;
    w(6) = 0.279705391489276667901467771424;
    w(7) = 0.129484966168869693270611432679;
  elseif ( n == 8 )
    w(1) = 0.101228536290376259152531354310;
    w(2) = 0.222381034453374470544355994426;
    w(3) = 0.313706645877887287337962201987;
    w(4) = 0.362683783378361982965150449277;
    w(5) = 0.362683783378361982965150449277;
    w(6) = 0.313706645877887287337962201987;
    w(7) = 0.222381034453374470544355994426;
    w(8) = 0.101228536290376259152531354310;
  elseif ( n == 9 )
    w(1) = 0.0812743883615744119718921581105;
    w(2) = 0.180648160694857404058472031243;
    w(3) = 0.260610696402935462318742869419;
    w(4) = 0.312347077040002840068630406584;
    w(5) = 0.330239355001259763164525069287;
    w(6) = 0.312347077040002840068630406584;
    w(7) = 0.260610696402935462318742869419;
    w(8) = 0.180648160694857404058472031243;
    w(9) = 0.0812743883615744119718921581105;
  elseif ( n == 10 )
    w(1) =  0.0666713443086881375935688098933;
    w(2) =  0.149451349150580593145776339658;
    w(3) =  0.219086362515982043995534934228;
    w(4) =  0.269266719309996355091226921569;
    w(5) =  0.295524224714752870173892994651;
    w(6) =  0.295524224714752870173892994651;
    w(7) =  0.269266719309996355091226921569;
    w(8) =  0.219086362515982043995534934228;
    w(9) =  0.149451349150580593145776339658;
    w(10) = 0.0666713443086881375935688098933;
  elseif ( n == 11 )
    w(1)= 0.0556685671161736664827537204425;
    w(2)= 0.125580369464904624634694299224;
    w(3)= 0.186290210927734251426097641432;
    w(4)= 0.233193764591990479918523704843;
    w(5)= 0.262804544510246662180688869891;
    w(6)= 0.272925086777900630714483528336;
    w(7)= 0.262804544510246662180688869891;
    w(8)= 0.233193764591990479918523704843;
    w(9)= 0.186290210927734251426097641432;
    w(10)= 0.125580369464904624634694299224;
    w(11)= 0.0556685671161736664827537204425;
  elseif ( n == 12 )
    w(1)= 0.0471753363865118271946159614850;
    w(2)= 0.106939325995318430960254718194;
    w(3)= 0.160078328543346226334652529543;
    w(4)= 0.203167426723065921749064455810;
    w(5)= 0.233492536538354808760849898925;
    w(6)= 0.249147045813402785000562436043;
    w(7)= 0.249147045813402785000562436043;
    w(8)= 0.233492536538354808760849898925;
    w(9)= 0.203167426723065921749064455810;
    w(10)= 0.160078328543346226334652529543;
    w(11)= 0.106939325995318430960254718194;
    w(12)= 0.0471753363865118271946159614850;
  elseif ( n == 13 )
    w(1)= 0.0404840047653158795200215922010;
    w(2)= 0.0921214998377284479144217759538;
    w(3)= 0.138873510219787238463601776869;
    w(4)= 0.178145980761945738280046691996;
    w(5)= 0.207816047536888502312523219306;
    w(6)= 0.226283180262897238412090186040;
    w(7)= 0.232551553230873910194589515269;
    w(8)= 0.226283180262897238412090186040;
    w(9)= 0.207816047536888502312523219306;
    w(10)= 0.178145980761945738280046691996;
    w(11)= 0.138873510219787238463601776869;
    w(12)= 0.0921214998377284479144217759538;
    w(13)= 0.0404840047653158795200215922010;
  elseif ( n == 14 )
    w(1)= 0.0351194603317518630318328761382;
    w(2)= 0.0801580871597602098056332770629;
    w(3)= 0.121518570687903184689414809072;
    w(4)= 0.157203167158193534569601938624;
    w(5)= 0.185538397477937813741716590125;
    w(6)= 0.205198463721295603965924065661;
    w(7)= 0.215263853463157790195876443316;
    w(8)= 0.215263853463157790195876443316;
    w(9)= 0.205198463721295603965924065661;
    w(10)= 0.185538397477937813741716590125;
    w(11)= 0.157203167158193534569601938624;
    w(12)= 0.121518570687903184689414809072;
    w(13)= 0.0801580871597602098056332770629;
    w(14)= 0.0351194603317518630318328761382;
  elseif ( n == 15 )
    w(1)= 0.0307532419961172683546283935772;
    w(2)= 0.0703660474881081247092674164507;
    w(3)= 0.107159220467171935011869546686;
    w(4)= 0.139570677926154314447804794511;
    w(5)= 0.166269205816993933553200860481;
    w(6)= 0.186161000015562211026800561866;
    w(7)= 0.198431485327111576456118326444;
    w(8)= 0.202578241925561272880620199968;
    w(9)= 0.198431485327111576456118326444;
    w(10)= 0.186161000015562211026800561866;
    w(11)= 0.166269205816993933553200860481;
    w(12)= 0.139570677926154314447804794511;
    w(13)= 0.107159220467171935011869546686;
    w(14)= 0.0703660474881081247092674164507;
    w(15)= 0.0307532419961172683546283935772;
  elseif ( n == 16 )
    w(1)= 0.0271524594117540948517805724560;
    w(2)= 0.0622535239386478928628438369944;
    w(3)= 0.0951585116824927848099251076022;
    w(4)= 0.124628971255533872052476282192;
    w(5)= 0.149595988816576732081501730547;
    w(6)= 0.169156519395002538189312079030;
    w(7)= 0.182603415044923588866763667969;
    w(8)= 0.189450610455068496285396723208;
    w(9)= 0.189450610455068496285396723208;
    w(10)= 0.182603415044923588866763667969;
    w(11)= 0.169156519395002538189312079030;
    w(12)= 0.149595988816576732081501730547;
    w(13)= 0.124628971255533872052476282192;
    w(14)= 0.0951585116824927848099251076022;
    w(15)= 0.0622535239386478928628438369944;
    w(16)= 0.0271524594117540948517805724560;
  elseif ( n == 17 )
    w(1)= 0.0241483028685479319601100262876;
    w(2)= 0.0554595293739872011294401653582;
    w(3)= 0.0850361483171791808835353701911;
    w(4)= 0.111883847193403971094788385626;
    w(5)= 0.135136368468525473286319981702;
    w(6)= 0.154045761076810288081431594802;
    w(7)= 0.168004102156450044509970663788;
    w(8)= 0.176562705366992646325270990113;
    w(9)= 0.179446470356206525458265644262;
    w(10)= 0.176562705366992646325270990113;
    w(11)= 0.168004102156450044509970663788;
    w(12)= 0.154045761076810288081431594802;
    w(13)= 0.135136368468525473286319981702;
    w(14)= 0.111883847193403971094788385626;
    w(15)= 0.0850361483171791808835353701911;
    w(16)= 0.0554595293739872011294401653582;
    w(17)= 0.0241483028685479319601100262876;
  elseif ( n == 18 )
    w(1)= 0.0216160135264833103133427102665;
    w(2)= 0.0497145488949697964533349462026;
    w(3)= 0.0764257302548890565291296776166;
    w(4)= 0.100942044106287165562813984925;
    w(5)= 0.122555206711478460184519126800;
    w(6)= 0.140642914670650651204731303752;
    w(7)= 0.154684675126265244925418003836;
    w(8)= 0.164276483745832722986053776466;
    w(9)= 0.169142382963143591840656470135;
    w(10)= 0.169142382963143591840656470135;
    w(11)= 0.164276483745832722986053776466;
    w(12)= 0.154684675126265244925418003836;
    w(13)= 0.140642914670650651204731303752;
    w(14)= 0.122555206711478460184519126800;
    w(15)= 0.100942044106287165562813984925;
    w(16)= 0.0764257302548890565291296776166;
    w(17)= 0.0497145488949697964533349462026;
    w(18)= 0.0216160135264833103133427102665;
  elseif ( n == 19 )
    w(1)= 0.0194617882297264770363120414644;
    w(2)= 0.0448142267656996003328381574020;
    w(3)= 0.0690445427376412265807082580060;
    w(4)= 0.0914900216224499994644620941238;
    w(5)= 0.111566645547333994716023901682;
    w(6)= 0.128753962539336227675515784857;
    w(7)= 0.142606702173606611775746109442;
    w(8)= 0.152766042065859666778855400898;
    w(9)= 0.158968843393954347649956439465;
    w(10)= 0.161054449848783695979163625321;
    w(11)= 0.158968843393954347649956439465;
    w(12)= 0.152766042065859666778855400898;
    w(13)= 0.142606702173606611775746109442;
    w(14)= 0.128753962539336227675515784857;
    w(15)= 0.111566645547333994716023901682;
    w(16)= 0.0914900216224499994644620941238;
    w(17)= 0.0690445427376412265807082580060;
    w(18)= 0.0448142267656996003328381574020;
    w(19)= 0.0194617882297264770363120414644;
  elseif ( n == 20 )
    w(1)= 0.0176140071391521183118619623519;
    w(2)= 0.0406014298003869413310399522749;
    w(3)= 0.0626720483341090635695065351870;
    w(4)= 0.0832767415767047487247581432220;
    w(5)= 0.101930119817240435036750135480;
    w(6)= 0.118194531961518417312377377711;
    w(7)= 0.131688638449176626898494499748;
    w(8)= 0.142096109318382051329298325067;
    w(9)= 0.149172986472603746787828737002;
    w(10)= 0.152753387130725850698084331955;
    w(11)= 0.152753387130725850698084331955;
    w(12)= 0.149172986472603746787828737002;
    w(13)= 0.142096109318382051329298325067;
    w(14)= 0.131688638449176626898494499748;
    w(15)= 0.118194531961518417312377377711;
    w(16)= 0.101930119817240435036750135480;
    w(17)= 0.0832767415767047487247581432220;
    w(18)= 0.0626720483341090635695065351870;
    w(19)= 0.0406014298003869413310399522749;
    w(20)= 0.0176140071391521183118619623519;
  elseif ( n == 21 )
    w(1)=0.016017228257774333324224616858471;
    w(2)=0.036953789770852493799950668299330;
    w(3)=0.057134425426857208283635826472448;
    w(4)=0.076100113628379302017051653300183;
    w(5)=0.093444423456033861553289741113932;
    w(6)=0.10879729916714837766347457807011;
    w(7)=0.12183141605372853419536717712573;
    w(8)=0.13226893863333746178105257449678;
    w(9)=0.13988739479107315472213342386758;
    w(10)=0.14452440398997005906382716655375;
    w(11)=0.14608113364969042719198514768337;
    w(12)=0.14452440398997005906382716655375;
    w(13)=0.13988739479107315472213342386758;
    w(14)=0.13226893863333746178105257449678;
    w(15)=0.12183141605372853419536717712573;
    w(16)=0.10879729916714837766347457807011;
    w(17)=0.093444423456033861553289741113932;
    w(18)=0.076100113628379302017051653300183;
    w(19)=0.057134425426857208283635826472448;
    w(20)=0.036953789770852493799950668299330;
    w(21)=0.016017228257774333324224616858471;
 elseif ( n == 22 )
   w(1)=0.014627995298272200684991098047185;
   w(2)=0.033774901584814154793302246865913;
   w(3)=0.052293335152683285940312051273211;
   w(4)=0.069796468424520488094961418930218;
   w(5)=0.085941606217067727414443681372703;
   w(6)=0.10041414444288096493207883783054;
   w(7)=0.11293229608053921839340060742178;
   w(8)=0.12325237681051242428556098615481;
   w(9)=0.13117350478706237073296499253031;
   w(10)=0.13654149834601517135257383123152;
   w(11)=0.13925187285563199337541024834181;
   w(12)=0.13925187285563199337541024834181;
   w(13)=0.13654149834601517135257383123152;
   w(14)=0.13117350478706237073296499253031;
   w(15)=0.12325237681051242428556098615481;
   w(16)=0.11293229608053921839340060742178;
   w(17)=0.10041414444288096493207883783054;
   w(18)=0.085941606217067727414443681372703;
   w(19)=0.069796468424520488094961418930218;
   w(20)=0.052293335152683285940312051273211;
   w(21)=0.033774901584814154793302246865913;
   w(22)=0.014627995298272200684991098047185;
 elseif ( n == 23 )
   w(1)=0.013411859487141772081309493458615;
   w(2)=0.030988005856979444310694219641885;
   w(3)=0.048037671731084668571641071632034;
   w(4)=0.064232421408525852127169615158911;
   w(5)=0.079281411776718954922892524742043;
   w(6)=0.092915766060035147477018617369765;
   w(7)=0.10489209146454141007408618501474;
   w(8)=0.11499664022241136494164351293396;
   w(9)=0.12304908430672953046757840067201;
   w(10)=0.12890572218808214997859533939979;
   w(11)=0.13246203940469661737164246470332;
   w(12)=0.13365457218610617535145711054584;
   w(13)=0.13246203940469661737164246470332;
   w(14)=0.12890572218808214997859533939979;
   w(15)=0.12304908430672953046757840067201;
   w(16)=0.11499664022241136494164351293396;
   w(17)=0.10489209146454141007408618501474;
   w(18)=0.092915766060035147477018617369765;
   w(19)=0.079281411776718954922892524742043;
   w(20)=0.064232421408525852127169615158911;
   w(21)=0.048037671731084668571641071632034;
   w(22)=0.030988005856979444310694219641885;
   w(23)=0.013411859487141772081309493458615;
 elseif ( n == 24 )
   w(1)=0.012341229799987199546805667070037;
   w(2)=0.028531388628933663181307815951878;
   w(3)=0.044277438817419806168602748211338;
   w(4)=0.059298584915436780746367758500109;
   w(5)=0.073346481411080305734033615253117;
   w(6)=0.086190161531953275917185202983743;
   w(7)=0.097618652104113888269880664464247;
   w(8)=0.10744427011596563478257734244661;
   w(9)=0.11550566805372560135334448390678;
   w(10)=0.12167047292780339120446315347626;
   w(11)=0.12583745634682829612137538251118;
   w(12)=0.12793819534675215697405616522470;
   w(13)=0.12793819534675215697405616522470;
   w(14)=0.12583745634682829612137538251118;
   w(15)=0.12167047292780339120446315347626;
   w(16)=0.11550566805372560135334448390678;
   w(17)=0.10744427011596563478257734244661;
   w(18)=0.097618652104113888269880664464247;
   w(19)=0.086190161531953275917185202983743;
   w(20)=0.073346481411080305734033615253117;
   w(21)=0.059298584915436780746367758500109;
   w(22)=0.044277438817419806168602748211338;
   w(23)=0.028531388628933663181307815951878;
   w(24)=0.012341229799987199546805667070037;
 elseif ( n == 25 )
   w(1)=0.011393798501026287947902964113235;
   w(2)=0.026354986615032137261901815295299;
   w(3)=0.040939156701306312655623487711646;
   w(4)=0.054904695975835191925936891540473;
   w(5)=0.068038333812356917207187185656708;
   w(6)=0.080140700335001018013234959669111;
   w(7)=0.091028261982963649811497220702892;
   w(8)=0.10053594906705064420220689039269;
   w(9)=0.10851962447426365311609395705012;
   w(10)=0.11485825914571164833932554586956;
   w(11)=0.11945576353578477222817812651290;
   w(12)=0.12224244299031004168895951894585;
   w(13)=0.12317605372671545120390287307905;
   w(14)=0.12224244299031004168895951894585;
   w(15)=0.11945576353578477222817812651290;
   w(16)=0.11485825914571164833932554586956;
   w(17)=0.10851962447426365311609395705012;
   w(18)=0.10053594906705064420220689039269;
   w(19)=0.091028261982963649811497220702892;
   w(20)=0.080140700335001018013234959669111;
   w(21)=0.068038333812356917207187185656708;
   w(22)=0.054904695975835191925936891540473;
   w(23)=0.040939156701306312655623487711646;
   w(24)=0.026354986615032137261901815295299;
   w(25)=0.011393798501026287947902964113235;
 elseif ( n == 26 )
   w(1)=0.010551372617343007155651187685252;
   w(2)=0.024417851092631908789615827519788;
   w(3)=0.037962383294362763950303141248850;
   w(4)=0.050975825297147811998319900724073;
   w(5)=0.063274046329574835539453689907045;
   w(6)=0.074684149765659745887075796102848;
   w(7)=0.085045894313485239210447765079982;
   w(8)=0.094213800355914148463664883067303;
   w(9)=0.10205916109442542323841407025343;
   w(10)=0.10847184052857659065657942672800;
   w(11)=0.11336181654631966654944071844260;
   w(12)=0.11666044348529658204466250754036;
   w(13)=0.11832141527926227651637108570047;
   w(14)=0.11832141527926227651637108570047;
   w(15)=0.11666044348529658204466250754036;
   w(16)=0.11336181654631966654944071844260;
   w(17)=0.10847184052857659065657942672800;
   w(18)=0.10205916109442542323841407025343;
   w(19)=0.094213800355914148463664883067303;
   w(20)=0.085045894313485239210447765079982;
   w(21)=0.074684149765659745887075796102848;
   w(22)=0.063274046329574835539453689907045;
   w(23)=0.050975825297147811998319900724073;
   w(24)=0.037962383294362763950303141248850;
   w(25)=0.024417851092631908789615827519788;
   w(26)=0.010551372617343007155651187685252;
 elseif ( n == 27 )
   w(1)=0.0097989960512943602611500550912591;
   w(2)=0.022686231596180623196034206446761;
   w(3)=0.035297053757419711022578289304712;
   w(4)=0.047449412520615062704096710114185;
   w(5)=0.058983536859833599110300833719532;
   w(6)=0.069748823766245592984322888356667;
   w(7)=0.079604867773057771263074959009842;
   w(8)=0.088423158543756950194322802853749;
   w(9)=0.096088727370028507565652646558106;
   w(10)=0.10250163781774579867124771153266;
   w(11)=0.10757828578853318721216298442666;
   w(12)=0.11125248835684519267216309604285;
   w(13)=0.11347634610896514862036994809210;
   w(14)=0.11422086737895698904504573690184;
   w(15)=0.11347634610896514862036994809210;
   w(16)=0.11125248835684519267216309604285;
   w(17)=0.10757828578853318721216298442666;
   w(18)=0.10250163781774579867124771153266;
   w(19)=0.096088727370028507565652646558106;
   w(20)=0.088423158543756950194322802853749;
   w(21)=0.079604867773057771263074959009842;
   w(22)=0.069748823766245592984322888356667;
   w(23)=0.058983536859833599110300833719532;
   w(24)=0.047449412520615062704096710114185;
   w(25)=0.035297053757419711022578289304712;
   w(26)=0.022686231596180623196034206446761;
   w(27)=0.0097989960512943602611500550912591;
 elseif ( n == 28 )
   w(1)=0.0091242825930945177388161539229517;
   w(2)=0.021132112592771259751500380993265;
   w(3)=0.032901427782304379977630819170532;
   w(4)=0.044272934759004227839587877653207;
   w(5)=0.055107345675716745431482918226946;
   w(6)=0.065272923966999595793397566775505;
   w(7)=0.074646214234568779023931887173022;
   w(8)=0.083113417228901218390396498244332;
   w(9)=0.090571744393032840942186031336784;
   w(10)=0.096930657997929915850489006095441;
   w(11)=0.10211296757806076981421663850571;
   w(12)=0.10605576592284641791041643699681;
   w(13)=0.10871119225829413525357151930367;
   w(14)=0.11004701301647519628237626560182;
   w(15)=0.11004701301647519628237626560182;
   w(16)=0.10871119225829413525357151930367;
   w(17)=0.10605576592284641791041643699681;
   w(18)=0.10211296757806076981421663850571;
   w(19)=0.096930657997929915850489006095441;
   w(20)=0.090571744393032840942186031336784;
   w(21)=0.083113417228901218390396498244332;
   w(22)=0.074646214234568779023931887173022;
   w(23)=0.065272923966999595793397566775505;
   w(24)=0.055107345675716745431482918226946;
   w(25)=0.044272934759004227839587877653207;
   w(26)=0.032901427782304379977630819170532;
   w(27)=0.021132112592771259751500380993265;
   w(28)=0.0091242825930945177388161539229517;
 elseif ( n == 29 )
   w(1)=0.0085169038787464096542638133022498;
   w(2)=0.019732085056122705983859801640396;
   w(3)=0.030740492202093622644408525374617;
   w(4)=0.041402062518682836104830010114077;
   w(5)=0.051594826902497923912594381179543;
   w(6)=0.061203090657079138542109848023907;
   w(7)=0.070117933255051278569581486948879;
   w(8)=0.078238327135763783828144888659680;
   w(9)=0.085472257366172527545344849297208;
   w(10)=0.091737757139258763347966411077111;
   w(11)=0.096963834094408606301900074882689;
   w(12)=0.10109127375991496612182054690750;
   w(13)=0.10407331007772937391332847128512;
   w(14)=0.10587615509732094140659132785219;
   w(15)=0.10647938171831424424651112690968;
   w(16)=0.10587615509732094140659132785219;
   w(17)=0.10407331007772937391332847128512;
   w(18)=0.10109127375991496612182054690750;
   w(19)=0.096963834094408606301900074882689;
   w(20)=0.091737757139258763347966411077111;
   w(21)=0.085472257366172527545344849297208;
   w(22)=0.078238327135763783828144888659680;
   w(23)=0.070117933255051278569581486948879;
   w(24)=0.061203090657079138542109848023907;
   w(25)=0.051594826902497923912594381179543;
   w(26)=0.041402062518682836104830010114077;
   w(27)=0.030740492202093622644408525374617;
   w(28)=0.019732085056122705983859801640396;
   w(29)=0.0085169038787464096542638133022498;
 elseif ( n == 30 )
   w(1)=0.0079681924961666056154658834746736;
   w(2)=0.018466468311090959142302131912047;
   w(3)=0.028784707883323369349719179611292;
   w(4)=0.038799192569627049596801936446348;
   w(5)=0.048402672830594052902938140422808;
   w(6)=0.057493156217619066481721689402056;
   w(7)=0.065974229882180495128128515115962;
   w(8)=0.073755974737705206268243850022191;
   w(9)=0.080755895229420215354694938460530;
   w(10)=0.086899787201082979802387530715126;
   w(11)=0.092122522237786128717632707087619;
   w(12)=0.096368737174644259639468626351810;
   w(13)=0.099593420586795267062780282103569;
   w(14)=0.10176238974840550459642895216855;
   w(15)=0.10285265289355884034128563670542;
   w(16)=0.10285265289355884034128563670542;
   w(17)=0.10176238974840550459642895216855;
   w(18)=0.099593420586795267062780282103569;
   w(19)=0.096368737174644259639468626351810;
   w(20)=0.092122522237786128717632707087619;
   w(21)=0.086899787201082979802387530715126;
   w(22)=0.080755895229420215354694938460530;
   w(23)=0.073755974737705206268243850022191;
   w(24)=0.065974229882180495128128515115962;
   w(25)=0.057493156217619066481721689402056;
   w(26)=0.048402672830594052902938140422808;
   w(27)=0.038799192569627049596801936446348;
   w(28)=0.028784707883323369349719179611292;
   w(29)=0.018466468311090959142302131912047;
   w(30)=0.0079681924961666056154658834746736;
  elseif (n == 48)
    w(1) = 0.0031533460523059;
    w(2) = 0.0073275539012765;
    w(3) = 0.0114772345792347;
    w(4) = 0.0155793157229437;
    w(5) = 0.0196161604573558;
    w(6) = 0.0235707608393237;
    w(7) = 0.0274265097083563;
    w(8) = 0.0311672278327980;
    w(9) = 0.0347772225647707;
    w(10) = 0.0382413510658304;
    w(11) = 0.0415450829434656;
    w(12) = 0.0446745608566937;
    w(13) = 0.0476166584924910;
    w(14) = 0.0503590355538545;
    w(15) = 0.0528901894851937;
    w(16) = 0.0551995036999840;
    w(17) = 0.0572772921004029;
    w(18) = 0.0591148396983953;
    w(19) = 0.0607044391658945;
    w(20) = 0.0620394231598924;
    w(21) = 0.0631141922862541;
    w(22) = 0.0639242385846489;
    w(23) = 0.0644661644359506;
    w(24) = 0.0647376968126839;
    w(25) = 0.0647376968126836;
    w(26) = 0.0644661644359505;
    w(27) = 0.0639242385846487;
    w(28) = 0.0631141922862533;
    w(29) = 0.0620394231598915;
    w(30) = 0.0607044391658939;
    w(31) = 0.0591148396983964;
    w(32) = 0.0572772921004031;
    w(33) = 0.0551995036999844;
    w(34) = 0.0528901894851943;
    w(35) = 0.0503590355538540;
    w(36) = 0.0476166584924911;
    w(37) = 0.0446745608566940;
    w(38) = 0.0415450829434649;
    w(39) = 0.0382413510658305;
    w(40) = 0.0347772225647698;
    w(41) = 0.0311672278327982;
    w(42) = 0.0274265097083569;
    w(43) = 0.0235707608393248;
    w(44) = 0.0196161604573554;
    w(45) = 0.0155793157229439;
    w(46) = 0.0114772345792341;
    w(47) = 0.0073275539012765;
    w(48) = 0.0031533460523052;
  else
    error('GAUSS_WEIGHTS - Fatal error! Illegal value of n.');
  end

return
end
function xi = lobatto_points(n)

xi = ones(1,n);

switch n
   case(2)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=1.0000000000000000000000000000000;
   case(3)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=0.0;
      xi(3)=1.0000000000000000000000000000000;
   case(4)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.44721359549995793928183473374626;
      xi(3)=0.44721359549995793928183473374626;
      xi(4)=1.0000000000000000000000000000000;
   case(5)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.65465367070797714379829245624686;
      xi(3)=0.0;
      xi(4)=0.65465367070797714379829245624686;
      xi(5)=1.0000000000000000000000000000000;
   case(6)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.76505532392946469285100297395934;
      xi(3)=-0.28523151648064509631415099404088;
      xi(4)=0.28523151648064509631415099404088;
      xi(5)=0.76505532392946469285100297395934;
      xi(6)=1.0000000000000000000000000000000;
   case(7)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.83022389627856692987203221396747;
      xi(3)=-0.46884879347071421380377188190877;
      xi(4)=0.0;
      xi(5)=0.46884879347071421380377188190877;
      xi(6)=0.83022389627856692987203221396747;
      xi(7)=1.0000000000000000000000000000000;
   case(8)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.87174014850960661533744576122066;
      xi(3)=-0.59170018143314230214451073139795;
      xi(4)=-0.20929921790247886876865726034535;
      xi(5)=0.20929921790247886876865726034535;
      xi(6)=0.59170018143314230214451073139795;
      xi(7)=0.87174014850960661533744576122066;
      xi(8)=1.0000000000000000000000000000000;
   case(9)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.89975799541146015731234524441834;
      xi(3)=-0.67718627951073775344588542709134;
      xi(4)=-0.36311746382617815871075206870866;
      xi(5)=0.0;
      xi(6)=0.36311746382617815871075206870866;
      xi(7)=0.67718627951073775344588542709134;
      xi(8)=0.89975799541146015731234524441834;
      xi(9)=1.0000000000000000000000000000000;
   case(10)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.91953390816645881382893266082234;
      xi(3)=-0.73877386510550507500310617485983;
      xi(4)=-0.47792494981044449566117509273126;
      xi(5)=-0.16527895766638702462621976595817;
      xi(6)=0.16527895766638702462621976595817;
      xi(7)=0.47792494981044449566117509273126;
      xi(8)=0.73877386510550507500310617485983;
      xi(9)=0.91953390816645881382893266082234;
      xi(10)=1.0000000000000000000000000000000;
   case(11)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.93400143040805913433227413609938;
      xi(3)=-0.78448347366314441862241781610846;
      xi(4)=-0.56523532699620500647096396947775;
      xi(5)=-0.29575813558693939143191151555906;
      xi(6)=0.0;
      xi(7)=0.29575813558693939143191151555906;
      xi(8)=0.56523532699620500647096396947775;
      xi(9)=0.78448347366314441862241781610846;
      xi(10)=0.93400143040805913433227413609938;
      xi(11)=1.0000000000000000000000000000000;
   case(12)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.94489927222288222340758013830322;
      xi(3)=-0.81927932164400667834864158171690;
      xi(4)=-0.63287615303186067766240485444366;
      xi(5)=-0.39953094096534893226434979156697;
      xi(6)=-0.13655293285492755486406185573969;
      xi(7)=0.13655293285492755486406185573969;
      xi(8)=0.39953094096534893226434979156697;
      xi(9)=0.63287615303186067766240485444366;
      xi(10)=0.81927932164400667834864158171690;
      xi(11)=0.94489927222288222340758013830322;
      xi(12)=1.0000000000000000000000000000000;
   case(13)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.95330984664216391189690546475545;
      xi(3)=-0.84634756465187231686592560709875;
      xi(4)=-0.68618846908175742607275903956636;
      xi(5)=-0.48290982109133620174693723363693;
      xi(6)=-0.24928693010623999256867370037423;
      xi(7)=0.0;
      xi(8)=0.24928693010623999256867370037423;
      xi(9)=0.48290982109133620174693723363693;
      xi(10)=0.68618846908175742607275903956636;
      xi(11)=0.84634756465187231686592560709875;
      xi(12)=0.95330984664216391189690546475545;
      xi(13)=1.0000000000000000000000000000000;
   case(14)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.95993504526726090135510016201542;
      xi(3)=-0.86780105383034725100022020290826;
      xi(4)=-0.72886859909132614058467240052088;
      xi(5)=-0.55063940292864705531662270585908;
      xi(6)=-0.34272401334271284504390340364167;
      xi(7)=-0.11633186888370386765877670973616;
      xi(8)=0.11633186888370386765877670973616;
      xi(9)=0.34272401334271284504390340364167;
      xi(10)=0.55063940292864705531662270585908;
      xi(11)=0.72886859909132614058467240052088;
      xi(12)=0.86780105383034725100022020290826;
      xi(13)=0.95993504526726090135510016201542;
      xi(14)=1.0000000000000000000000000000000;
   case(15)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.96524592650383857279585139206960;
      xi(3)=-0.88508204422297629882540163148223;
      xi(4)=-0.76351968995181520070411847597629;
      xi(5)=-0.60625320546984571112352993863673;
      xi(6)=-0.42063805471367248092189693873858;
      xi(7)=-0.21535395536379423822567944627292;
      xi(8)=0.0;
      xi(9)=0.21535395536379423822567944627292;
      xi(10)=0.42063805471367248092189693873858;
      xi(11)=0.60625320546984571112352993863673;
      xi(12)=0.76351968995181520070411847597629;
      xi(13)=0.88508204422297629882540163148223;
      xi(14)=0.96524592650383857279585139206960;
      xi(15)=1.0000000000000000000000000000000;
   case(16)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.96956804627021793295224273836746;
      xi(3)=-0.89920053309347209299462826151985;
      xi(4)=-0.79200829186181506393108827096315;
      xi(5)=-0.65238870288249308946788321964058;
      xi(6)=-0.48605942188713761178189078584687;
      xi(7)=-0.29983046890076320809835345472230;
      xi(8)=-0.10132627352194944784303300504592;
      xi(9)=0.10132627352194944784303300504592;
      xi(10)=0.29983046890076320809835345472230;
      xi(11)=0.48605942188713761178189078584687;
      xi(12)=0.65238870288249308946788321964058;
      xi(13)=0.79200829186181506393108827096315;
      xi(14)=0.89920053309347209299462826151985;
      xi(15)=0.96956804627021793295224273836746;
      xi(16)=1.0000000000000000000000000000000;
   case(17)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.97313217663141831415697950187372;
      xi(3)=-0.91087999591557359562380250639773;
      xi(4)=-0.81569625122177030710675055323753;
      xi(5)=-0.69102898062768470539491935737245;
      xi(6)=-0.54138539933010153912373340750406;
      xi(7)=-0.37217443356547704190723468073526;
      xi(8)=-0.18951197351831738830426301475311;
      xi(9)=0.0;
      xi(10)=0.18951197351831738830426301475311;
      xi(11)=0.37217443356547704190723468073526;
      xi(12)=0.54138539933010153912373340750406;
      xi(13)=0.69102898062768470539491935737245;
      xi(14)=0.81569625122177030710675055323753;
      xi(15)=0.91087999591557359562380250639773;
      xi(16)=0.97313217663141831415697950187372;
      xi(17)=1.0000000000000000000000000000000;
   case(18)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.97610555741219854286451892434170;
      xi(3)=-0.92064918534753387383785462543128;
      xi(4)=-0.83559353521809021371364636232794;
      xi(5)=-0.72367932928324268130621036530207;
      xi(6)=-0.58850483431866176117353589319356;
      xi(7)=-0.43441503691212397534228713674067;
      xi(8)=-0.26636265287828098416766533202560;
      xi(9)=-0.089749093484652111022645010088562;
      xi(10)=0.089749093484652111022645010088562;
      xi(11)=0.26636265287828098416766533202560;
      xi(12)=0.43441503691212397534228713674067;
      xi(13)=0.58850483431866176117353589319356;
      xi(14)=0.72367932928324268130621036530207;
      xi(15)=0.83559353521809021371364636232794;
      xi(16)=0.92064918534753387383785462543128;
      xi(17)=0.97610555741219854286451892434170;
      xi(18)=1.0000000000000000000000000000000;
   case(19)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.97861176622208009515263406311022;
      xi(3)=-0.92890152815258624371794025879655;
      xi(4)=-0.85246057779664609308595597004106;
      xi(5)=-0.75149420255261301416363748963394;
      xi(6)=-0.62890813726522049776683230622873;
      xi(7)=-0.48822928568071350277790963762492;
      xi(8)=-0.33350484782449861029850010384493;
      xi(9)=-0.16918602340928157137515415344488;
      xi(10)=0.0;
      xi(11)=0.16918602340928157137515415344488;
      xi(12)=0.33350484782449861029850010384493;
      xi(13)=0.48822928568071350277790963762492;
      xi(14)=0.62890813726522049776683230622873;
      xi(15)=0.75149420255261301416363748963394;
      xi(16)=0.85246057779664609308595597004106;
      xi(17)=0.92890152815258624371794025879655;
      xi(18)=0.97861176622208009515263406311022;
      xi(19)=1.0000000000000000000000000000000;
   case(20)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.98074370489391417192544643858423;
      xi(3)=-0.93593449881266543571618158493063;
      xi(4)=-0.86687797808995014130984721461629;
      xi(5)=-0.77536826095205587041431752759469;
      xi(6)=-0.66377640229031128984640332297116;
      xi(7)=-0.53499286403188626164813596182898;
      xi(8)=-0.39235318371390929938647470381582;
      xi(9)=-0.23955170592298649518240135692709;
      xi(10)=-0.080545937238821837975944518159554;
      xi(11)=0.080545937238821837975944518159554;
      xi(12)=0.23955170592298649518240135692709;
      xi(13)=0.39235318371390929938647470381582;
      xi(14)=0.53499286403188626164813596182898;
      xi(15)=0.66377640229031128984640332297116;
      xi(16)=0.77536826095205587041431752759469;
      xi(17)=0.86687797808995014130984721461629;
      xi(18)=0.93593449881266543571618158493063;
      xi(19)=0.98074370489391417192544643858423;
      xi(20)=1.0000000000000000000000000000000;
   case(21)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.98257229660454802823448127655541;
      xi(3)=-0.94197629695974553429610265066144;
      xi(4)=-0.87929475532359046445115359630494;
      xi(5)=-0.79600192607771240474431258966036;
      xi(6)=-0.69405102606222323262731639319467;
      xi(7)=-0.57583196026183068692702187033809;
      xi(8)=-0.44411578327900210119451634960735;
      xi(9)=-0.30198985650876488727535186785875;
      xi(10)=-0.15278551580218546600635832848567;
      xi(11)=0.0;
      xi(12)=0.15278551580218546600635832848567;
      xi(13)=0.30198985650876488727535186785875;
      xi(14)=0.44411578327900210119451634960735;
      xi(15)=0.57583196026183068692702187033809;
      xi(16)=0.69405102606222323262731639319467;
      xi(17)=0.79600192607771240474431258966036;
      xi(18)=0.87929475532359046445115359630494;
      xi(19)=0.94197629695974553429610265066144;
      xi(20)=0.98257229660454802823448127655541;
      xi(21)=1.0000000000000000000000000000000;
   case(22)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.98415243845764617655228962221207;
      xi(3)=-0.94720428399922868052421376661573;
      xi(4)=-0.89006229019090447052965782577909;
      xi(5)=-0.81394892761192113604544184805614;
      xi(6)=-0.72048723996120215811988189639847;
      xi(7)=-0.61166943828425897122621160586993;
      xi(8)=-0.48981487518990234980875123568327;
      xi(9)=-0.35752071013891953806095728024018;
      xi(10)=-0.21760658515928504178795509346539;
      xi(11)=-0.073054540010898334761088790464107;
      xi(12)=0.073054540010898334761088790464107;
      xi(13)=0.21760658515928504178795509346539;
      xi(14)=0.35752071013891953806095728024018;
      xi(15)=0.48981487518990234980875123568327;
      xi(16)=0.61166943828425897122621160586993;
      xi(17)=0.72048723996120215811988189639847;
      xi(18)=0.81394892761192113604544184805614;
      xi(19)=0.89006229019090447052965782577909;
      xi(20)=0.94720428399922868052421376661573;
      xi(21)=0.98415243845764617655228962221207;
      xi(22)=1.0000000000000000000000000000000;
   case(23)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.98552715587873257808146276673810;
      xi(3)=-0.95175795571071020413563967985143;
      xi(4)=-0.89945855804034501095016032034737;
      xi(5)=-0.82965109665128588622320061929000;
      xi(6)=-0.74369504117206068394516354306700;
      xi(7)=-0.64326364446013620847614553360277;
      xi(8)=-0.53031177113684416813011532015230;
      xi(9)=-0.40703793791447482919595048821510;
      xi(10)=-0.27584154894579306710687763267914;
      xi(11)=-0.13927620404066839859186261298277;
      xi(12)=0.0;
      xi(13)=0.13927620404066839859186261298277;
      xi(14)=0.27584154894579306710687763267914;
      xi(15)=0.40703793791447482919595048821510;
      xi(16)=0.53031177113684416813011532015230;
      xi(17)=0.64326364446013620847614553360277;
      xi(18)=0.74369504117206068394516354306700;
      xi(19)=0.82965109665128588622320061929000;
      xi(20)=0.89945855804034501095016032034737;
      xi(21)=0.95175795571071020413563967985143;
      xi(22)=0.98552715587873257808146276673810;
      xi(23)=1.0000000000000000000000000000000;
   case(24)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.98673055350516088355308673815447;
      xi(3)=-0.95574822092988635802697713055064;
      xi(4)=-0.90770567511350652199515299646621;
      xi(5)=-0.84346407015487204062330503742334;
      xi(6)=-0.76417048242049330778737528095229;
      xi(7)=-0.67124010526412869983566485818701;
      xi(8)=-0.56633135797929531218940954454228;
      xi(9)=-0.45131637321432261824821849156962;
      xi(10)=-0.32824761337551091203338917935961;
      xi(11)=-0.19932125339083266723657253912499;
      xi(12)=-0.066837993737228578113641808391677;
      xi(13)=0.066837993737228578113641808391677;
      xi(14)=0.19932125339083266723657253912499;
      xi(15)=0.32824761337551091203338917935961;
      xi(16)=0.45131637321432261824821849156962;
      xi(17)=0.56633135797929531218940954454228;
      xi(18)=0.67124010526412869983566485818701;
      xi(19)=0.76417048242049330778737528095229;
      xi(20)=0.84346407015487204062330503742334;
      xi(21)=0.90770567511350652199515299646621;
      xi(22)=0.95574822092988635802697713055064;
      xi(23)=0.98673055350516088355308673815447;
      xi(24)=1.0000000000000000000000000000000;
   case(25)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.98778994493149370927180407087316;
      xi(3)=-0.95926413825253447885984517883952;
      xi(4)=-0.91498277073462257832314993373685;
      xi(5)=-0.85567646583531657752381326017175;
      xi(6)=-0.78231965924071678039918795222875;
      xi(7)=-0.69611704881513436676036543378938;
      xi(8)=-0.59848414727999326809762099718107;
      xi(9)=-0.49102411481887838261895992256880;
      xi(10)=-0.37550145785922723322871461226072;
      xi(11)=-0.25381306416887658017988688168728;
      xi(12)=-0.12795705948310697270898462509465;
      xi(13)=0.0;
      xi(14)=0.12795705948310697270898462509465;
      xi(15)=0.25381306416887658017988688168728;
      xi(16)=0.37550145785922723322871461226072;
      xi(17)=0.49102411481887838261895992256880;
      xi(18)=0.59848414727999326809762099718107;
      xi(19)=0.69611704881513436676036543378938;
      xi(20)=0.78231965924071678039918795222875;
      xi(21)=0.85567646583531657752381326017175;
      xi(22)=0.91498277073462257832314993373685;
      xi(23)=0.95926413825253447885984517883952;
      xi(24)=0.98778994493149370927180407087316;
      xi(25)=1.0000000000000000000000000000000;
   case(26)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.98872741231147565442924669037130;
      xi(3)=-0.96237787476771732975066267128213;
      xi(4)=-0.92143554681755734112513052174869;
      xi(5)=-0.86652432395912357097445149780977;
      xi(6)=-0.79847718310743743903678763857034;
      xi(7)=-0.71832581636266508052540538790393;
      xi(8)=-0.62728529949231688780051890716122;
      xi(9)=-0.52673574202987854529824339438099;
      xi(10)=-0.41820138706624678556368388233385;
      xi(11)=-0.30332751285925272077404103790211;
      xi(12)=-0.18385549527005490132120567188576;
      xi(13)=-0.061596411781919728205487274781751;
      xi(14)=0.061596411781919728205487274781751;
      xi(15)=0.18385549527005490132120567188576;
      xi(16)=0.30332751285925272077404103790211;
      xi(17)=0.41820138706624678556368388233385;
      xi(18)=0.52673574202987854529824339438099;
      xi(19)=0.62728529949231688780051890716122;
      xi(20)=0.71832581636266508052540538790393;
      xi(21)=0.79847718310743743903678763857034;
      xi(22)=0.86652432395912357097445149780977;
      xi(23)=0.92143554681755734112513052174869;
      xi(24)=0.96237787476771732975066267128213;
      xi(25)=0.98872741231147565442924669037130;
      xi(26)=1.0000000000000000000000000000000;
   case(27)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.98956096372855062114887464005452;
      xi(3)=-0.96514840245081891926426680312113;
      xi(4)=-0.92718345872511577885974676407272;
      xi(5)=-0.87620208621452247866654304919414;
      xi(6)=-0.81292048689581228825809186475854;
      xi(7)=-0.73822714984645991083942722574841;
      xi(8)=-0.65317066369680951517870487518246;
      xi(9)=-0.55894506094256118006266807486812;
      xi(10)=-0.45687307561408240367861265083924;
      xi(11)=-0.34838758198902867043708657858717;
      xi(12)=-0.23501148310291813333680158051333;
      xi(13)=-0.11833633389852104843870826827532;
      xi(14)=0.0;
      xi(15)=0.11833633389852104843870826827532;
      xi(16)=0.23501148310291813333680158051333;
      xi(17)=0.34838758198902867043708657858717;
      xi(18)=0.45687307561408240367861265083924;
      xi(19)=0.55894506094256118006266807486812;
      xi(20)=0.65317066369680951517870487518246;
      xi(21)=0.73822714984645991083942722574841;
      xi(22)=0.81292048689581228825809186475854;
      xi(23)=0.87620208621452247866654304919414;
      xi(24)=0.92718345872511577885974676407272;
      xi(25)=0.96514840245081891926426680312113;
      xi(26)=0.98956096372855062114887464005452;
      xi(27)=1.0000000000000000000000000000000;
   case(28)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.99030540261845412551709291186460;
      xi(3)=-0.96762428585713130434377087914347;
      xi(4)=-0.93232516712155852492614241860899;
      xi(5)=-0.88487101721130283841230633825725;
      xi(6)=-0.82588097005633819604451442619660;
      xi(7)=-0.75612419400556976515209572526619;
      xi(8)=-0.67651012892957331771938124507339;
      xi(9)=-0.58807668983717560647831207976171;
      xi(10)=-0.49197675393157938042961668294448;
      xi(11)=-0.38946313757636280793588415520411;
      xi(12)=-0.28187226662160237195415250890933;
      xi(13)=-0.17060675530800436088270267774877;
      xi(14)=-0.057117121693512897626543651573747;
      xi(15)=0.057117121693512897626543651573747;
      xi(16)=0.17060675530800436088270267774877;
      xi(17)=0.28187226662160237195415250890933;
      xi(18)=0.38946313757636280793588415520411;
      xi(19)=0.49197675393157938042961668294448;
      xi(20)=0.58807668983717560647831207976171;
      xi(21)=0.67651012892957331771938124507339;
      xi(22)=0.75612419400556976515209572526619;
      xi(23)=0.82588097005633819604451442619660;
      xi(24)=0.88487101721130283841230633825725;
      xi(25)=0.93232516712155852492614241860899;
      xi(26)=0.96762428585713130434377087914347;
      xi(27)=0.99030540261845412551709291186460;
      xi(28)=1.0000000000000000000000000000000;
   case(29)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.99097298826856981627874511329957;
      xi(3)=-0.96984580728793629371240138788782;
      xi(4)=-0.93694271852098251154203684828336;
      xi(5)=-0.89266571997608827876422991405309;
      xi(6)=-0.83755273628178656524207331618682;
      xi(7)=-0.77227289720646874135417063413645;
      xi(8)=-0.69761866135636798839397442857709;
      xi(9)=-0.61449625220343294997090361742436;
      xi(10)=-0.52391467437196908357881657312361;
      xi(11)=-0.42697347171349438763757641096836;
      xi(12)=-0.32484938284191100626001402307884;
      xi(13)=-0.21878205828426101980905185232499;
      xi(14)=-0.11005901339559210970778760225568;
      xi(15)=0.0;
      xi(16)=0.11005901339559210970778760225568;
      xi(17)=0.21878205828426101980905185232499;
      xi(18)=0.32484938284191100626001402307884;
      xi(19)=0.42697347171349438763757641096836;
      xi(20)=0.52391467437196908357881657312361;
      xi(21)=0.61449625220343294997090361742436;
      xi(22)=0.69761866135636798839397442857709;
      xi(23)=0.77227289720646874135417063413645;
      xi(24)=0.83755273628178656524207331618682;
      xi(25)=0.89266571997608827876422991405309;
      xi(26)=0.93694271852098251154203684828336;
      xi(27)=0.96984580728793629371240138788782;
      xi(28)=0.99097298826856981627874511329957;
      xi(29)=1.0000000000000000000000000000000;
   case(30)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.99157394284050029333881822590865;
      xi(3)=-0.97184660316626924167659295220919;
      xi(4)=-0.94110478095105708230718954941552;
      xi(5)=-0.89969921819927685955334282314945;
      xi(6)=-0.84809948718019810955142383218307;
      xi(7)=-0.78689035723754708044995952059240;
      xi(8)=-0.71676539863708513163379859612990;
      xi(9)=-0.63851917580755840737109348270974;
      xi(10)=-0.55303826009505285238455023004066;
      xi(11)=-0.46129119016824068522655722110715;
      xi(12)=-0.36431750042244899775598510555179;
      xi(13)=-0.26321594371957379126709946900007;
      xi(14)=-0.15913204262585046782494857709885;
      xi(15)=-0.053245110485486669363007834451354;
      xi(16)=0.053245110485486669363007834451354;
      xi(17)=0.15913204262585046782494857709885;
      xi(18)=0.26321594371957379126709946900007;
      xi(19)=0.36431750042244899775598510555179;
      xi(20)=0.46129119016824068522655722110715;
      xi(21)=0.55303826009505285238455023004066;
      xi(22)=0.63851917580755840737109348270974;
      xi(23)=0.71676539863708513163379859612990;
      xi(24)=0.78689035723754708044995952059240;
      xi(25)=0.84809948718019810955142383218307;
      xi(26)=0.89969921819927685955334282314945;
      xi(27)=0.94110478095105708230718954941552;
      xi(28)=0.97184660316626924167659295220919;
      xi(29)=0.99157394284050029333881822590865;
      xi(30)=1.0000000000000000000000000000000;
   case(31)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.99211684434648108858932461564871;
      xi(3)=-0.97365493581573647482606954847523;
      xi(4)=-0.94486917020803922980640553764986;
      xi(5)=-0.90606695144126981314451152324746;
      xi(6)=-0.85765999529745561036700538239647;
      xi(7)=-0.80016154319246298927233133398318;
      xi(8)=-0.73418113630907524213414083483764;
      xi(9)=-0.66041820261152552333704127459677;
      xi(10)=-0.57965465720800191300329686219773;
      xi(11)=-0.49274661909883240570380023307021;
      xi(12)=-0.40061533828056180630266441939609;
      xi(13)=-0.30423743127287262095945514762626;
      xi(14)=-0.20463452924752450114109358572771;
      xi(15)=-0.10286244876068227708911472330805;
      xi(16)=0.0;
      xi(17)=0.10286244876068227708911472330805;
      xi(18)=0.20463452924752450114109358572771;
      xi(19)=0.30423743127287262095945514762626;
      xi(20)=0.40061533828056180630266441939609;
      xi(21)=0.49274661909883240570380023307021;
      xi(22)=0.57965465720800191300329686219773;
      xi(23)=0.66041820261152552333704127459677;
      xi(24)=0.73418113630907524213414083483764;
      xi(25)=0.80016154319246298927233133398318;
      xi(26)=0.85765999529745561036700538239647;
      xi(27)=0.90606695144126981314451152324746;
      xi(28)=0.94486917020803922980640553764986;
      xi(29)=0.97365493581573647482606954847523;
      xi(30)=0.99211684434648108858932461564871;
      xi(31)=1.0000000000000000000000000000000;
   case(32)
      xi(1)=-1.0000000000000000000000000000000;
      xi(2)=-0.99260893397276135937154131527745;
      xi(3)=-0.97529469048270922806245595038815;
      xi(4)=-0.94828483841723237808332824158843;
      xi(5)=-0.91184993906373190407453145237407;
      xi(6)=-0.86635247601267551983081476942454;
      xi(7)=-0.81224473177744234454682178807258;
      xi(8)=-0.75006449393667479771727596467830;
      xi(9)=-0.68042975561555081594239575769885;
      xi(10)=-0.60403258714842112613717291261189;
      xi(11)=-0.52163226288156529060659257339202;
      xi(12)=-0.43404771720184693960331935700639;
      xi(13)=-0.34214940653888148625381222069872;
      xi(14)=-0.24685065885020530441624143115887;
      xi(15)=-0.14909859681364749491438187617004;
      xi(16)=-0.049864725046593252306297744728426;
      xi(17)=0.049864725046593252306297744728426;
      xi(18)=0.14909859681364749491438187617004;
      xi(19)=0.24685065885020530441624143115887;
      xi(20)=0.34214940653888148625381222069872;
      xi(21)=0.43404771720184693960331935700639;
      xi(22)=0.52163226288156529060659257339202;
      xi(23)=0.60403258714842112613717291261189;
      xi(24)=0.68042975561555081594239575769885;
      xi(25)=0.75006449393667479771727596467830;
      xi(26)=0.81224473177744234454682178807258;
      xi(27)=0.86635247601267551983081476942454;
      xi(28)=0.91184993906373190407453145237407; 
      xi(29)=0.94828483841723237808332824158843; 
      xi(30)=0.97529469048270922806245595038815; 
      xi(31)=0.99260893397276135937154131527745; 
      xi(32)=1.0000000000000000000000000000000; case(33) 
      xi(1)=-1.0000000000000000000000000000000; 
      xi(2)=-0.99305635843365834366733608675624; 
      xi(3)=-0.97678616331690630148562760838132; 
      xi(4)=-0.95139345139699574337552441691356; 
      xi(5)=-0.91711730345094124082567906975682; 
      xi(6)=-0.87427810075056222064656062933034; 
      xi(7)=-0.82327592300406746955907131326671; 
      xi(8)=-0.76458700179352862800665848042309; 
      xi(9)=-0.69875931661816259569967724754442;
      xi(10)=-0.62640749128126825726383134241071;
      xi(11)=-0.54820705991911162311040471176063;
      xi(12)=-0.46488816163210675597300372098526;
      xi(13)=-0.37722872425339363504193466071800;
      xi(14)=-0.2860472014876740416053445029630;
      xi(15)=-0.19219493146747722574130699544116;
      xi(16)=-0.096548188176107006316957788091625;
      xi(17)=0.0;
      xi(18)=0.096548188176107006316957788091625;
      xi(19)=0.19219493146747722574130699544116;
      xi(20)=0.28604720148767404160534450296304;
      xi(21)=0.37722872425339363504193466071800;
      xi(22)=0.46488816163210675597300372098526;
      xi(23)=0.54820705991911162311040471176063;
      xi(24)=0.62640749128126825726383134241071;
      xi(25)=0.69875931661816259569967724754442;
      xi(26)=0.76458700179352862800665848042309;
      xi(27)=0.82327592300406746955907131326671;
      xi(28)=0.87427810075056222064656062933034;
      xi(29)=0.91711730345094124082567906975682;
      xi(30)=0.95139345139699574337552441691356;
      xi(31)=0.97678616331690630148562760838132;
      xi(32)=0.99305635843365834366733608675624;
      xi(33)=1.0000000000000000000000000000000;
   otherwise
      error('LOBATTO_POINTS - Fatal error! Illegal value of n.');
end

return
end
function w = lobatto_weights(n)

w = ones(1,n);
switch n
   case(2)
      w(1)=1.0000000000000000000000000000000;
      w(2)=1.0000000000000000000000000000000;
   case(3)
      w(1)=0.33333333333333333333333333333333;
      w(2)=1.3333333333333333333333333333333;
      w(3)=0.33333333333333333333333333333333;
   case(4)
      w(1)=0.16666666666666666666666666666667;
      w(2)=0.83333333333333333333333333333333;
      w(3)=0.83333333333333333333333333333333;
      w(4)=0.16666666666666666666666666666667;
   case(5)
      w(1)=0.10000000000000000000000000000000;
      w(2)=0.54444444444444444444444444444444;
      w(3)=0.71111111111111111111111111111111;
      w(4)=0.54444444444444444444444444444444;
      w(5)=0.10000000000000000000000000000000;
   case(6)
      w(1)=0.066666666666666666666666666666667;
      w(2)=0.37847495629784698031661280821202;
      w(3)=0.55485837703548635301672052512131;
      w(4)=0.55485837703548635301672052512131;
      w(5)=0.37847495629784698031661280821202;
      w(6)=0.066666666666666666666666666666667;
   case(7)
      w(1)=0.047619047619047619047619047619048;
      w(2)=0.27682604736156594801070040629007;
      w(3)=0.43174538120986262341787102228136;
      w(4)=0.48761904761904761904761904761905;
      w(5)=0.43174538120986262341787102228136;
      w(6)=0.27682604736156594801070040629007;
      w(7)=0.047619047619047619047619047619048;
   case(8)
      w(1)=0.035714285714285714285714285714286;
      w(2)=0.21070422714350603938299206577576;
      w(3)=0.34112269248350436476424067710775;
      w(4)=0.41245879465870388156705297140221;
      w(5)=0.41245879465870388156705297140221;
      w(6)=0.34112269248350436476424067710775;
      w(7)=0.21070422714350603938299206577576;
      w(8)=0.035714285714285714285714285714286;
   case(9)
      w(1)=0.027777777777777777777777777777778;
      w(2)=0.16549536156080552504633972002921;
      w(3)=0.27453871250016173528070561857937;
      w(4)=0.34642851097304634511513153213972;
      w(5)=0.37151927437641723356009070294785;
      w(6)=0.34642851097304634511513153213972;
      w(7)=0.27453871250016173528070561857937;
      w(8)=0.16549536156080552504633972002921;
      w(9)=0.027777777777777777777777777777778;
   case(10)
      w(1)=0.022222222222222222222222222222222;
      w(2)=0.13330599085107011112622717075539;
      w(3)=0.22488934206312645211945782173105;
      w(4)=0.29204268367968375787558225737444;
      w(5)=0.32753976118389745665651052791689;
      w(6)=0.32753976118389745665651052791689;
      w(7)=0.29204268367968375787558225737444;
      w(8)=0.22488934206312645211945782173105;
      w(9)=0.13330599085107011112622717075539
      w(10)=0.022222222222222222222222222222222;
   case(11)
      w(1)=0.018181818181818181818181818181818;
      w(2)=0.10961227326699486446140344958035;
      w(3)=0.18716988178030520410814152189943;
      w(4)=0.24804810426402831404008486642187;
      w(5)=0.28687912477900808867922240333154;
      w(6)=0.30021759545569069378593188116998;
      w(7)=0.28687912477900808867922240333154;
      w(8)=0.24804810426402831404008486642187;
      w(9)=0.18716988178030520410814152189943;
      w(10)=0.10961227326699486446140344958035;
      w(11)=0.018181818181818181818181818181818;
   case(12)
      w(1)=0.015151515151515151515151515151515;
      w(2)=0.091684517413196130668342594134079;
      w(3)=0.15797470556437011516467106270034;
      w(4)=0.21250841776102114535830207736687;
      w(5)=0.25127560319920128029324441214760;
      w(6)=0.27140524091069617700028833849960;
      w(7)=0.27140524091069617700028833849960;
      w(8)=0.25127560319920128029324441214760;
      w(9)=0.21250841776102114535830207736687;
      w(10)=0.15797470556437011516467106270034;
      w(11)=0.091684517413196130668342594134079;
      w(12)=0.015151515151515151515151515151515;
   case(13)
      w(1)=0.012820512820512820512820512820513;
      w(2)=0.077801686746818927793588988333134;
      w(3)=0.13498192668960834911991476258937;
      w(4)=0.18364686520355009200749425874681;
      w(5)=0.22076779356611008608553400837940;
      w(6)=0.24401579030667635645857814836016;
      w(7)=0.25193084933344673604413864154124;
      w(8)=0.24401579030667635645857814836016;
      w(9)=0.22076779356611008608553400837940;
      w(10)=0.18364686520355009200749425874681;
      w(11)=0.13498192668960834911991476258937;
      w(12)=0.077801686746818927793588988333134;
      w(13)=0.012820512820512820512820512820513;
   case(14)
      w(1)=0.010989010989010989010989010989011;
      w(2)=0.066837284497681284634070660746053;
      w(3)=0.11658665589871165154099667065465;
      w(4)=0.16002185176295214241282099798759;
      w(5)=0.19482614937341611864033177837588;
      w(6)=0.21912625300977075487116252395417;
      w(7)=0.23161279446845705888962835729264;
      w(8)=0.23161279446845705888962835729264;
      w(9)=0.21912625300977075487116252395417;
      w(10)=0.19482614937341611864033177837588;
      w(11)=0.16002185176295214241282099798759;
      w(12)=0.11658665589871165154099667065465;
      w(13)=0.066837284497681284634070660746053;
      w(14)=0.010989010989010989010989010989011;
   case(15)
      w(1)=0.0095238095238095238095238095238095;
      w(2)=0.058029893028601249096880584025282;
      w(3)=0.10166007032571806760366617078880;
      w(4)=0.14051169980242810946044680564367;
      w(5)=0.17278964725360094905207709940835;
      w(6)=0.19698723596461335609250034650741;
      w(7)=0.21197358592682092012743007697722;
      w(8)=0.21704811634881564951495021425091;
      w(9)=0.21197358592682092012743007697722;
      w(10)=0.19698723596461335609250034650741;
      w(11)=0.17278964725360094905207709940835;
      w(12)=0.14051169980242810946044680564367;
      w(13)=0.10166007032571806760366617078880;
      w(14)=0.058029893028601249096880584025282;
      w(15)=0.0095238095238095238095238095238095;
   case(16)
      w(1)=0.0083333333333333333333333333333333;
      w(2)=0.050850361005919905403244919565455;
      w(3)=0.089393697325930800991052080166084;
      w(4)=0.12425538213251409834953633265731;
      w(5)=0.15402698080716428081564494048499;
      w(6)=0.17749191339170412530107566952836;
      w(7)=0.19369002382520358431691359885352;
      w(8)=0.20195830817822987148919912541094;
      w(9)=0.20195830817822987148919912541094;
      w(10)=0.19369002382520358431691359885352;
      w(11)=0.17749191339170412530107566952836;
      w(12)=0.15402698080716428081564494048499;
      w(13)=0.12425538213251409834953633265731;
      w(14)=0.089393697325930800991052080166084;
      w(15)=0.050850361005919905403244919565455;
      w(16)=0.0083333333333333333333333333333333;
   case(17)
      w(1)=0.0073529411764705882352941176470588;
      w(2)=0.044921940543254209647400954623212;
      w(3)=0.079198270503687119190264429952835;
      w(4)=0.11059290900702816137577270522008;
      w(5)=0.13798774620192655905620157495403;
      w(6)=0.16039466199762153951632836586475;
      w(7)=0.17700425351565787043694574536329;
      w(8)=0.18721633967761923589208848286062;
      w(9)=0.19066187475346943329940724702825;
      w(10)=0.18721633967761923589208848286062;
      w(11)=0.17700425351565787043694574536329;
      w(12)=0.16039466199762153951632836586475;
      w(13)=0.13798774620192655905620157495403;
      w(14)=0.11059290900702816137577270522008;
      w(15)=0.079198270503687119190264429952835;
      w(16)=0.044921940543254209647400954623212;
      w(17)=0.0073529411764705882352941176470588;
   case(18)
      w(1)=0.0065359477124183006535947712418301;
      w(2)=0.039970628810914066137599176410101;
      w(3)=0.070637166885633664999222960167786;
      w(4)=0.099016271717502802394423605318672;
      w(5)=0.12421053313296710026339635889675;
      w(6)=0.14541196157380226798300321049443;
      w(7)=0.16193951723760248926432670670023;
      w(8)=0.17326210948945622601061440382668;
      w(9)=0.17901586343970308229381880694353;
      w(10)=0.17901586343970308229381880694353;
      w(11)=0.17326210948945622601061440382668;
      w(12)=0.16193951723760248926432670670023;
      w(13)=0.14541196157380226798300321049443;
      w(14)=0.12421053313296710026339635889675;
      w(15)=0.099016271717502802394423605318672;
      w(16)=0.070637166885633664999222960167786;
      w(17)=0.039970628810914066137599176410101;
      w(18)=0.0065359477124183006535947712418301;
   case(19)
      w(1)=0.0058479532163742690058479532163743
      w(2)=0.035793365186176477115425569035122
      w(3)=0.063381891762629736851695690418317
      w(4)=0.089131757099207084448008790556153
      w(5)=0.11231534147730504407091001546378
      w(6)=0.13226728044875077692604673390973
      w(7)=0.14841394259593888500968064366841
      w(8)=0.16029092404406124197991096818359
      w(9)=0.16755658452714286727013727774026
      w(10)=0.17000191928482723464467271561652
      w(11)=0.16755658452714286727013727774026
      w(12)=0.16029092404406124197991096818359
      w(13)=0.14841394259593888500968064366841
      w(14)=0.13226728044875077692604673390973
      w(15)=0.11231534147730504407091001546378
      w(16)=0.089131757099207084448008790556153
      w(17)=0.063381891762629736851695690418317
      w(18)=0.035793365186176477115425569035122
      w(19)=0.0058479532163742690058479532163743
   case(20)
      w(1)=0.0052631578947368421052631578947368
      w(2)=0.032237123188488941491605028117294
      w(3)=0.057181802127566826004753627173243
      w(4)=0.080631763996119603144776846113721
      w(5)=0.10199149969945081568378120573289
      w(6)=0.12070922762867472509942970500239
      w(7)=0.13630048235872418448978079298903
      w(8)=0.14836155407091682581471301373397
      w(9)=0.15658010264747548715816989679364
      w(10)=0.16074328638784574900772672644908
      w(11)=0.16074328638784574900772672644908
      w(12)=0.15658010264747548715816989679364
      w(13)=0.14836155407091682581471301373397
      w(14)=0.13630048235872418448978079298903
      w(15)=0.12070922762867472509942970500239
      w(16)=0.10199149969945081568378120573289
      w(17)=0.080631763996119603144776846113721
      w(18)=0.057181802127566826004753627173243
      w(19)=0.032237123188488941491605028117294
      w(20)=0.0052631578947368421052631578947368
   case(21)
      w(1)=0.0047619047619047619047619047619048
      w(2)=0.029184840098505458609458543613171
      w(3)=0.051843169000849625072722971852830
      w(4)=0.073273918185074144252547861041894
      w(5)=0.092985467957886065301137664149214
      w(6)=0.11051708321912333526700048678439
      w(7)=0.12545812119086894801515753570800
      w(8)=0.13745846286004134358089961741515
      w(9)=0.14623686244797745926727053063439
      w(10)=0.15158757511168138445325068150529
      w(11)=0.15338519033217494855158440506754
      w(12)=0.15158757511168138445325068150529
      w(13)=0.14623686244797745926727053063439
      w(14)=0.13745846286004134358089961741515
      w(15)=0.12545812119086894801515753570800
      w(16)=0.11051708321912333526700048678439
      w(17)=0.092985467957886065301137664149214
      w(18)=0.073273918185074144252547861041894
      w(19)=0.051843169000849625072722971852830
      w(20)=0.029184840098505458609458543613171
      w(21)=0.0047619047619047619047619047619048
   case(22)
      w(1)=0.0043290043290043290043290043290043
      w(2)=0.026545747682501757911627904520543
      w(3)=0.047214465293740752123775734864792
      w(4)=0.066865605864553076012404194157097
      w(5)=0.085090060391838447815711236095748
      w(6)=0.10150057480164767437243730374960
      w(7)=0.11574764465393906659003636772146
      w(8)=0.12752769665343027553084445930883
      w(9)=0.13658968861374142668617736220617
      w(10)=0.14274049227136140033623599356679
      w(11)=0.14584901944424179361642043947997
      w(12)=0.14584901944424179361642043947997
      w(13)=0.14274049227136140033623599356679
      w(14)=0.13658968861374142668617736220617
      w(15)=0.12752769665343027553084445930883
      w(16)=0.11574764465393906659003636772146
      w(17)=0.10150057480164767437243730374960
      w(18)=0.085090060391838447815711236095748
      w(19)=0.066865605864553076012404194157097
      w(20)=0.047214465293740752123775734864792
      w(21)=0.026545747682501757911627904520543
      w(22)=0.0043290043290043290043290043290043
   case(23)
      w(1)=0.0039525691699604743083003952569170
      w(2)=0.024248600771531736517399658937097
      w(3)=0.043175871170241834748876465612042
      w(4)=0.061252477129554206381382847440355
      w(5)=0.078135449475569989741934255347965
      w(6)=0.093497246163512341833500706906697
      w(7)=0.10703910172433651153518362791547
      w(8)=0.11849751066274913130212600472426
      w(9)=0.12764947470175887663614855305567
      w(10)=0.13431687263860381990156489770071
      w(11)=0.13836993638580739452350273386294
      w(12)=0.13972978001274736514015970647975
      w(13)=0.13836993638580739452350273386294
      w(14)=0.13431687263860381990156489770071
      w(15)=0.12764947470175887663614855305567
      w(16)=0.11849751066274913130212600472426
      w(17)=0.10703910172433651153518362791547
      w(18)=0.093497246163512341833500706906697
      w(19)=0.078135449475569989741934255347965
      w(20)=0.061252477129554206381382847440355
      w(21)=0.043175871170241834748876465612042
      w(22)=0.024248600771531736517399658937097
      w(23)=0.0039525691699604743083003952569170
   case(24)
      w(1)=0.0036231884057971014492753623188406
      w(2)=0.022236853464711208992960434817299
      w(3)=0.039631681333467809469262163363472
      w(4)=0.056309848724646199020948339678118
      w(5)=0.071981862055293982215639060668680
      w(6)=0.086369029967929068216562819306583
      w(7)=0.099214827684083587414149770995712
      w(8)=0.11029008689296860411042412302760
      w(9)=0.11939719370249131903229388835072
      w(10)=0.12637364202802080012724809069137
      w(11)=0.13109494187360394235445022581653
      w(12)=0.13347684386698637759678572096508
      w(13)=0.13347684386698637759678572096508
      w(14)=0.13109494187360394235445022581653
      w(15)=0.12637364202802080012724809069137
      w(16)=0.11939719370249131903229388835072
      w(17)=0.11029008689296860411042412302760
      w(18)=0.099214827684083587414149770995712
      w(19)=0.086369029967929068216562819306583
      w(20)=0.071981862055293982215639060668680
      w(21)=0.056309848724646199020948339678118
      w(22)=0.039631681333467809469262163363472
      w(23)=0.022236853464711208992960434817299
      w(24)=0.0036231884057971014492753623188406
   case(25)
      w(1)=0.0033333333333333333333333333333333
      w(2)=0.020465168932974385308542471819163
      w(3)=0.036504738794271372032382988755110
      w(4)=0.051936228368491474643333889713489
      w(5)=0.066513728675312784693869993313599
      w(6)=0.079998774836292981801626436138836
      w(7)=0.092170139910620421912689622714049
      w(8)=0.10282803034795783082750364490713
      w(9)=0.11179746626832088815624423243104
      w(10)=0.11893117940681182540944424463419
      w(11)=0.12411203893795029069521531243930
      w(12)=0.12725497753833144701711441673876
      w(13)=0.12830838929866192833739882612401
      w(14)=0.12725497753833144701711441673876
      w(15)=0.12411203893795029069521531243930
      w(16)=0.11893117940681182540944424463419
      w(17)=0.11179746626832088815624423243104
      w(18)=0.10282803034795783082750364490713
      w(19)=0.092170139910620421912689622714049
      w(20)=0.079998774836292981801626436138836
      w(21)=0.066513728675312784693869993313599
      w(22)=0.051936228368491474643333889713489
      w(23)=0.036504738794271372032382988755110
      w(24)=0.020465168932974385308542471819163
      w(25)=0.0033333333333333333333333333333333
   case(26)
      w(1)=0.0030769230769230769230769230769231
      w(2)=0.018896858024263465581352047676267
      w(3)=0.033732303685955999377522748582756
      w(4)=0.048048399081180627315979312780662
      w(5)=0.061635025142547402782180054104279
      w(6)=0.074287050122291137316084082986249
      w(7)=0.085812863980004362187481252359068
      w(8)=0.096037802353901310803697396370862
      w(9)=0.10480688623073705298990583689136
      w(10)=0.11198719411986033530021087987989
      w(11)=0.11746988409380900707669562029648
      w(12)=0.12117184628844334604428669570423
      w(13)=0.12303696380008287630152714929097
      w(14)=0.12303696380008287630152714929097
      w(15)=0.12117184628844334604428669570423
      w(16)=0.11746988409380900707669562029648
      w(17)=0.11198719411986033530021087987989
      w(18)=0.10480688623073705298990583689136
      w(19)=0.096037802353901310803697396370862
      w(20)=0.085812863980004362187481252359068
      w(21)=0.074287050122291137316084082986249
      w(22)=0.061635025142547402782180054104279
      w(23)=0.048048399081180627315979312780662
      w(24)=0.033732303685955999377522748582756
      w(25)=0.018896858024263465581352047676267
      w(26)=0.0030769230769230769230769230769231
   case(27)
      w(1)=0.0028490028490028490028490028490028
      w(2)=0.017501974876065579019369734362719
      w(3)=0.031262951735202384324784990064795
      w(4)=0.044577657933061698744074742241386
      w(5)=0.057265569680162731739087228253941
      w(6)=0.069149342360043276280634735030127
      w(7)=0.080062321970538458168238070483950
      w(8)=0.089851365259290559972136301946063
      w(9)=0.098379074585952763179308931269989
      w(10)=0.10552574782125301121838198947990
      w(11)=0.11119106525743703292826195934215
      w(12)=0.11529550025465198281375333337473
      w(13)=0.11778143658595615906649907944836
      w(14)=0.11861397766276302708523980370575
      w(15)=0.11778143658595615906649907944836
      w(16)=0.11529550025465198281375333337473
      w(17)=0.11119106525743703292826195934215
      w(18)=0.10552574782125301121838198947990
      w(19)=0.098379074585952763179308931269989
      w(20)=0.089851365259290559972136301946063
      w(21)=0.080062321970538458168238070483950
      w(22)=0.069149342360043276280634735030127
      w(23)=0.057265569680162731739087228253941
      w(24)=0.044577657933061698744074742241386
      w(25)=0.031262951735202384324784990064795
      w(26)=0.017501974876065579019369734362719
      w(27)=0.0028490028490028490028490028490028
   case(28)
      w(1)=0.0026455026455026455026455026455026
      w(2)=0.016255883957504218198990152897110
      w(3)=0.029054220677979144706852779823582
      w(4)=0.041466915243006721037985848778627
      w(5)=0.053338077047327488400325513471500
      w(6)=0.064513658080354538390245693462478
      w(7)=0.074848123509707702780567939143162
      w(8)=0.084206795121510325739491187797920
      w(9)=0.092467685997712175722035394699386
      w(10)=0.099523110412495672875945354750915
      w(11)=0.10528109376105589448237755179491
      w(12)=0.10966657379597662508858586379121
      w(13)=0.11262238007723901254063642411366
      w(14)=0.11410997967262783453331479283004
      w(15)=0.11410997967262783453331479283004
      w(16)=0.11262238007723901254063642411366
      w(17)=0.10966657379597662508858586379121
      w(18)=0.10528109376105589448237755179491
      w(19)=0.099523110412495672875945354750915
      w(20)=0.092467685997712175722035394699386
      w(21)=0.084206795121510325739491187797920
      w(22)=0.074848123509707702780567939143162
      w(23)=0.064513658080354538390245693462478
      w(24)=0.053338077047327488400325513471500
      w(25)=0.041466915243006721037985848778627
      w(26)=0.029054220677979144706852779823582
      w(27)=0.016255883957504218198990152897110
      w(28)=0.0026455026455026455026455026455026
   case(29)
      w(1)=0.0024630541871921182266009852216749
      w(2)=0.015138169859967596790857926606856
      w(3)=0.027070806296824827540851425445026
      w(4)=0.038668439979712979747832574267124
      w(5)=0.049795809093237560922668341175478
      w(6)=0.060318503828522735028064463517634
      w(7)=0.070108938000597999185266858424014
      w(8)=0.079048313027885601784170232175109
      w(9)=0.087028133441135605637626155215633
      w(10)=0.093951542114796312497836506987570
      w(11)=0.099734501637149860653569177534068
      w(12)=0.10430681646367653742270711219124
      w(13)=0.10761298583356853937358685404661
      w(14)=0.10961287784589042013213241075660
      w(15)=0.11028221677968261011245795287074
      w(16)=0.10961287784589042013213241075660
      w(17)=0.10761298583356853937358685404661
      w(18)=0.10430681646367653742270711219124
      w(19)=0.099734501637149860653569177534068
      w(20)=0.093951542114796312497836506987570
      w(21)=0.087028133441135605637626155215633
      w(22)=0.079048313027885601784170232175109
      w(23)=0.070108938000597999185266858424014
      w(24)=0.060318503828522735028064463517634
      w(25)=0.049795809093237560922668341175478
      w(26)=0.038668439979712979747832574267124
      w(27)=0.027070806296824827540851425445026
      w(28)=0.015138169859967596790857926606856
      w(29)=0.0024630541871921182266009852216749
   case(30)
      w(1)=0.0022988505747126436781609195402299
      w(2)=0.014131799327905387640732168668208
      w(3)=0.025283166740551402204268253850042
      w(4)=0.036142094199408535314732683123360
      w(5)=0.046590694533142927401880491446022
      w(6)=0.056511197923080383302193710472303
      w(7)=0.065791336397790054944101374593132
      w(8)=0.074326003324718253834067642000831
      w(9)=0.082018512833406914799721545527160
      w(10)=0.088781712319765210167256434455921
      w(11)=0.094538975193860891781132715364036
      w(12)=0.099225071004299830657675964954309
      w(13)=0.10278690530723498947028080833538
      w(14)=0.10518412159645464985621298085914
      w(15)=0.10638955872366792494758230680993
      w(16)=0.10638955872366792494758230680993
      w(17)=0.10518412159645464985621298085914
      w(18)=0.10278690530723498947028080833538
      w(19)=0.099225071004299830657675964954309
      w(20)=0.094538975193860891781132715364036
      w(21)=0.088781712319765210167256434455921
      w(22)=0.082018512833406914799721545527160
      w(23)=0.074326003324718253834067642000831
      w(24)=0.065791336397790054944101374593132
      w(25)=0.056511197923080383302193710472303
      w(26)=0.046590694533142927401880491446022
      w(27)=0.036142094199408535314732683123360
      w(28)=0.025283166740551402204268253850042
      w(29)=0.014131799327905387640732168668208
      w(30)=0.0022988505747126436781609195402299
   case(31)
      w(1)=0.0021505376344086021505376344086022
      w(2)=0.013222471025464670302635629869835
      w(3)=0.023666433230270316730045782709426
      w(4)=0.033853940405224057629810846931873
      w(5)=0.043681818160066912829747288083268
      w(6)=0.053046465493448782774280860067640
      w(7)=0.061848741290454623390748584002232
      w(8)=0.069995377594100570450215353373140
      w(9)=0.077400032341475618634283878417423
      w(10)=0.083984220517529730665258108226376
      w(11)=0.089678151045260822248142932836209
      w(12)=0.094421468377857957432190489816534
      w(13)=0.098163893013712757119741879401421
      w(14)=0.10086575479865051339556259610285
      w(15)=0.10249841359547039767590565499043
      w(16)=0.10304456295320733314178496152549
      w(17)=0.10249841359547039767590565499043
      w(18)=0.10086575479865051339556259610285
      w(19)=0.098163893013712757119741879401421
      w(20)=0.094421468377857957432190489816534
      w(21)=0.089678151045260822248142932836209
      w(22)=0.083984220517529730665258108226376
      w(23)=0.077400032341475618634283878417423
      w(24)=0.069995377594100570450215353373140
      w(25)=0.061848741290454623390748584002232
      w(26)=0.053046465493448782774280860067640
      w(27)=0.043681818160066912829747288083268
      w(28)=0.033853940405224057629810846931873
      w(29)=0.023666433230270316730045782709426
      w(30)=0.013222471025464670302635629869835
      w(31)=0.0021505376344086021505376344086022
   case(32)
      w(1)=0.0020161290322580645161290322580645
      w(2)=0.012398106501373843788620349229117
      w(3)=0.022199552889291964623832171161080
      w(4)=0.031775135410915465781562278917906
      w(5)=0.041034201586062723330403841719016
      w(6)=0.049885271336221207011960153724443
      w(7)=0.058240497248055869550798929919204
      w(8)=0.066016877257154543932436331683494
      w(9)=0.073137139602679032640370983569209
      w(10)=0.079530525692106252292356728883049
      w(11)=0.085133497949668230527527658506617
      w(12)=0.089890372957357833072124789584664
      w(13)=0.093753875546813813565908354145794
      w(14)=0.096685608948002600560378147706395
      w(15)=0.098656436540761777170651164243408
      w(16)=0.099646771501276777634939084748541
      w(17)=0.099646771501276777634939084748541
      w(18)=0.098656436540761777170651164243408
      w(19)=0.096685608948002600560378147706395
      w(20)=0.093753875546813813565908354145794
      w(21)=0.089890372957357833072124789584664
      w(22)=0.085133497949668230527527658506617
      w(23)=0.079530525692106252292356728883049
      w(24)=0.073137139602679032640370983569209
      w(25)=0.066016877257154543932436331683494
      w(26)=0.058240497248055869550798929919204
      w(27)=0.049885271336221207011960153724443
      w(28)=0.041034201586062723330403841719016
      w(29)=0.031775135410915465781562278917906
      w(30)=0.022199552889291964623832171161080
      w(31)=0.012398106501373843788620349229117
      w(32)=0.0020161290322580645161290322580645
   case(33)
      w(1)=0.0018939393939393939393939393939394
      w(2)=0.011648448392267734651222179870285
      w(3)=0.020864609017603360095811664182613
      w(4)=0.029881045916746477519971156454995
      w(5)=0.038617814771813967563858875675217
      w(6)=0.046993850461024170547973112041225
      w(7)=0.054931059442626967951698841306657
      w(8)=0.062355367852465305441060959167732
      w(9)=0.069197469494016147559969796800326
      w(10)=0.075393486923973828507129918402909
      w(11)=0.080885572193455092179707696772196
      w(12)=0.085622448531813132550191963745865
      w(13)=0.089559889747077400661148462725561
      w(14)=0.092661133442241463529935120285105
      w(15)=0.094897224394591815824355414662604
      w(16)=0.096247284972985461996554494277935
      w(17)=0.096698710102716558960032808469672
      w(18)=0.096247284972985461996554494277935
      w(19)=0.094897224394591815824355414662604
      w(20)=0.092661133442241463529935120285105
      w(21)=0.089559889747077400661148462725561
      w(22)=0.085622448531813132550191963745865
      w(23)=0.080885572193455092179707696772196
      w(24)=0.075393486923973828507129918402909
      w(25)=0.069197469494016147559969796800326
      w(26)=0.062355367852465305441060959167732
      w(27)=0.054931059442626967951698841306657
      w(28)=0.046993850461024170547973112041225
      w(29)=0.038617814771813967563858875675217
      w(30)=0.029881045916746477519971156454995
      w(31)=0.020864609017603360095811664182613
      w(32)=0.011648448392267734651222179870285
      w(33)=0.0018939393939393939393939393939394
   otherwise
      error('LOBATTO_WEIGHTS - Fatal error! Illegal value of n.');
end

return
end
  • lagrange.m给出各个拉格朗日节点基函数在所给点处的函数值及导数值:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% function [phi dphi] = lagrange(xi,n)
%
% Purpose
% =======
% Compute the Lagrange shape functions and its derivatives for xi \in [-1,1]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%计算拉格朗日节点基函数在xi处的值及其导数值
function [phi, dphi ] = lagrange(xi,n)

% n = number of shape functions (n = order+1)

xip = lobatto_points(n);%原来的坐标已经校正了,还需要再产生拉巴托点么?

xivec = xi*ones(1,n);%xi复制成一个vector
vec = xivec - xip;%计算拉巴托点到给定点的偏移

phi  = zeros(1,n);
dphi = zeros(1,n);
denom = zeros(1,n);%初始化

for i = 1:n
  num = 1;
  den = 1.;
  for j = 1:n
    if (j ~= i)
      num = num*vec(j);%其他点的偏移的乘积
      den = den*(xip(i) - xip(j)); 
    end
  end
  denom(i) = den;
  phi(i) = num/den;
end

for i = 1:n
  avec = vec; avec(i) = 1.;%第i个偏移置位为1
  num = 0.;
  for j = 1:n
    if (j ~= i)
      bvec = avec; bvec(j) = 1.;
      num = num + prod(bvec);%i不等于j,i对j时,将偏移向量的除i和j处外的相乘
    end
  end
  dphi(i) = num/denom(i);

end

return
end

-setupdofs.m设置自由度,返回自由点的内部编号集以及自由点对应整体的一个编号。

function [nodaldofs,dofinfo,numdofs] = setupdofs(options,coord,connect)


numel = options.numel;

numnod = options.numnod;

isboundarynode = zeros(1,numnod);

isboundarynode(1) = 1; 
isboundarynode(numnod) = 1; % Dirichlet BCs on boundary nodes

nodaldofs(numnod).list = [];%初始化一个13*1的结构体,字段名称为list
numdofs = 0;
for n = 1:numnod

  if (~isboundarynode(n))
    numdofs = numdofs + 1; % classical DOF
    nodaldofs(n).list = [numdofs];%自由点编号
    dofinfo(numdofs) = n; % node number for dof equal to numdofs
    %自由点对应的整体节点编号
  end

end

return
end
  • printelementnumber.m根据需求打印进度。
function printelementnumber(e,numel)

if (numel < 20) nbe = 1;
elseif (numel < 100) nbe = 10; 
elseif (numel < 200) nbe = 20; 
elseif (numel < 300) nbe = 30; 
elseif (numel < 600) nbe = 50; 
elseif (numel < 1500) nbe = 100; 
elseif (numel < 4000) nbe = 400; 
else nbe = 1000; end

if (mod(e,nbe) == 0)
  fprintf('e  = %g\n',e);
end

编写该程序需要注意的是,要给单元,节点,自由节点等编号号码,特别是自由节点的存放,可以用结构体的方式,使用空集占位。这样由连接矩阵和自由节点结构体,很快就能提取出每个单元对应的自由节点。
对于强制(本质)边界条件,可以在最后刚度矩阵上处理,也可以在前面不将边界点视为自由点而产生自由度。殊途同归。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆嵩

有打赏才有动力,你懂的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值