Coder Social home page Coder Social logo

block_aaa's Introduction

Block-AAA

A method for discrete rational least squares approximation

This repository provides a MATLAB implementation of the block-AAA method described in [3]. This method is a block generalization of the AAA algorithm [7] to m-by-n matrix-valued functions F(z) of a scalar argument. Given a function F(z) at a number of sampling points in the complex plane, the block-AAA method aims to compute a low-degree rational interpolant R(z) such that R(z)~F(z), measured in the root mean squared error over the sampling points.

Block-AAA is based on a generalized barycentric formula with matrix-valued weights, that is,

R(z) = inv(sum_i W_i/(z-z_i))*(sum_i W_i F(z_i)/(z-z_i))

where the W_i are m-by-m matrices and the z_i are scalar support points. Note that the F(z_i) are m-by-n matrices and hence the numerator of R(z) effectively uses m-by-n matrices. If W_i is nonsingular and the z_i are all distinct (which we assume), then R(z_i) = F(z_i), i.e., R(z) interpolates F(z) at the support points z_i. In block-AAA, the support points z_i are chosen one after the other in a greedy fashion and the weights W_i are determined by linearized least squares approximation, as in the AAA algorithm [7].

Other matrix-valued extensions of AAA have been described in [2, 5, 6]. These methods produce rational interpolants with a scalar denominator polynomial, whilst a block-AAA interpolant has a matrix polynomial in its denominator. Hence, a block-AAA interpolant of degree d can have up to m*d finite poles, whereas the scalar-denominator interpolants in [2, 5, 6] of the same degree have at most d finite poles. The additional flexibility of the block-AAA interpolant can yield reduced approximation degrees for the same accuracy. On the other hand, such interpolants are more difficult to fit and block-AAA can exhibit erratic convergence behaviour. Further, many spurious poles and nonlinear eigenvalues might appear.

A comprehensive discussion and comparison of many methods for discrete rational least squares approximation, including the direct use of the Loewner approach [1] and vector fitting [4], will be subject of [3].

Example

block_aaa requires two essential inputs, a function handle or cell array of function values FF, and a vector of sampling points pts. Further options can be provided in a structure opts.

>> load test_block_aaa
>> opts.tol = 1e-8;
>> opts.maxit = 21;
>> [R1,rmse1,out1] = block_aaa(FF,pts,opts); 
>> rmse(pts, FF, R1)

ans =

   6.0822e-09

See also the file test_block_aaa.m in the main directory of the repository.

License

This project is licensed under the MIT License.

References

[1] A. C. Antoulas and B. D. Q. Anderson: On the scalar rational interpolation problem, IMA Journal of Mathematical Control and Information 3, pp. 61–-88, 1986.

[2] S. Elsworth and S. Güttel: Conversions between barycentric, RKFUN, and Newton representations of rational interpolants, Linear Algebra and its Applications 576, pp. 246--257, 2018.

[3] I. V. Gosea and S. Güttel: Algorithms for the rational approximation of matrix-valued functions, accepted for publication in SIAM Journal on Scientific Computing, 2021. [https://arxiv.org/abs/2003.06410]

[4] B. Gustavsen and A. Semlyen: Rational approximation of frequency domain responses by vector fitting, IEEE Transactions on Power Delivery 14(3), pp. 1052--1061, 1999.

[5] A. Hochman. FastAAA: A fast rational-function fitter. In: 2017 IEEE 26th Conference on Electrical Performance of Electronic Packaging and Systems (EPEPS), pp. 1--3, 2017.

[6] P. Lietaert, J. Pérez, B. Vandereycken, and K. Meerbergen: Automatic rational approximation and linearization of nonlinear eigenvalue problems, arXiv preprint 1801.08622, 2018. [https://arxiv.org/pdf/1801.08622.pdf]

[7] Y. Nakatsukasa, O. Sète, and L. N. Trefethen: The AAA algorithm for rational approximation, SIAM Journal on Scientific Computing 40(3), pp. A1494--A1522, 2018.

block_aaa's People

Contributors

guettel avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.