Gouzouni

Joined 3 March 2014
9,202 bytes added ,  14 May 2014
 
(10 intermediate revisions by the same user not shown)
Line 22: Line 22:
* ''' Please state the timeframe (in UTC+0) when you feel most comfortable working during SOCIS. Where are your time buffers?'''
* ''' Please state the timeframe (in UTC+0) when you feel most comfortable working during SOCIS. Where are your time buffers?'''
My nick in IRC, wiki.octave.org and the patch tracker is '''gouzouni''' ('''Gouzouni''' on the wiki). The time zone in my country is UTC+3
My nick in IRC, wiki.octave.org and the patch tracker is '''gouzouni''' ('''Gouzouni''' on the wiki). The time zone in my country is UTC+3
(Eastern European Time Zone) and this is not going to change during the whole SOCIS period. I usually code around 15.00 to 23.00 but time is not
(Eastern European Time Zone) and this is not going to change during the whole SOCIS period. I usually code around 5.00 to 11.00 but time is not
really a matter. Mornings are good as well!
really a matter. Evenings are good as well!


Other contact informations are my e-mail '''geoconstructor625@gmail.com''' and my Facebook account [https://www.facebook.com/georgios.ouzounis.3?ref=tn_tnmn Georgios Ouzounis]. You can also find me in Skype under the name " '''Georgios Ouzounis''' ".
Other contact informations are my e-mail '''geoconstructor625@gmail.com''' and my Facebook account [https://www.facebook.com/georgios.ouzounis.3?ref=tn_tnmn Georgios Ouzounis]. You can also find me in Skype under the name " '''Georgios Ouzounis''' ".
Line 77: Line 77:
or the mentor in order to check if everything is ok. It's the more frequent the contact is the better the outcome will be.
or the mentor in order to check if everything is ok. It's the more frequent the contact is the better the outcome will be.


**''' Do you like to discuss changes intensively and not start coding until you know what you want to do?'''
*''' Do you like to discuss changes intensively and not start coding until you know what you want to do?'''
My answer is yes, I do like to discuss changes intensively and not start coding until I know what I want to do. I don't expect to have everything figured out from the beginning but I like to have a decent schedule before starting writing code.
My answer is yes, I do like to discuss changes intensively and not start coding until I know what I want to do. I don't expect to have everything figured out from the beginning but I like to have a decent schedule before starting writing code.


**''' Do you like to code a proof of concept to 'see how it turns out', modifying that and taking the risk of having work thrown away if it doesn't match''' '''what the project or original proponent had in mind?'''
* ''' Do you like to code a proof of concept to 'see how it turns out', modifying that and taking the risk of having work thrown away if it doesn't match''' '''what the project or original proponent had in mind?'''
Yes I do. I like to try many different ways of doing something in order to find the best. Since how will it turn out is not clear at the beginning,
Yes I do. I like to try many different ways of doing something in order to find the best. Since how will it turn out is not clear at the beginning,
throwing work away, even if it is a week's work, is a risk I am willing to take.
throwing work away, even if it is a week's work, is a risk I am willing to take.
Line 89: Line 89:
* A rough estimated timeline for my work on the task would be :
* A rough estimated timeline for my work on the task would be :


'''Beginning until the mid term period ( May 19th - June 22nd )'''
'''Beginning until the end of first month ( June 1st - June 30th )'''


Include support for array and complex numbers on the already existent version of the multi-precision package.
Include support for array and complex numbers on the already existent version of the multi-precision package.
Supposing a green light is given for the creation of a basic numerical type, this period's schedule will include working with Octave's core maintainers in order to embed the new type.


Implement upclassing on operations involving objects of the multi-precision class.
Implement upclassing on operations involving objects of the multi-precision class.


Milestone 1 : mid term evaluation : The goal at this moment will be to have a fully functioning multi-precision class, including array, complex number support and upclassing.
Milestone 1 : End of first month : The goal at this moment will be to have a fully functioning multi-precision class, including array, complex number support and upclassing.  
Notes : If the creation of a new basic numerical type is accepted, then the goal will be to have the new basic type implemented and functioning among arrays and complex numbers. Due to the fact that this process includes cooperation with other Octave programmers, current time schedule might not be fully met at the mid term evaluation. Concretely there might be some functionality missing on the new basic type. As an example there might not be any support for complex numbers.


All deliverables will be tested and debugged during this period.
All deliverables will be tested and debugged during this period.


'''( June 23rd - June 27th )'''
''' (July 1st - July 4th) '''


Mid term evaluation, some testing and debugging. Planing on what to be done next. For example, if there is missing functionally on the new basic numerical type, plans will be made on when and how will this functionality be added.
Testing, documentation, further debugging.


'''( June 28th - July 11th )'''
''' (July 5th - July 15th)


Adding missing functionality on the new basic type. ( if any )
Break. As stated below, my examination period starts at June 10th and end at July 4th, so I would like to have a 10 days break in order to rest
and clear up my mind.  


If there is no functionality missing, then the development of the linear algebra algorithms can begin. A rough estimate would be about four days per algorithm including testing and debugging.
'''( July 16th - August 15th )'''
 
'''( July 12th - August 11th )'''


Continue with the algorithms' development. Given the four days per algorithm estimation, about 7 - 8 different algorithms should be created during this period.
Continue with the algorithms' development. Given the four days per algorithm estimation, about 7 - 8 different algorithms should be created during this period.


Milestone 2 : The goal for the end of this period will be to have a fully functioning multi-precision class ( or new basic numerical type ) and also a big enough arsenal of algorithms upon it.
Milestone 2 : The goal for the end of this period will be to have a fully functioning multi-precision class ( or new basic numerical type ) and also a big enough arsenal of algorithms upon it.
''' (August 16th - August 31st) '''
Wrapping up the project. Finish what is left to be done. Documentation, debugging and testing.


A list of algorithms that will be implemented ( not necessary in this order ) to support multi-precision objects is given below :
A list of algorithms that will be implemented ( not necessary in this order ) to support multi-precision objects is given below :
Line 128: Line 128:
Root of non-linear function finder ( fzero ),  
Root of non-linear function finder ( fzero ),  
Minimum value finder ( fmins ).  
Minimum value finder ( fmins ).  
''' Development methodology '''
A rough schedule that will be followed ( not necessarily in this order ) while developing the above algorithms will be :
Step 1 : Check if there is some library based on GMP or MPFR implementing any of those algorithms and if this can be embedded on Octave.
Step 2 : Study Octave's already implemented for double precision algorithms and see if they can be re-formed in order to support multiple precision.
Step 3 : Check if there is any Fortran code implementing any of the required algorithms and if it can be used to add support for multiple precision.
Step 4 : Implementing the algorithm from the scratch. This will be the final choice, and will be done only if there is no other way to implement an algorithm.


Imponderables like illness, bad days, Internet going down globally and such stuff are considered by the above schedule, this is why a precise estimation of days per algorithm is not given.
Imponderables like illness, bad days, Internet going down globally and such stuff are considered by the above schedule, this is why a precise estimation of days per algorithm is not given.


The only commitment I have for the summer is my university exam period which starts somewhere around June 6th and ends somewhere around June 27th. Despite that, I will keep coding during these days for about 5 - 6 hours everyday as stated above. Studying for the exams will be done the other hours of the day.
The only commitment I have for the summer is my university exam period which starts at June 10th and ends at July 4th. Despite that, I will keep coding during these days for about 5 - 6 hours everyday as stated above. Studying for the exams will be done the other hours of the day.


== N: News ==
== N: News ==
Line 144: Line 156:


The goal is to imitate the implementation of [http://octave.sourceforge.net/doxygen/html/dd/d24/classFloatNDArray.html FloatNDArray]  and [http://octave.sourceforge.net/doxygen/html/df/d1e/classoctave__float__matrix.html octave_float_matrix] classes, and adjust it to work on multiple precision objects.
The goal is to imitate the implementation of [http://octave.sourceforge.net/doxygen/html/dd/d24/classFloatNDArray.html FloatNDArray]  and [http://octave.sourceforge.net/doxygen/html/df/d1e/classoctave__float__matrix.html octave_float_matrix] classes, and adjust it to work on multiple precision objects.
== P: Private application submitted on SOCIS website ==
* '''First Name (mandatory):'''
Georgios
* '''Last Name (mandatory) :'''
Ouzounis
* '''Email contact (mandatory) :'''
geoconstructor625@gmail.com
* '''Personal website :'''
* '''Date of birth (mandatory) :'''
12/09/1992
* '''Nationality or nationalities (mandatory) :'''
Hellenic
* '''Institution (mandatory) :'''
School of Electrical and Computer Engineering Aristotle University of Thessaloniki
* '''Institution location (mandatory) :'''
Greece
* '''Mentoring organization (mandatory) :'''
GNU Octave
* '''Project proposal (mandatory) :'''
* ''' A: An introduction '''
My name is Georgios Ouzounis. I am 21 years old and I am a fourth year undergraduate student at the School of Electrical and Computer Engineering at Aristotle University of Thessaloniki, Greece ( http://ee.auth.gr/en/ ).
** Previous Experience :
Summer of Code in Space (SOCIS) is my second attempt to participate in a program like that after my application getting rejected at the Google Summer of Code 2014. I have been using Octave for the last two years and I have written many scripts for university projects on fields like signal processing, system identification, numerical analysis, electronic circuits etc... As far as my experience on C / C++ is concerned, I have been using these languages for the last four years, writing programs for university projects and personal use.
** A time frame :
I usually code around 5:00 to 11:00 ( UTC+0 ) and I plan on spending about 5 - 6 hours daily working on SOCIS project including Saturdays and Sundays. I will also be able to join the IRC channel during my coding hours.
The only commitment I have for the summer is my university exam period which starts at June 10th and ends at July 4th. Despite that, I will keep coding during these days for about 5 - 6 hours everyday as stated above. Studying for the exams will be done the other hours of the day. I also plan
to have a 10 days break right after the end of my examination period (5th - 15th of July) to clear up my mind and rest.
** Describing my English :
I can use English very well both in writing and speaking, so there will not be any problems regarding communication with other community members. I have a C1 level certificate for the English language.
* ''' C: Contact '''
My nick in IRC and the patch tracker is gouzouni and my nick on wiki.octave.org is Gouzouni.
My e-mail address is geoconstructor625@gmail.com .
My country's time zone is UTC+3 ( Eastern European Time Zone ), and that is not going to change over SOCIS duration.
The instant message networks I daily use are Skype (name Georgios Ouzounis) and Facebook (name Georgios Ouzounis). I have no particular preference on the way the communication is done. E-mails are good for me, so do Facebook and Skype. Whatever suits the other side.
In case of inability to connect on the internet, my mobile's phone number is +30 6972173897.
* ''' S: Self-assessment '''
From my university experience and my fellow students comments I would say that I can give constructive advice. Many of my fellow students come to me for advice when they are having a problem with a project they are working on. I guess I could say that I can also receive advice, even though I support my opinion unless there are strong arguments that I am mistaken.
As far as sorting useful criticisms from useless ones is concerned, I would say that I can generally sort useful information from useless so I am good at picking what is needed and leaving the rest.
* ''' Y: Your task '''
The project I would like to work on is "High Precision Arithmetic Computation".
** Addressing the problem :
There are numerous real world examples where double precision numbers, used by Octave, are not enough. Modelling exponential behaviours as found in semiconductor materials and electrical circuits (diodes and transistors) is an example. All of them, end up to solving linear systems of equations where the corresponding matrices are mathematically invertible but numerically not, due to large ratio between their first and last singular values.
** Proposing a solution :
A solution of the above problem would be the creation of an interface numerical over GNU MPFR (http://www.mpfr.org/) which is (quoting the site) "a C library for multiple-precision floating-point computations with correct rounding". This interface will give the ability to the user to use numbers with arbitrary precision, limited of course by the machine's internal memory. After having that interface (or numerical type) created to support matrices and complex numbers the next step would be the implementation of certain algorithms to work with those arbitrary precision numbers. Some examples of such algorithms would be computing inverse Matrix, Solving linear systems, calculating eigenvalues etc...
** Expected output :
The amplification of the already existent multi-precision package on the Mercurial repository (http://hg.code.sf.net/p/octave/multi-precision) in order to support matrix and complex number computations ('+', '-', '/', '*', 'determinant' and 'subsref') and also support the algorithms stated above.
The existence of this package for Octave can be a useful tool for it's users and for its developers too. More users will be using Octave for their computational needs and so Octave's community will grow. The outcome of this project could be combined with packages like the Electronic Circuit Simulator and the Signal package to make them more powerful. Prompted by my experience in my university, I can say it could be also useful in robotics where high precision is needed.
** Why choose me :
The first answer would be, because I really want to. This is not enough on its own but it's a good start. My programming experience is described at the beginning of this application under the label "Previous Experience" and also on my public application at wiki.octave.org/user:Gouzouni . Moreover, I have a very strong mathematical background including but not limited to linear algebra and numerical analysis. This background gives me the ability to translate a problem written in words to a mathematical problem and then use a computer to solve it. I can also easily understand any linear algebra algorithm or concept.
What I hope to gain from this project is experience. It would be my first time to join an open source community and I know there are a lot to learn. In addition, I hope to get a very good idea of how things are done on a project of that scale.
** A rough schedule of my work :
A rough estimated timeline for my work on the task would be :
'''Beginning until the end of first month ( June 1st - June 30th )'''
Include support for array and complex numbers on the already existent version of the multi-precision package.
Implement upclassing on operations involving objects of the multi-precision class.
Milestone 1 : End of first month : The goal at this moment will be to have a fully functioning multi-precision class, including array, complex number support and upclassing.
All deliverables will be tested and debugged during this period.
'''(July 1st - July 4th)'''
Testing, documentation, further debugging.
'''(July 5th - July 15th)'''
Break. As stated above, my examination period starts at June 10th and ends at July 4th, so I would like to have a 10 days break in order to rest and clear up my mind.
'''( July 16th - August 15th )'''
Continue with the algorithms' development. Given the four days per algorithm estimation, about 7 - 8 different algorithms should be created during this period.
Milestone 2 : The goal for the end of this period will be to have a fully functioning multi-precision class ( or new basic numerical type ) and also a big enough arsenal of algorithms upon it.
'''(August 16th - August 31st)'''
Wrapping up the project. Finish what is left to be done. Documentation, debugging and testing.
A list of algorithms that will be implemented ( not necessary in this order ) to support multi-precision objects is given below :
Singular Value Decomposition ( SVD ), QR factorization, Cholesky factorization ( chol ), Inverse matrix computation, Eigenvalues and eigenvectors calculation, Solving linear systems, Root of non-linear function finder ( fzero ), Minimum value finder ( fmins ).
Development methodology
A rough schedule that will be followed ( not necessarily in this order ) while developing the above algorithms will be :
Step 1 : Check if there is some library based on GMP or MPFR implementing any of those algorithms and if this can be embedded on Octave.
Step 2 : Study Octave's already implemented for double precision algorithms and see if they can be re-formed in order to support multiple precision.
Step 3 : Check if there is any Fortran code implementing any of the required algorithms and if it can be used to add support for multiple precision.
Step 4 : Implementing the algorithm from the scratch. This will be the final choice, and will be done only if there is no other way to implement an algorithm.
Imponderables like illness, bad days, Internet going down globally and such stuff are considered by the above schedule, this is why a precise estimation of days per algorithm is not given.
'''Additional notes : '''
67

edits