PDERelax BETA 0.14

Numerical Partial Differential Equation solver

Author: Bhuvanesh Bhatt (bbhatt1@towson.edu)

 

 

 

 

Description:
PDERelax is a Partial Differential Equation solver.
It currently solves the Poisson equation (negative sign and constant incorporated into source function):
numerically on a grid. It is the only PDE solver written for a calculator.

 

 

Known problems:

There are no known problems. If you encounter one, please e-mail me.

 

 

What's new in BETA 0.14:

·         PDERelax now solves the Poisson equation

·         The feedback mechanism (during the calculation) has been changed (now the root-mean-square Laplacian and the number of iterations are shown)

·         Crash with matrices larger than 19*19 has been fixed, with E.W.'s help

 

 

Syntax: PDERelax(guessMatrix,boundaryMatrix[,sourceMatrix[,maxiter[,eps]]])

 

PDERelax() shows a help message in the status line.

 

 

Requirements:

All arguments must be numeric (no symbolic values allowed), although exact numeric values are allowed.

 

 

Arguments:

·         guessMatrix is an initial guess for the potential. It also specifies boundary values of the potential.

·         The elements of boundaryMatrix should be 1 or 0, specifying whether the points lie or do not lie on the boundary. The potential does not change for boundary points, so choose the initial guess for boundary points carefully. boundaryMatrix should, of course, have the same dimensions as guessMatrix. The boundary surfaces should be parallel to the coordinate axes. As far as I know, the program works best for square matrices, although non-square matrices are allowed.

·         sourceMatrix is the rho(x,y) from the right-hand side of the Poisson equation. If a source matrix is not entered, PDERelax solves the Laplace equation.

·         maxiter = maximum number of iterations (default 100 iterations)

·         eps = tolerance (default tolerance 1*10^-6)

 

 

Hints:

To get a good representative solution, try to strike a good balance between grid size and using the grid to represent the boundary geometry as well as possible (ideally, the boundaries should lie along the grid points, but this is not always practically possible). Larger grids take up more memory and take more time to converge. If you have curved or slanted boundaries, try to approximate them by rectilinear paths on as fine a grid as possible. As far as I can tell, the maximum (square) grid size is 126*126, because of the limit on the size of variables (the AMS allows creation of matrices with size only up to 32k).

 

 

Examples:

 

[0, 0,     0,         0,     0;
 0, 0.01, 0,        0.01, 0;
 0, 0,      0.005, 0,      0;
 0, 0.01, 0,        0.01, 0;
 0, 0,      0,        0,      0]
®mat1

 

[0, 0, 0, 0, 0;
 0, 1, 0, 1, 0;
 0, 0, 0, 0, 0;
 0, 1, 0, 1, 0;
 0, 0, 0, 0, 0]®mat2

 

PDERelax(mat1,mat2,newmat(5,5),150,1E-8) returns the solution matrix:

[[0., 0.,                           0.,                         0.,                         0.]

 [0., 0.01,                        0.006666710021,   0.01,                     0.]

 [0., 0.006666710021,      0.006666844321,   0.006666710021,   0.]

 [0., 0.01,                        0.006666710021,   0.01,                     0.]

 [0., 0.,                            0.,                         0.,                         0.]]

 

As you make more iterations, the 0.006666... values will approach 2/300.

         

This was just a "toy" example, just to get a feel for the program. Let's move to a larger, more realistic example:

rho(x,y) = when(x=0 and y=0,1,0)

boundary(x,y) = 0 at the edges of the grid

This corresponds to a point charge in the center.

 

We generate the matrices:

seq(seq(when(i=20 and j=20,1,0),j,1,39),i,1,39)->src

          newMat(39,39)->guess

          seq(seq(when(i=1 or j=1 or i=39 or j=39,1,0),j,1,39),i,1,39)->bnd

 

PDERelax(guess,bnd,src,250,1E-3)     //This takes about 5min 40sec

 

Visualizing the resulting matrix would be nice, but one step at a time :-)

 

Please let me know of your opinions about this program, including design issues such as syntax.

 

 

Future plans:

I would like to make this into a fully-featured PDE solver that solves all or most common PDEs (including nonlinear ones) from mathematical physics. To achieve this, the syntax may change. I am still learning about the various techniques for solving PDEs, so this project will probably take a while.

 

 

Disclaimer:

          This is a beta version and has not been tested for

          either stability or accuracy. It may crash or hang.

          I am not responsible for any damage done to your

          calculator. To reset the calculator, press:

                   [2nd][LOCK][ON] on the TI-92 Plus

                   [2nd][LEFT][RIGHT][ON] on the TI-89

          If this doesn't reset the calculator, take out

          a battery, press and hold [(-)][)] while you insert

          the battery.

          Of course, this does not mean your calculator will

          definitely crash or hang :) In fact, you should be

          able to break a calculation by pressing [ON].

 

Copyright Bhuvanesh Bhatt.