This is a software package consisting of seventeen MATLAB functions for solving differential equations on bounded, periodic, and infinite intervals by the spectral collocation (pseudospectral) method. Additional functions are included for incorporating boundary conditions, performing interpolation using barycentric formulas, and computing roots of orthogonal polynomials. Additional programs demonstrate how to use the package by solving eigenvalue, boundary value, and initial value problems arising in the fields of special functions, quantum mechanics, nonlinear waves, and hydrodynamic stability.
Details are in the accompanying paper, published in
JAC Weideman, SC Reddy, A MATLAB differentiation
matrix suite, ACM Transactions of Mathematical Software,
Vol 26, pp 465-519 (2000).
Tested under MATLAB R13.
A generalized framework called MaxPol has been recently published and made available here
MaxPol provides a framework to design variety of numerical differentiation kernels with properties like:
(1) Cutoff (lowpass) design with no side-lob artifacts (for noise-robust case)
(2) Arbitrary order of differentiation
(3) Arbitrary polynomial accuracy
(4) Derivative matrix design
(5) 2D Derivative Kernels with Steering moments
(6) Intuitive examples in Signal and Image processing
A useful pack, mainly when accomplished with the ODE solver for evolution in time.
There algorith behind the function poldif.m is numerically unstable. Consider the following code
N = 30;
x0 = linspace( 0, 1, N)';
x1 = x0.^2;
x2 = x1.*x0;
D0 = poldif( x0, 1 );
D1 = poldif( x1, 1 );
D2 = poldif( x2, 1 );
These are simply three different distributions of nodes 0 <= x <= 1.
Given N points each of the differentiating matrices should be rank N - 1, a differentiating has the constant vector as its null space.
rD0 = rank( D0 )
rD1 = rank( D1 )
rD2 = rank( D2 )
reveals ranks of 29, 6, and 3 respectivly! Firstly this indicates tha the algorithm has failed, even for the modest number of 30 nodes. Now if we compute D times a constant vector it should yield the zero vector.
vnD0 = D0 * ones( N, 1);
vnD1 = D1 * ones( N, 1);
vnD2 = D2 * ones( N, 1);
It does not. This is a more serious error. Since the errors are concentrated at the ends of the support. Exactly where we need precision if initial and boundary value problems are to be solved accurately.
Despite this problem, the package as a whole is an important contribution.
Intuitive, well documented and extremely useful!
I got your site helping me in my work On FORTRAN sice i am student
Nicely put together package cheers!
Thank you very much!!
thank you very much.
A great well-thought out library
Very good package! However, the function poldif.m fails when the number of nodes (roots) increases (e.g. 500 for Hermite polynomials, 130 for Laguerre polynomials). This is due to the calculation of the entries c(k)/c(j): first, takes the product and afterwards the division. The product produces overflow.
Simple and powerful.
Very useful for performing input/output (transient amplification) analysis of dynamical systems. easy to use, well-documented
Indispensable for my research!
I wish whether can help me solving non linear BVP in biotechnology
Great Toolbox !, I am using for nonlinear Schrödinge equations.
very useful to understand simple concepts
behind the theory & visualize them.
Would recommend to any university student.
Solved lot many problems about differentiation!!!
This stuff is amazing!
Useful and beautiful codes for solving differential equations with spectral and pseudospectral methods.
i'm interesting by this method and thanks for
Added web site address, keywords
Added web site, keywords
Create scripts with code, output, and formatted text in a single executable document.