previous up next print clean
Next: About this document ... Up: Schwab & Schroeder: A Previous: ACKNOWLEDGEMENT


Biondi, B., Clapp, R., and Crawley, S., 1996, Seplib90: Seplib for 3-D prestack data: SEP-92, 343-364.

Claerbout, J., and Biondi, B., 1996, Geophysics in Object-Oriented Numerics (GOON): An informal conference: SEP-93, 241-252.

Claerbout, J. F., 1994, Applications of Three-Dimensional Filtering: Stanford Exploration Project.

Clapp, R. G., and Crawley, S., 1996, SEPF90: SEP-93, 293-304.

Deng, L. ., Gouveia, W., and Scales, J., 1996, The CWP object-oriented optimization library: http://timna.Mines.EDU/cwpcodes/coool/.

Fomel, S., and Claerbout, J., 1996, Simple linear operators in Fortran 90: SEP-93, 317-328.

Gockenbach, M., and Symes, W., 1996, The Hilbert Class Library: a library of abstract C++ classes for optimization and inversion: submitted for publication in Computers and Mathematics with Applications.

Gockenbach, M., 1996, The Hilbert Class Library: A library of abstract classes for C++ optimization and inversion:

Lenga, K., Clapp, R. G., and Claerbout, J. F., 1995, Java: SEP-89, 227-248.

Lumley, D., Nichols, D., and Rekdal, T., 1994, Amplitude-preserved multiple suppression: SEP-82, 25-46.

Nichols, D., Urdaneta, H., Oh, H. I., Claerbout, J., Laane, L., Karrenbach, M., and Schwab, M., 1993, Programming geophysics in C++: SEP-79, 313-471.

Schiffman, H., 1997, Thoughts on Java:

Schwab, M., and Schroeder, J., 1995, Reproducible research documents using GNUmake: SEP-89, 217-226.

Schwab, M., Karrenbach, M., and Claerbout, J., 1996, Making scientific computations reproducible: SEP-92, 327-342.

Schwab, M., 1994, Birth of a C++ project: SEP-82, 251-256.

Shewchuk, J. R., 1994, An introduction to the conjugate gradient method without the agonizing pain:

Urdaneta, H., and Karrenbach, M., 1996, An IGF90 tutorial: SEP-93, 273-292.

The solve() method of Jag's Steepest Decent Solver is almost literally translated from Shewchuk excellent paper 1994.

  public void solve(Operator A, Vector b, Vector x ) { 
    if (! (A instanceof LinearOperator)) {
      System.err.println("Error in SteepDescentSolver.solve(): " +
			 "operator A must be a LinearOperator");

this.A = A; this.b = b; this.x = x;

// initialize the solver Vector v = A.getRange().newMember(); Vector res = A.getRange().newMember(); A.residual(x,b,res); res.neg();

rtr = res.norm2();

// iterator is supplied to the solver by the programmer iterator.start();

while(iterator.hasMoreIterations()) { // iterator decides about stopping doOneStep(v); iterator.nextIteration(); // iterator reports about iteration iter++; } iterator.finish(); }

protected void doOneStep(Vector v) { A.image(res, v); // compute step length alpha float rtv =; float alpha = rtr/rtv; if (rtv == 0f) System.err.println("Error in SteepDescentSlv: " + "divide by rtv (=0)."); // update x and r // every reset-th iteration I recalculate the exact residual to // remove the accumulated floating point error. x.addScale( alpha, res); if (((iter+1) % reset) == 0) { A.residual(x,b,res); res.neg(); } else { res.addScale( -alpha, v); } rtr = res.norm2(); }

previous up next print clean
Next: About this document ... Up: Schwab & Schroeder: A Previous: ACKNOWLEDGEMENT
Stanford Exploration Project