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.
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