miércoles, 7 de marzo de 2012

Llamar a Maxima desde Octave

Calling Maxima from Octave.

El siguiente script define una función en Octave que envía una lista de comandos a Maxima y devuelve un string con la última salida de Maxima.

No es muy elegante, y necesita algo de trabajo, pero cumple su función.

The following script defines a function in Octave that sends a list of commands to Maxima and returns a string with the last departure from Maxima.

It's not elegant, and needs some work, but it does its job.



--- maxima.m ---
## -*- texinfo -*-
## @deftypefn  {Function File} {} maxima (@var{comando})
##
## Ejecuta uno o mas comandos en GNU-Maxima y devuelve un string con el resultado del ultimo comando.
## GNU-Maxima puede encontrarse en http://maxima.sourceforge.net/
## Executes one or more commands in GNU-Maxima and returns a string containing the result of last command.
## GNU-Maxima can be found at http://maxima.sourceforge.net/
##
## @var{comando} es un string conteniendo el o los comandos a ejecutar en GNU-Maxima. Estos comandos deben separarse mediante @samp{";"}.
## @var{comando} is a string containing the command(s) to run on GNU-Maxima. These commands must be separated by @samp{";"}.
##
## Ejemplos/Examples:
##
## @example
## @group
## maxima("1+1;laplace(%,t,s)")
##    @result{} 2/s
## @end group
## @end example
##
##
## @seealso{ilaplace, maxima}
## @end deftypefn

## Author: Alejandro Regodesebes -
## v.1.0.1 - Copyright (C) 2012 Alejandro Regodesebes

#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see .

function resultado = maxima (comando)
    if ((nargin == 1) && ischar(comando))
        comando = strtrim(comando);
        if (substr(comando, -1) != ";")
            comando = [comando,';'];
        endif
        #{ Llama a Maxima en modo silencioso (-q), para procesar por lotes una lista de argumentos (--batch-string="..."), y le envía como argumentos la orden de mostrar la salida en una sola línea (display2d:false;) más el comando deseado. La salida de Maxima se almacena en el string "salida":#}
        [nn,salida] = system(['maxima -q --batch-string="display2d:false;',comando,'"']);
        #{ Remueve los espacios al principio y al final (strtrim) de la parte del string "salida" (substr) que comienza 5 caracteres después (+5) del primer carácter de del último "(%o" (rindex):#}
        resultado = strtrim(substr(salida,rindex(salida,"(%o")+5));
        #{ Elimina todos los signos "%":#}
        resultado(resultado == "%") = "";
    else
        printf("ERROR: el argumento debe ser un string\n");
        print_usage ();
    endif
endfunction


--- fin maxima.m ---

No hay comentarios:

Publicar un comentario