User:Antonio Pino: Difference between revisions
Antonio Pino (talk | contribs) |
Antonio Pino (talk | contribs) m (→Y: Your task: : separate the Tentative Time Line from the rest.) |
||
(52 intermediate revisions by 3 users not shown) | |||
Line 3: | Line 3: | ||
== A: An introduction == | == A: An introduction == | ||
* Please describe yourself in three sentences, one of them regarding your current studies. | * Please describe yourself in three sentences, one of them regarding your current studies. | ||
I am Antonio Pino Robles and I am currently an | I am Antonio Pino Robles and I am currently an undergraduate student at the University of the Basque Country, in the Basque Country, Northern Spain, Atlantic French border. Thus I an a native Basque and Spanish speaker, I can express myself in French and Italian (after a year long stay in Piemonte), besides being fluent in English. | ||
I have always enjoyed literature and math, which are things I like to do when I enjoy the heavy rain pouring in my | I have always enjoyed literature and math, which are things I like to do when I enjoy the heavy rain pouring in my home town. | ||
* What's your overall background? | * What's your overall background? | ||
The undergraduate programme I am following leads me to a major in Electronic Engineering and a minor in Physics, that means that I have experience in subjects such as Control Theory, Signal Analysis on one side, and Quantum Physics and Thermodynamics on the other; all with a strong mathematical background. | |||
* Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so? | * Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so? | ||
I hope to learn how programming is done outside of the | I hope to learn how programming is done outside of the sand boxed problems I have done until now (at Uni) while contributing to free software. Besides, I have been following the FSF for a long time, and been a free software user for longer, so this can be a way of giving back while receiving. | ||
* Why are you choosing Octave? | * Why are you choosing Octave? | ||
Last year, I took two courses the relied heavily on the matrix exponential (Control Theory and Non-linear dynamics) to solve systems (or approximate them) by | Last year, I took two courses the relied heavily on the matrix exponential (Control Theory and Non-linear dynamics) to solve systems (or approximate them) by | ||
Line 16: | Line 16: | ||
<math>\dot{x}=A\cdot x</math>. | <math>\dot{x}=A\cdot x</math>. | ||
Needless to say, they tried to push Matlab to all the students, and I got by with Gnu | Needless to say, they tried to push Matlab to all the students, and I got by with Gnu Octave, for which I am thankful to the whole developer team. | ||
== C: Contact == | == C: Contact == | ||
Line 22: | Line 22: | ||
While at IRC my nickname will be AntonioPino, and I am readily available by email at data.script93 <at> gmail.com | While at IRC my nickname will be AntonioPino, and I am readily available by email at data.script93 <at> gmail.com | ||
* Which time zone do you live in? Will that change over GSoC duration? | * Which time zone do you live in? Will that change over GSoC duration? | ||
In Spain we are at UTC+1 ( | In Spain we are at UTC+1 (DST UTC+2), although there have been talks to change to an UTC+0 (DST UTC+1) frame, I am not aware of those taking place soon, nor do I plan to travel outside UTC+2 this summer. | ||
* Please state the | * Please state the time frame (in UTC+0) when you feel most comfortable working during GSoC. Where are your time buffers? | ||
I am really a morning person, so a eight to six (UTC+0) schedule will do for me. | I am really a morning person, so a eight to six (UTC+0) schedule will do for me. | ||
Line 30: | Line 30: | ||
* Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt. | * Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt. | ||
I have been writing m-scripts for two years now, to solve specific engineering problems, 100-200 lines long on average. | I have been writing m-scripts for two years now, to solve specific engineering problems, 100-200 lines long on average. | ||
Apart from that, I have a basic level of C++ (not with the octave api) and I have not used OpenGL nor Qt before. | |||
* Please describe your experience with other programming languages. | * Please describe your experience with other programming languages. | ||
A big part of the programming done at Uni has been done in Python: from the basic | A big part of the programming done at Uni has been done in Python: from the basic algorithm courses to symbolic problem solving with sympy. It has also been the tool of choice for a little kludge here and there. | ||
On the other hand, I have used VHDL for building and testing a discrete signal filter. And c to do a little systems and microcontroller programming. | On the other hand, I have used VHDL for building and testing a discrete signal filter. And c to do a little systems and microcontroller programming. | ||
* Please describe your experience with being in a development team. | * Please describe your experience with being in a development team. | ||
Line 38: | Line 38: | ||
* Please describe the biggest project you have written code for and what you learned by doing so. Also describe your role in that project over time. | * Please describe the biggest project you have written code for and what you learned by doing so. Also describe your role in that project over time. | ||
The biggest project I have worked on was the VHDL discrete filter, carried out along with two colleagues. The idea was to make use of all we learned about digital circuits so we implemented a RAM, adders, various types of registers, finite state machines, and we all went through the nightmare of 'looking for the bug' and creating | The biggest project I have worked on was the VHDL discrete filter, carried out along with two colleagues. The idea was to make use of all we learned about digital circuits so we implemented a RAM, adders, various types of registers, finite state machines, and we all went through the nightmare of 'looking for the bug' and creating test benchs for vhdl. But more importantly that an innocent looking modification may break others' job. | ||
By the way, knowing about the nuts and bolts of how are numbers stored in the bare metal gave me an | By the way, knowing about the nuts and bolts of how are numbers stored in the bare metal gave me an appreciation for what are the differences between an idealized (almighty) function and the ''real'' poor man's version of it. | ||
* Please state the commits and patches you already contributed to Octave. | * Please state the commits and patches you already contributed to Octave. | ||
No commits or patches done, although I have successfully built it from source and written a | No commits or patches done, although I have successfully built it from source and written a bare bones matrix cosine function | ||
[ | [http://agora.octave.org/snippet/tqUQ/ cosm.m] based on [http://www.maths.manchester.ac.uk/~higham/narep/narep411.pdf Higham and Smith]. | ||
== F: Feeling fine == | == F: Feeling fine == | ||
Line 52: | Line 52: | ||
Basic usage of git and hg only (just in order to clone-update-build). | Basic usage of git and hg only (just in order to clone-update-build). | ||
* Mediawiki or other wiki software | * Mediawiki or other wiki software | ||
Definitely not an expert, but comfortable editing | Definitely not an expert, but comfortable editing with it. | ||
* make, gcc, gdb or other development tools | * make, gcc, gdb or other development tools | ||
My experience with these is limited, having used GCC, make and autotools to build free software packages. | My experience with these is limited, having used GCC, make and autotools to build free software packages. | ||
Line 60: | Line 60: | ||
== O: Only out of interest == | == O: Only out of interest == | ||
* Did you ever hear about Octave before? | * Did you ever hear about Octave before? | ||
I have been using octave for a long time now, in varying courses such as Linear Algebra, Control Theory, Quantum Physics | I have been using octave for a long time now, in varying courses such as Linear Algebra, Control Theory, Quantum Physics. | ||
* What was the first question concerning Octave you could not find an answer to rather quickly? | * What was the first question concerning Octave you could not find an answer to rather quickly? | ||
Finding a way to systematically test a functions was not very easy. I also missed a guide on the differences with Matlab (specially syntax), which should be crucial as Matlab is sadly more promoted than Octave in universities and people | Finding a way to systematically test a functions was not very easy. I also missed a guide on the differences with Matlab (specially syntax), which should be crucial as Matlab is sadly more promoted than Octave in universities and people discover the latter when looking for an alternative to the former, just like me. | ||
== P: Prerequisites == | == P: Prerequisites == | ||
I have access as root to two laptops running Debian Gnu | I have access as root to two laptops running Debian Gnu/Linux and Ubuntu, with a reasonably working internet connection during the whole day. | ||
== S: Self-assessment == | == S: Self-assessment == | ||
Line 73: | Line 73: | ||
* How autonomous are you when developing? | * How autonomous are you when developing? | ||
I often start with a proof of concept and 'see how it turns out' is | I often start with a proof of concept and 'see how it turns out' is usually my approach to a problem, I never start doing it blindly or without a clue, though. | ||
== Y: Your task == | == Y: Your task == | ||
The project I intend to do is [http://wiki.octave.org/Summer_of_Code_Project_Ideas#Improve_logm.2C_sqrtm.2C_funm Improve logm, sqrtm, funm]; its aim is to improve the existing implementations of [https://en.wikipedia.org/wiki/Matrix_function Matrix Functions] in | The project I intend to do is [http://wiki.octave.org/Summer_of_Code_Project_Ideas#Improve_logm.2C_sqrtm.2C_funm Improve logm, sqrtm, funm]; its aim is to improve the existing implementations of [https://en.wikipedia.org/wiki/Matrix_function Matrix Functions] in Octave based on the algorithms developed by [http://www.maths.manchester.ac.uk/~higham/NAMF/#People a team lead by Prof. Higham] (project entitled Numerical Analysis of Matrix Functions, NAMF) at the University of Manchester. At this point in time, in Octave there are the following: [http://hg.savannah.gnu.org/hgweb/octave/file/9a8be23d2c05/scripts/linear-algebra/expm.m expm] makes use of Padé approximant, [http://hg.savannah.gnu.org/hgweb/octave/file/9a8be23d2c05/scripts/linear-algebra/logm.m logm] uses a Schur-Parlett algorithm, and [http://hg.savannah.gnu.org/hgweb/octave/file/9a8be23d2c05/libinterp/corefcn/sqrtm.cc sqrtm] using a variant of the algorithm in A New sqrtm for MATLAB[1]. On the other hand, in Octave-Forge there are [http://sourceforge.net/p/octave/linear-algebra/ci/default/tree/inst/funm.m funm] and [http://sourceforge.net/p/octave/linear-algebra/ci/default/tree/inst/thfm.m trigonometric and hyperbolic matrix functions]. For a general survey-introduction to matrix functions (or matrix computation in general) refer to Golub & Van Loan[2]. | ||
I believe this is of interest to GNU Octave first, due to the goal of overall MATLAB compatibility and second, because more and more systems are being described by a matrix equation lately. | |||
'''TENTATIVE | Upon completion GNU Octave should have a working funm based on the Schur-Parlett algorithms by Higham et al., that calls to specific matrix functions if these have an instance of their own: expm, logm, sqrtm etc. | ||
'''Update:''' | |||
Part of the work is already done by Prof. N.J. Higham and is available under a GPLv3+ license: [http://www.ma.man.ac.uk/~higham/mftoolbox/ The Matrix Function Toolbox][3] which is closely related to the book by the same author[4]. A [http://www.ma.man.ac.uk/~higham/mctoolbox toolbox for matrix computations][5] (The Matrix Computation Toolbox) is also provided by the same author, under the same license. Finally, a funm function is provided in the page of the NAMF project under GPLv3+. One might suggest that there is still room for improvement; because as Marco Caliari noted the toolboxes are from 2008. A review of the literature needs to be done in order to use more recent algorithms when writing the new functions. | |||
'''May the 25th Update:''' | |||
After the community bonding period and before starting today the coding period, I will briefly list the transformation that has undergone my initial proposal: from just implementing new algorithms and then add them to GNU Octave, to various modifications of GNU Octave itself so that Higham's toolboxes run smoothly and in the end add the new algorithms. Sticking to what I said before, I expect to be doing the modifications (e.g. new bugs, patches, toolboxes) most of the first half of the coding period. From there we aim to go as far as we can about matrix functions, I will do so. | |||
On the side, I reckon that fast-running matrix manipulation involves C++, a weakness I will cure with a quick refreshment and reading lots of GNU Octave code. | |||
I hope everyone pleasantly codes their summer away! | |||
PS: a final thank goes to the project in general and my mentors in particular for the opportunity. | |||
==='''TENTATIVE TIME LINE'''=== | |||
1st week, May 25-31. Last/14th week, August 24-30. | |||
Important dates: all of them, but specially the ''Midterm'' on the 3rd of July (week 6), the ''Firm Pencils Down'' on the 21st of August, and the ''Final Evaluation'' on the 28th of August. | |||
'''preceding weeks (community bonding)''' | |||
First meeting. | |||
Start the blog. | |||
Set up the working environment. | |||
Create an hg repository with the toolboxes. | |||
Second meeting. | |||
Start writing tests for NAMF software and get acquainted with the bug reporting in Savannah. | |||
'''week 1''' | |||
The start should be soft for I am having the finals in this period. At this point the list of algorithms to be used must be completely defined; that is, a final review of the literature is to be done. | |||
Work on the toolboxes starts here. NAMF software shall tested now, so that a first funm works well within Octave. | |||
'''weeks 2-4''' | |||
Keep working in the toolboxes proceeding in chronological order: | |||
::Test Matrix Toolbox (1995) | |||
::Matrix Computation Toolbox (2002) | |||
::Matrix Function Toolbox (2008). | |||
Start refreshing C++ knowledge. | |||
'''weeks 4-7''' | |||
''Milestone 0'': the toolboxes are ready. | |||
''' ''Midterm'' on the 3rd of July (week 6)''' | |||
End the C++ refreshing. | |||
funm | |||
''Milestone 1'': general purpose funm based on a Schur-Parlett algorithm. | |||
'''weeks 8-9''' | |||
expm[7] and logm | |||
'''weeks 10-11''' | |||
sqrtm | |||
p-th roots (p = integer) algorithm [?] | |||
''Milestone 2'': logm, sqrtm, funm | |||
'''week 12''' | |||
implement trigonometric functions (I submitted a snippet of cosm [http://octave.1599824.n4.nabble.com/GSoC-2015-improving-matrix-funtcions-td4669227.html to the mailing list], [http://agora.octave.org/snippet/tqUQ/ updated]) | |||
'''weeks 13-14''' | |||
Pencils down. Run tests on the Matrix Functions and write/review their documentation. | |||
''' ''Firm Pencils Down'' on the 21st of August ''' | |||
''' ''Final Evaluation'' on the 28th of August ''' | |||
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px"> | |||
'''TENTATIVE TIME LINE'''(previous) | |||
<div class="mw-collapsible-content">'''Introduction''' | |||
It appears to me that the natural task division for this project is to first improve and test funm (this should be ready by the mid-term), and then get to the rest, picking logm first. | |||
'''weeks 1-2''' | '''weeks 1-2''' | ||
The start should be soft for I am having the finals in this period. | The start should be soft for I am having the finals in this period. At this point the list of algorithms to be used must be completely defined. | ||
'''weeks 3-7''' | '''weeks 3-7''' | ||
Line 103: | Line 194: | ||
'''weeks 12''' | '''weeks 12''' | ||
implement trigonometric functions (I submitted a | implement trigonometric functions (I submitted a snippet of cosm [http://octave.1599824.n4.nabble.com/GSoC-2015-improving-matrix-funtcions-td4669227.html to the mailing list]) | ||
'''weeks 13-14''' | '''weeks 13-14''' | ||
Pencils down. Run tests on the Matrix Functions and write/review their documentation. | Pencils down. Run tests on the Matrix Functions and write/review their documentation. | ||
</div> | |||
</div> | |||
--- | <!-- references | ||
these feel like I have just one source, and I am citing it over and over again... | |||
---> | |||
[1] N.J. Higham. A New sqrtm for MATLAB. Numerical Analysis Report No. 336, Manchester Centre for Computational Mathematics, Manchester, England, January 1999. | |||
[1] N.J. Higham. A New sqrtm for MATLAB. | [2] G.H. Golub and C.F. Van Loan. Matrix Computations, 4th Edition. The Johns Hopkins University Press, Baltimore, USA, 2013. | ||
[3] N. J. Higham. The Matrix Function Toolbox. http://www.ma.man.ac.uk/~higham/mftoolbox | |||
[4] N. J. Higham, Functions of Matrices: Theory and Computation, Society for Industrial and Applied Mathematics, Philadelphia, USA, 2008. | |||
[5] N. J. Higham. The Matrix Computation Toolbox. http://www.ma.man.ac.uk/~higham/mctoolbox | |||
[6] M. I. Smith (2003). [http://www.maths.manchester.ac.uk/~higham/narep/narep392.ps.gz A Schur Algorithm For Computing Matrix Pth Roots], SIAM J. MATRIX ANAL. APPL. 24, 4, 971-989. | |||
[7] A.H. Al-Mohy and N.J. Higham (2009). "A New Scaling and Squaring Algorithm for the Matrix Exponential," SIAM J. Matrix Anal. Applic. 31, 970-989 <http://eprints.ma.man.ac.uk/1217/01/covered/MIMS_ep2009_9.pdf> | |||
==Z: submitted proposal== | |||
(note: personal contact info. has been removed and the info. below is has mostly been extracted form above) | |||
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px"> | |||
'''Title''': Improving Matrix Functions in GNU Octave | |||
'''Organization''': GNU Project | |||
'''Abstract''': Matrix Functions are widely used to describe dynamical systems, this project aims at implementing those based on algorithms developed at the University of Manchester by Dr. Philip Davies and Matthew Smith, led by Prof. Nick Higham. Upon completion Gnu Octave should have no problem (extending compatibility with Matlab) when running the toolboxes by Higham, and should also have a reliable working funm based on the Schur-Parlett algorithms, that calls to specific matrix functions if these have an instance of their own. | |||
Additional info: http://wiki.octave.org/User:Antonio_Pino | |||
<div class="mw-collapsible-content">'''Introduction''' | |||
I am Antonio Pino Robles, and if selected I will be working on the project for about 6-8 hours a day (8:00-16:00 UTC+0), with the exception of the first two weeks when I will be taking my final exams. Therefore, mine will be a soft start. As for IRC, I may be contacted any time during the day at AntonioPino in the #octave channel at freenode, via a mobile connection. That work plan shall not be altered, as I don't plan to travel this summer. | |||
On the other hand, I am a fluent English speaker, hold a Cambridge CAE certificate and have taken several university courses taught entirely in the English language. Besides, I am an avid reader, with a passion for the English literature. What I mean is that I do not expect any problem communicating with the mentors or organizers, either in a written fashion or orally. | |||
'''Benefit-Deliverables''' | |||
The project's aim is to improve the existing implementations of Matrix Functions in Gnu Octave based on the algorithms developed by a team lead by Prof. Higham at the University of Manchester. At this point in time, in Gnu Octave there are the following: expm makes use of Padé approximant, logm uses a Schur-Parlett algorithm, and sqrtm using a variant of the algorithm in A New sqrtm for MATLAB[0]. On the other hand, in Octave-Forge there are funm and trigonometric and hyperbolic matrix functions. | |||
I believe this is of interest to Gnu Octave first, due to the goal of overall MATLAB compatibility and second, because more and more systems are being described by a matrix equation lately. | |||
Part of the work is already done by Prof. N.J. Higham and is available under a GPLv3+ license: The Matrix Function Toolbox[1] which is closely related to the book by the same author[4], The Matrix Computation Toolbox[2] is also provided by the same author, under the same license. That is the project offers a twofold benefit: renewed Matrix Functions as well as further Matlab compatibility. | |||
Hence, the first part of the project is to focus on Octave-Matlab compatibility by making the toolboxes --originally intended to work with Matlab-- work smoothly as they are under Octave. Then recent algorithms will be used to replace existing implementations. | |||
funm should be ready by the mid-term. The tentative time line can be read in the "Additional Info URL". | |||
'''Qualification''' | |||
Despite I consider myself an introvert person, I get most of my time when working with people, for example at study groups in university. I have been let down by harsh or ambiguous comments in the past, I still get an enormous benefit from properly filtered feedback, which I try to give when I think its necessary. | |||
On one side, I hope to learn how programming is done outside of the sand boxed problems I have done until now (at Uni) while contributing to free software. Besides, I have been following the FSF for a long time, and been a free software user for longer, so this is in fact a way of giving back while receiving. | |||
On the other, more and more dynamical systems can be approximated by a Matrix differential equation, and to have efficient Matrix Function implementations in Gnu Octave will help any free software user (including myself) approach these systems. | |||
Finally, I have been writing m-scripts for two years now, to solve specific engineering problems, a strong python background. I order to fulfil it I will have to refresh my C++ knowledge by becoming familiar with the source tree, and get used to mercurial (hg), the version control system used to manage Gnu Octave. | |||
[0] N.J. Higham. A New sqrtm for MATLAB. Numerical Analysis Report No. 336, Manchester Centre for Computational Mathematics, Manchester, England, January 1999. | |||
[1] N. J. Higham. The Matrix Function Toolbox. http://www.ma.man.ac.uk/~higham/mftoolbox | |||
[2] N. J. Higham. The Matrix Computation Toolbox. http://www.ma.man.ac.uk/~higham/mctoolbox | |||
</div> | |||
</div> | |||
[[Category: Summer of Code]] | [[Category: Summer of Code]] |
Latest revision as of 12:07, 25 May 2015
Public application template[edit]
A: An introduction[edit]
- Please describe yourself in three sentences, one of them regarding your current studies.
I am Antonio Pino Robles and I am currently an undergraduate student at the University of the Basque Country, in the Basque Country, Northern Spain, Atlantic French border. Thus I an a native Basque and Spanish speaker, I can express myself in French and Italian (after a year long stay in Piemonte), besides being fluent in English.
I have always enjoyed literature and math, which are things I like to do when I enjoy the heavy rain pouring in my home town.
- What's your overall background?
The undergraduate programme I am following leads me to a major in Electronic Engineering and a minor in Physics, that means that I have experience in subjects such as Control Theory, Signal Analysis on one side, and Quantum Physics and Thermodynamics on the other; all with a strong mathematical background.
- Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so?
I hope to learn how programming is done outside of the sand boxed problems I have done until now (at Uni) while contributing to free software. Besides, I have been following the FSF for a long time, and been a free software user for longer, so this can be a way of giving back while receiving.
- Why are you choosing Octave?
Last year, I took two courses the relied heavily on the matrix exponential (Control Theory and Non-linear dynamics) to solve systems (or approximate them) by
.
Needless to say, they tried to push Matlab to all the students, and I got by with Gnu Octave, for which I am thankful to the whole developer team.
C: Contact[edit]
- Please state the (unique and identical where possible) nick you use on IRC and any other communication channel related to Octave.
While at IRC my nickname will be AntonioPino, and I am readily available by email at data.script93 <at> gmail.com
- Which time zone do you live in? Will that change over GSoC duration?
In Spain we are at UTC+1 (DST UTC+2), although there have been talks to change to an UTC+0 (DST UTC+1) frame, I am not aware of those taking place soon, nor do I plan to travel outside UTC+2 this summer.
- Please state the time frame (in UTC+0) when you feel most comfortable working during GSoC. Where are your time buffers?
I am really a morning person, so a eight to six (UTC+0) schedule will do for me.
E: Coding experience[edit]
This part is one of the more important ones in your application. You are allowed to be as verbose as you want, as long as you stay on topic ;-)
- Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt.
I have been writing m-scripts for two years now, to solve specific engineering problems, 100-200 lines long on average. Apart from that, I have a basic level of C++ (not with the octave api) and I have not used OpenGL nor Qt before.
- Please describe your experience with other programming languages.
A big part of the programming done at Uni has been done in Python: from the basic algorithm courses to symbolic problem solving with sympy. It has also been the tool of choice for a little kludge here and there. On the other hand, I have used VHDL for building and testing a discrete signal filter. And c to do a little systems and microcontroller programming.
- Please describe your experience with being in a development team.
If selected this will be my first experience as a free software developer.
- Please describe the biggest project you have written code for and what you learned by doing so. Also describe your role in that project over time.
The biggest project I have worked on was the VHDL discrete filter, carried out along with two colleagues. The idea was to make use of all we learned about digital circuits so we implemented a RAM, adders, various types of registers, finite state machines, and we all went through the nightmare of 'looking for the bug' and creating test benchs for vhdl. But more importantly that an innocent looking modification may break others' job.
By the way, knowing about the nuts and bolts of how are numbers stored in the bare metal gave me an appreciation for what are the differences between an idealized (almighty) function and the real poor man's version of it.
- Please state the commits and patches you already contributed to Octave.
No commits or patches done, although I have successfully built it from source and written a bare bones matrix cosine function cosm.m based on Higham and Smith.
F: Feeling fine[edit]
Please describe (in short) your experience with the following tools:
- IRC and mailing lists
In spite of not having much experience with relay chat, I have been following several mailing lists in the free software world (fsf, fsfe, octave).
- Mercurial or other source code management systems
Basic usage of git and hg only (just in order to clone-update-build).
- Mediawiki or other wiki software
Definitely not an expert, but comfortable editing with it.
- make, gcc, gdb or other development tools
My experience with these is limited, having used GCC, make and autotools to build free software packages.
- What will make you actively stay in our community after this GSoC is over?
If I stick to my discipline, I will be using numerics for a long time and octave will be one of my main tools, to which I hope to contribute.
O: Only out of interest[edit]
- Did you ever hear about Octave before?
I have been using octave for a long time now, in varying courses such as Linear Algebra, Control Theory, Quantum Physics.
- What was the first question concerning Octave you could not find an answer to rather quickly?
Finding a way to systematically test a functions was not very easy. I also missed a guide on the differences with Matlab (specially syntax), which should be crucial as Matlab is sadly more promoted than Octave in universities and people discover the latter when looking for an alternative to the former, just like me.
P: Prerequisites[edit]
I have access as root to two laptops running Debian Gnu/Linux and Ubuntu, with a reasonably working internet connection during the whole day.
S: Self-assessment[edit]
- Please describe how useful criticism looks from your point of view as committing student.
I am a person that prefers to listen than to talk, but let me put it this way: I would rather be told straight away that something isn't working than end up in a misunderstanding, even if they need to be a little rude with me.
- How autonomous are you when developing?
I often start with a proof of concept and 'see how it turns out' is usually my approach to a problem, I never start doing it blindly or without a clue, though.
Y: Your task[edit]
The project I intend to do is Improve logm, sqrtm, funm; its aim is to improve the existing implementations of Matrix Functions in Octave based on the algorithms developed by a team lead by Prof. Higham (project entitled Numerical Analysis of Matrix Functions, NAMF) at the University of Manchester. At this point in time, in Octave there are the following: expm makes use of Padé approximant, logm uses a Schur-Parlett algorithm, and sqrtm using a variant of the algorithm in A New sqrtm for MATLAB[1]. On the other hand, in Octave-Forge there are funm and trigonometric and hyperbolic matrix functions. For a general survey-introduction to matrix functions (or matrix computation in general) refer to Golub & Van Loan[2].
I believe this is of interest to GNU Octave first, due to the goal of overall MATLAB compatibility and second, because more and more systems are being described by a matrix equation lately.
Upon completion GNU Octave should have a working funm based on the Schur-Parlett algorithms by Higham et al., that calls to specific matrix functions if these have an instance of their own: expm, logm, sqrtm etc.
Update: Part of the work is already done by Prof. N.J. Higham and is available under a GPLv3+ license: The Matrix Function Toolbox[3] which is closely related to the book by the same author[4]. A toolbox for matrix computations[5] (The Matrix Computation Toolbox) is also provided by the same author, under the same license. Finally, a funm function is provided in the page of the NAMF project under GPLv3+. One might suggest that there is still room for improvement; because as Marco Caliari noted the toolboxes are from 2008. A review of the literature needs to be done in order to use more recent algorithms when writing the new functions.
May the 25th Update: After the community bonding period and before starting today the coding period, I will briefly list the transformation that has undergone my initial proposal: from just implementing new algorithms and then add them to GNU Octave, to various modifications of GNU Octave itself so that Higham's toolboxes run smoothly and in the end add the new algorithms. Sticking to what I said before, I expect to be doing the modifications (e.g. new bugs, patches, toolboxes) most of the first half of the coding period. From there we aim to go as far as we can about matrix functions, I will do so.
On the side, I reckon that fast-running matrix manipulation involves C++, a weakness I will cure with a quick refreshment and reading lots of GNU Octave code.
I hope everyone pleasantly codes their summer away!
PS: a final thank goes to the project in general and my mentors in particular for the opportunity.
TENTATIVE TIME LINE[edit]
1st week, May 25-31. Last/14th week, August 24-30.
Important dates: all of them, but specially the Midterm on the 3rd of July (week 6), the Firm Pencils Down on the 21st of August, and the Final Evaluation on the 28th of August.
preceding weeks (community bonding)
First meeting.
Start the blog.
Set up the working environment.
Create an hg repository with the toolboxes.
Second meeting.
Start writing tests for NAMF software and get acquainted with the bug reporting in Savannah.
week 1
The start should be soft for I am having the finals in this period. At this point the list of algorithms to be used must be completely defined; that is, a final review of the literature is to be done.
Work on the toolboxes starts here. NAMF software shall tested now, so that a first funm works well within Octave.
weeks 2-4
Keep working in the toolboxes proceeding in chronological order:
- Test Matrix Toolbox (1995)
- Matrix Computation Toolbox (2002)
- Matrix Function Toolbox (2008).
Start refreshing C++ knowledge.
weeks 4-7
Milestone 0: the toolboxes are ready.
Midterm on the 3rd of July (week 6)
End the C++ refreshing.
funm
Milestone 1: general purpose funm based on a Schur-Parlett algorithm.
weeks 8-9
expm[7] and logm
weeks 10-11
sqrtm
p-th roots (p = integer) algorithm [?]
Milestone 2: logm, sqrtm, funm
week 12
implement trigonometric functions (I submitted a snippet of cosm to the mailing list, updated)
weeks 13-14
Pencils down. Run tests on the Matrix Functions and write/review their documentation.
Firm Pencils Down on the 21st of August
Final Evaluation on the 28th of August
TENTATIVE TIME LINE(previous)
It appears to me that the natural task division for this project is to first improve and test funm (this should be ready by the mid-term), and then get to the rest, picking logm first.
weeks 1-2
The start should be soft for I am having the finals in this period. At this point the list of algorithms to be used must be completely defined.
weeks 3-7
funm (Milestone 1: general purpose funm based on a Schur-Parlett algorithm)
weeks 8-9
expm and logm
weeks 10-11
sqrtm p-th roots (p = integer) algorithm [?] (Milestone 2: logm, sqrtm, funm)
weeks 12
implement trigonometric functions (I submitted a snippet of cosm to the mailing list)
weeks 13-14
Pencils down. Run tests on the Matrix Functions and write/review their documentation.
[1] N.J. Higham. A New sqrtm for MATLAB. Numerical Analysis Report No. 336, Manchester Centre for Computational Mathematics, Manchester, England, January 1999.
[2] G.H. Golub and C.F. Van Loan. Matrix Computations, 4th Edition. The Johns Hopkins University Press, Baltimore, USA, 2013.
[3] N. J. Higham. The Matrix Function Toolbox. http://www.ma.man.ac.uk/~higham/mftoolbox
[4] N. J. Higham, Functions of Matrices: Theory and Computation, Society for Industrial and Applied Mathematics, Philadelphia, USA, 2008.
[5] N. J. Higham. The Matrix Computation Toolbox. http://www.ma.man.ac.uk/~higham/mctoolbox
[6] M. I. Smith (2003). A Schur Algorithm For Computing Matrix Pth Roots, SIAM J. MATRIX ANAL. APPL. 24, 4, 971-989.
[7] A.H. Al-Mohy and N.J. Higham (2009). "A New Scaling and Squaring Algorithm for the Matrix Exponential," SIAM J. Matrix Anal. Applic. 31, 970-989 <http://eprints.ma.man.ac.uk/1217/01/covered/MIMS_ep2009_9.pdf>
Z: submitted proposal[edit]
(note: personal contact info. has been removed and the info. below is has mostly been extracted form above)
Title: Improving Matrix Functions in GNU Octave
Organization: GNU Project
Abstract: Matrix Functions are widely used to describe dynamical systems, this project aims at implementing those based on algorithms developed at the University of Manchester by Dr. Philip Davies and Matthew Smith, led by Prof. Nick Higham. Upon completion Gnu Octave should have no problem (extending compatibility with Matlab) when running the toolboxes by Higham, and should also have a reliable working funm based on the Schur-Parlett algorithms, that calls to specific matrix functions if these have an instance of their own.
Additional info: http://wiki.octave.org/User:Antonio_Pino
I am Antonio Pino Robles, and if selected I will be working on the project for about 6-8 hours a day (8:00-16:00 UTC+0), with the exception of the first two weeks when I will be taking my final exams. Therefore, mine will be a soft start. As for IRC, I may be contacted any time during the day at AntonioPino in the #octave channel at freenode, via a mobile connection. That work plan shall not be altered, as I don't plan to travel this summer.
On the other hand, I am a fluent English speaker, hold a Cambridge CAE certificate and have taken several university courses taught entirely in the English language. Besides, I am an avid reader, with a passion for the English literature. What I mean is that I do not expect any problem communicating with the mentors or organizers, either in a written fashion or orally.
Benefit-Deliverables
The project's aim is to improve the existing implementations of Matrix Functions in Gnu Octave based on the algorithms developed by a team lead by Prof. Higham at the University of Manchester. At this point in time, in Gnu Octave there are the following: expm makes use of Padé approximant, logm uses a Schur-Parlett algorithm, and sqrtm using a variant of the algorithm in A New sqrtm for MATLAB[0]. On the other hand, in Octave-Forge there are funm and trigonometric and hyperbolic matrix functions.
I believe this is of interest to Gnu Octave first, due to the goal of overall MATLAB compatibility and second, because more and more systems are being described by a matrix equation lately.
Part of the work is already done by Prof. N.J. Higham and is available under a GPLv3+ license: The Matrix Function Toolbox[1] which is closely related to the book by the same author[4], The Matrix Computation Toolbox[2] is also provided by the same author, under the same license. That is the project offers a twofold benefit: renewed Matrix Functions as well as further Matlab compatibility.
Hence, the first part of the project is to focus on Octave-Matlab compatibility by making the toolboxes --originally intended to work with Matlab-- work smoothly as they are under Octave. Then recent algorithms will be used to replace existing implementations.
funm should be ready by the mid-term. The tentative time line can be read in the "Additional Info URL".
Qualification
Despite I consider myself an introvert person, I get most of my time when working with people, for example at study groups in university. I have been let down by harsh or ambiguous comments in the past, I still get an enormous benefit from properly filtered feedback, which I try to give when I think its necessary.
On one side, I hope to learn how programming is done outside of the sand boxed problems I have done until now (at Uni) while contributing to free software. Besides, I have been following the FSF for a long time, and been a free software user for longer, so this is in fact a way of giving back while receiving.
On the other, more and more dynamical systems can be approximated by a Matrix differential equation, and to have efficient Matrix Function implementations in Gnu Octave will help any free software user (including myself) approach these systems.
Finally, I have been writing m-scripts for two years now, to solve specific engineering problems, a strong python background. I order to fulfil it I will have to refresh my C++ knowledge by becoming familiar with the source tree, and get used to mercurial (hg), the version control system used to manage Gnu Octave.
[0] N.J. Higham. A New sqrtm for MATLAB. Numerical Analysis Report No. 336, Manchester Centre for Computational Mathematics, Manchester, England, January 1999.
[1] N. J. Higham. The Matrix Function Toolbox. http://www.ma.man.ac.uk/~higham/mftoolbox
[2] N. J. Higham. The Matrix Computation Toolbox. http://www.ma.man.ac.uk/~higham/mctoolbox