Features; general comments... a couple suggestions..



"a scheme that would permit customization and optimization for various levels of features, performance, memory footprint, and disk footprint."

Maxima has the Maxima-init.mac feature.  I would not like Maxima as much without it.  I have thought that this feature is under supported.  A completely customized Maxima would be completely awesome, if it could be done in a init file.  Just my thoughts.

Rich





----- Original Message ----- 
From: shorne at energetiq.com 
To: maxima at math.utexas.edu 
Sent: Monday, January 05, 2009 5:22 PM
Subject: Features; general comments... a couple suggestions..



First -- I don't post very often, though I follow the group in detail and have used maxima 
for years -- so I hope you'll all forgive the length of this note.. 

I've been using Maxima (and free math software, in general) for a whole lot of years. 
In fact I started the sourceforge Maxima site, when Bill Schelter passed away. 
I'm not by any means a lisp hacker and don't feel qualified to work 
as a developer -- though I've supported other projects in the past (particularly g77). 

My own belief is that there are a host of superb free tools to do numerical 
mathematics.  Three that jump to mind are the statistical package R, the matlab clone 
Octave, and the Scilab package.  I have used the latter for many years in many real 
applications -- not toy problems, but real programs that guided development of hardware 
that is for sale in the real world. 

What Maxima brings to the table is explicitly _not_ numerical capabilities.

I'm worried a bit that Maxima seems to be experiencing "feature creep" -- 
that effort is being invested by the community into developing Maxima into 
a clone of already available tools -- instead of concentrating on those 
areas where Maxima is unique -- symbolic manipulation. 
 (And, maybe, arbitrary precision numerics... but even that is a stretch, given that the gnu mp 
package could be hooked to from Scilab... ) 

I claim that Maxima does not "need" (for instance) a highly developed, native, numerical curve fitting 
package.   However, the development model for Maxima  -- a sort of free-for-all -- is actually 
quite productive.   Chaos can be good.  One downside of the free-for-all development 
model is that as feature after feature is added, if there's no ability to easily _build_ an executable 
with a subset of features, the memory and disk footprint of the system can grow to the point 
where running it on minimal hardware can become an issue.  I've seen requests in the 
group for versions that might run on tiny hardware -- eg phones, or net appliances. 
I think it's important to remember that the original MIT Macsyma ran on a computer that 
was, by todays standards, a digital watch. 

The linux kernel build process has (I assume it still does? )  front ends that allow 
a lot of customization.    I claim an interesting project, for someone who has a solid 
architectural knowledge of Maxima, would be a similar build system -- a scheme that would 
permit customization and optimization for various levels of features, performance, memory footprint, 
and disk footprint.   


Functional featues -- 
If I had my druthers, the single most useful feature that Maxima is missing is something along 
the lines of the Macsyma taylor_solve. 

 Rationale -- 
It's very common for a math/physics/EE calculation to boil down to something 
like f(x,y) = 0, solve for y in terms of x.   

f(x,y) is often horrid.   But it's often possible to find an approximate series expansion -- a polynomial 
in x and y, valid in some physically interesting region. 
Solving this for y(x) is a known problem -- newton diagram, puiseux expansions -- 
but is absolutely non-trivial, and very interesting from both 
a programming and mathematical point of view. 
There are a bunch of rather pretty complications to be dealt with. 

A couple  specific instances for where this problem turns up -- 

Anywhere you have an eigenvalue problem with a parametric dependence - - 
these come up everywhere. 

EE -- I had to figure out how to tune an RF generator (via changing frequency) to maintain 
zero reflected power, in a plasma reactor, with a varying parameter (plasma load impedance). 
Boiling down the problem via laplace transforms gets you to f(x,y)=0, with f a polynomial 
in x and y.   

Something to get started with -- 
an incomplete and (I believe) buggy version.... 
I've hacked at this ovre the years, with little success.. 

http://alamos.math.arizona.edu/~rychlik/577-dir/lecture15.html 
http://alamos.math.arizona.edu/~rychlik/577-dir/lecture16.html 
http://alamos.math.arizona.edu/~rychlik/577-dir/puiseux.macsyma 

Thanks for the bandwidth -- 

Steve 













































      ?iga Lenar?i? <ziga.lenarcic at gmail.com> 
      Sent by: maxima-bounces at math.utexas.edu 
      12/31/2008 10:54 AM 
     To maxima at math.utexas.edu  
            cc  
            Subject [Maxima] Fitting in Maxima 

            

     



Maxima is actually lacking a proper fitting facilities (like many  
other things). lsquares is a poor excuse for a fitting package in  
many aspects:
-slow
-complicated to use
-unintuitive
-cryptic name (should be LeastSquares/least_squares, not lsquares_mse  
and what not)
I think the latter three (if not all four) aspects of lsquares  
package applies well to a lot of maxima functions, if they even exist  
(still no ODE integrator or fast numerical linear algebra  
functions)... Especialy cryptic names are the plague of maxima. What  
can a user dechipher from 'create_list' and 'makelist'. It makes no  
sense..

However not to be too critical towards maxima developers (since a lot  
of problems really originate from 30 years old code, which nobody  
dares to rewrite), I find the new draw package extremely well  
designed (esp. compared to plot2d), easy to use and useful (though  
some names, like "terminal" or "enhanced3d", originating from gnuplot  
should be translated to meaningful names like "output".) and I really  
like the fact that new gamma implementations feel like a complete  
coherent package, naming and functionality-wise.

There sadly is no "manual" written for extending maxima, no  
directions for adding functionality to maxima. I feel if new  
additions to maxima aren't guided by some central guidance document,  
different maxima level naming conventions, internal naming  
conventions, packages doubling or only partially implementing desired  
featureset ('vect' and 'vector' for instance) will keep maxima being  
a nonelegant mess of poor implementations (which you must admit in  
many areas it is).
I would really like, somebody wrote such a document with maybe some  
general plan of maxima features to be added or reimplemented in a  
better way.

Of course I'm not only complaining but I will gladly contribute. I  
have very little experience with lisp and symbolic computations  
source code, but have some experience with numerical methods..

I will try to add linear fitting and also nonlinear fitting  
functionality to maxima via a nice full featured package. I'm also  
thinking of writing numerical ode solving package, but that's a much  
tougher task, so maybe in the future.

I have a working linear fitting function written in Maxima language  
and while writing it, many questions regarding adding functionality  
to Maxima.

1) What is the current naming convenction for new functions in Maxima?
It seems that new functions are named in a  
whole_words_separated_with_underscore. I personally much prefer the  
Mathematica's CapitalsForEachWord, which is easier to read, easier to  
type and also leaves more room for user defined variables or  
functions (which are typically small caps). I understand the need for  
backwards compatibility, but new conventions could be applied to new  
functionality easily. I'm glad that at least MATLAB's abrvtdfunnames  
aren't encouraged, but are sadly very common in maxima.

2) Are there any internal (lisp) naming conventions? Code reuse would  
benefit from this.

3) When should new functionality be implemented in Maxima language  
and when in lisp if for instance some problem can be solved in both?

4) Will there be possibility to call compiled numerical libraries  
(ATLAS ..) from lisp in the future? I know gcl is kinda the limiting  
factor right now..  I think f2cl conversions of numerical libraries  
should not be a part of maxima. Especially if the user has to call  
them with their fortran names. It's better to implement an  
unoptimised original algorithm in lisp by hand (and tailored to  
maxima's needs), since f2cl translations do not inherit the speed of  
original fortran porgrams, neither are they consistent with other  
maxima code or gain anything. So it's like using fortran without  
speed, why would you do that? Ideally we should use ATLAS for  
numerical linear algebra, so speed-wise maxima would be on par with  
MATLAB and mathematica. Any chance of this becoming reality?

5) List of lists vs matrix : transpose does not work on list of  
lists, therefore one has to convert list of lists to matrix,  
transpose and convert back. I don't see what functionality is gained  
by reprezenting matrices with a 'matrix. In case we use a special  
construct for matrices, we should at least make something of it. A  
matrix could carry some useful flags about it's contents: real/ 
complex, diagonal, symetric, numerical(all elements) ... which would  
then updated at any operation on matrix and used when solution or a  
system or eigenvalues are needed for choosing the best algorithm for  
the job (i.e. if all elements are numeric, the matrix is passed to  
ATLAS numerical libraries). Transpose should accept also a list of  
lists. I'd rather see, 'matrix didn't exist since it's more trouble  
for the user, than what it's worth.

6) There is no real SVD in Maxima? (don't suggest lapack dgesvd)  
Maybe it should be implemented..

6) What functionality should Maxima provide regarding function fitting?
I intend to write functions with similar calling structure as  
Mathematicas
Fit - linear fitting (via missing SVD)
FindFit - nonlinear fitting via levenberg-marq. minimisation (from  
Numerical Recipes)
Suggestions regarding implementation of fitting are welcome!


Here is a linear fitting function in maxima language (hey! it works!)  
and examples:
/****** MAXIMA *******/
Fit(data, functionlist, vars) := block(
    [numer:true,float:true,
    lambdalist, design_matrix,
    alpha_matrix, beta_vector, sol,
    vector_b],

lambdalist: map(
lambda([what], apply( 'lambda, what) ),
makelist( [vars,functionlist[function_index]] , function_index, 1,  
length(functionlist)) )
,
design_matrix:
makelist(
makelist(
apply(lambdalist[function_index],
      makelist(data[data_index][k], k, 1 , length(vars)) )
, function_index, 1, length(functionlist))
, data_index, 1, length(data))
,
vector_b:
makelist(
data[data_index][length(vars) + 1]
, data_index, 1, length(data))
,
design_matrix: apply('matrix, design_matrix),
alpha_matrix: transpose(design_matrix) . design_matrix,
beta_vector: transpose(design_matrix) . vector_b,
sol:  alpha_matrix^^-1 . beta_vector,
sol: subst( '"[", 'matrix , transpose(sol) )[1]
,
apply("+" , sol * functionlist )
) $

/* 2d example */
data2d: [ [1, 2, 2] , [ 3, 2, 5], [1, 5, 4], [3, 5, 5],[2,1,3], 
[-1,0,7]] $
fit2d: Fit( data2d, [1,x,y,x*y], [x,y] );
load(draw) $
draw3d(
color = red,
point_size = 3, point_type = 7,
points(data2d),
color = black,
explicit( fit2d , x, -1, 4, y, 0, 5)
)$

/* 1d example, 1000 points */
dejta: makelist( [float(i/50), sin(i/50)+random(0.2)] , i, 0, 1000),  
numer$
fit:Fit( dejta, [1, x, sin(x)], [x]);
draw2d(
color = blue,
points(dejta),
color = red,
explicit( fit, x, dejta[1][1]-1, dejta[length(dejta)][1]+1)
) $


/******** MAXIMA ********/

I would like Fit to use svd instead of ^^-1, since it's more robust,  
but looks like i have to implement svd first? How and where should  
svd be implemented in Maxima?


hny
?iga Lenar?i?


_______________________________________________
Maxima mailing list
Maxima at math.utexas.edu
http://www.math.utexas.edu/mailman/listinfo/maxima




--------------------------------------------------------------------------------


_______________________________________________
Maxima mailing list
Maxima at math.utexas.edu
http://www.math.utexas.edu/mailman/listinfo/maxima