Code covered by the BSD License  

Highlights from
Legendre Laguerre and Hermite - Gauss Quadrature

5.0

5.0 | 2 ratings Rate this file 32 Downloads (last 30 days) File Size: 3.25 KB File ID: #26737

Legendre Laguerre and Hermite - Gauss Quadrature

by Geert Van Damme

 

19 Feb 2010 (Updated 21 Feb 2010)

Nodes and weights for Legendre Laguerre and Hermite - Gauss Quadrature

| Watch this File

File Information
Description

This .zip file contains 3 mfiles for computing the nodes and weights for Legendre Laguerre and Hermite - Gauss Quadrature of any order n.

Contrary to most of the files in use, the included files are all based on a symmetrical companion matrix, the eigenvalues of which are always real and correspond to the roots of the respective polynomials.

Hence, there is a 100% certainty of avoiding complex roots at high orders. It is known that the latter issue often causes huge numerical troubles.

MATLAB release MATLAB 7.0.4 (R14SP2)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (5)
20 Oct 2010 Marios Karaoulis

Very useful program.

How can I calculate the GaussLegendre in the [0 1] space?

20 Oct 2010 Marios Karaoulis

One addition I did is this

% Linear map from[-1,1] to [a,b]
x=(a*(1-x)+b*(1+x))/2;
w=(b-a).*w/2;

a and b are user provided, and I think now that you can shift from [1 1] to [a b]

30 Apr 2012 David Holdaway

Very nice submission, simple and fast

01 May 2012 David Holdaway

Oh and I forgot to add this required you insist x = 0 is the middle value for odd via
if mod(n,2)==1
    x(ceil(n/2))=0;
end

01 May 2012 David Holdaway

I added this on the end to refine the eigenvalues via newtons method

if mod(n,2)==1
    x(ceil(n/2))=0;
end

    z=x(x>=0);
   success = false;
    for its=1:50 %maxit=50, usually will take 2
        p1 = pi^(-1/4);
        p2=0;
        for j=1:n %make hermite we need
            p3=p2;
            p2=p1;
            p1=z.*sqrt(2/j).*p2-sqrt((j-1)/j).*p3;
        end
    pp = sqrt(2*n).*p2;
    z1=z;
    z=z1-p1./pp;
    if all(abs(z-z1)< 20*eps)
        success = true;
        break
    end
    end
    if ~success
        warning('failed to converge to desired accuracy')
    end
    w(x>=0) = 2./pp.^2;
    w(x<=0) = flipud(w(x>=0));
    x(x>=0) = z;
    x(x<=0) = -flipud(z);

Please login to add a comment or rating.
Updates
19 Feb 2010

No updates were made. Only the description was changed: it should read "the eigenvalues of the companion matrix" instead of "the roots of the companion matrix". Obviously, a matrix has no roots.

21 Feb 2010

Some minor changes to the code's comments.

Tag Activity for this File
Tag Applied By Date/Time
gausslegendre Geert Van Damme 19 Feb 2010 11:31:09
gausslaguerre Geert Van Damme 19 Feb 2010 11:31:09
gausshermite Geert Van Damme 19 Feb 2010 11:31:09
gauss quadrature Geert Van Damme 19 Feb 2010 11:31:09
numerical integration Geert Van Damme 19 Feb 2010 11:31:09
quadrature Geert Van Damme 19 Feb 2010 11:31:09
gauss quadrature King 20 Feb 2010 08:06:50
gausshermite Jiaxiong Yao 05 Oct 2011 19:45:08

Contact us at files@mathworks.com