如何从 Octave / Matlab 执行多行 Maxima 代码
How to execute multi-line Maxima code from Octave / Matlab
我可以像这样从 Octave 执行 Maxima 代码并且它有效:
mm=maxima("diff(a*x^3-b*x^2+x+d,x,1)")
但是如何执行多行命令?
下面的示例代码适用于 Maxima
kill(all)$
numer:true$
ratprint:false$
angle_in_bits:3779$
total_fs:18136$
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$
round(s);
[round(angle_deg)=75]
当我在 Octave 中尝试下面的代码时,出现语法错误
mm=maxima("kill(all)$
numer:true$
ratprint:false$
angle_in_bits:3779$
total_fs:18136$
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$
round(s);")
我遇到的错误:
>>> mm=maxima("kill(all)$
numer:true$
ratprint:false$
angle_in_bits:3779$
total_fs:18136$
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$
round(s);")
error: unterminated character string constant
parse error:
syntax error
>>> mm=maxima("kill(all)$
^
>>> _ide_reload_variables_list( whos() );
error: 'numer' undefined near line 1 column 1
error: invalid base value in colon expression
error: 'ratprint' undefined near line 1 column 1
error: invalid base value in colon expression
parse error:
syntax error
>>> angle_in_bits:3779$
^
parse error:
syntax error
>>> total_fs:18136$
^
parse error:
syntax error
>>> s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$
^
error: unterminated character string constant
parse error:
syntax error
>>> round(s);")
^
我假设您正在使用 QtOctave,我是通过谷歌搜索您的错误消息“_ide_reload_variables_list( whos() );”猜测的
如果不是这样,以下 none 可能适用于您的问题。
在提示符下输入 help maxima
指向一个文件 /usr/share/qtoctave/scripts_octave/maxima.m
内容如下:
function result=maxima(command)
in="";
in=sprintf("echo \"string(%s);\"|maxima --very-quiet", command);
[status,result]=system(in);
%if(status!=0) result=""; endif;
result = deblank ( strjust ( strrep (result, "%", "") ,"left") );
endfunction
这告诉我 maxima 是以一种非常特殊的方式通过 Octave 的函数 system
调用的,不允许在 maxima 中使用多个命令。
按以下方式修改 in
的赋值将允许您现在使用命令元胞数组 maxima({command_1,command_2})
调用函数 maxima
,其中 command_i
是字符串.
in=['echo ', sprintf('\"%s;\" ',command{:}), '| maxima --very-quiet'];
请注意函数 system
仍然 returns 只有 一个 输出,即由 maxima 发送到标准输出的那个。
This 您可能也会感兴趣,因为它描述了 Octave 与子进程交互的方法。
我不确定这是否有帮助,因为我认为我提供的修改只是非常肤浅的用途,但如果你告诉它,它可能会帮助你更好地理解八度在做什么 maxima(something)
。它帮助了我。
最后但并非最不重要的一点,据我所知,在八度音阶(或 matlab)和最大值之间没有 真实 接口。如果我错了,我希望有人能纠正我。
感谢 Fred Senese 和 rayryeng 的协助。
我知道有人可能需要这个,所以这里有一些示例代码。这段代码允许您从 Octave 直接访问 maxima 的符号求解器(允许您执行多行 maxima 命令)。由于 Octave 没有很好的符号求解器,但这对以后的其他人来说会派上用场。
mm=maxima("(kill(all), numer:true, ratprint:false, angle_in_bits:3779, total_fs:18136, s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg),(s))")
%mm = '[angle_deg = 75.01323334803705]';
[si ei xt mt] = regexp(mm, '(\d)*(\.)?(\d)*');
number = str2num(mt{1})
>>>number = 75.013
我的 Linux 笔记本电脑 (Ubuntu) 中有 Octave 和 Maxima。 Octave 中存在系统函数,可用于运行 终端命令。
在终端中可以使用管道调用最大值函数
(将 quit(); 添加到 maxima 命令的末尾):
$回声“因子(12345);退出();” |最大值
千里马 5.41.0 http://maxima.sourceforge.net
使用 Lisp GNU Common Lisp (GCL) GCL 2.6.12
在 GNU Public 许可证下分发。请参阅文件复制。
献给 William Schelter 的记忆。
函数 bug_report() 提供错误报告信息。
(%i1) (%o1) 3 5 823
$
在 Octave 系统中-commad 在“-marks 中使用双“”来获得“:
[status,output]=system("echo ""factor(565);quit();""|maxima")
status = 0
output =
Maxima 5.41.0 http://maxima.sourceforge.net
using Lisp GNU Common Lisp (GCL) GCL 2.6.12
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1) (%o1) 5 113
可以从 Octave 的输出字符串中删除额外的 txt。使用 Maxima 的属性 运行 它是来自脚本文件的命令,并且可以在 Octave 中创建脚本。
Br。朱哈 (juhap.karjalainen@mail.suomi.net)
我可以像这样从 Octave 执行 Maxima 代码并且它有效:
mm=maxima("diff(a*x^3-b*x^2+x+d,x,1)")
但是如何执行多行命令?
下面的示例代码适用于 Maxima
kill(all)$
numer:true$
ratprint:false$
angle_in_bits:3779$
total_fs:18136$
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$
round(s);
[round(angle_deg)=75]
当我在 Octave 中尝试下面的代码时,出现语法错误
mm=maxima("kill(all)$
numer:true$
ratprint:false$
angle_in_bits:3779$
total_fs:18136$
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$
round(s);")
我遇到的错误:
>>> mm=maxima("kill(all)$
numer:true$
ratprint:false$
angle_in_bits:3779$
total_fs:18136$
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$
round(s);")
error: unterminated character string constant
parse error:
syntax error
>>> mm=maxima("kill(all)$
^
>>> _ide_reload_variables_list( whos() );
error: 'numer' undefined near line 1 column 1
error: invalid base value in colon expression
error: 'ratprint' undefined near line 1 column 1
error: invalid base value in colon expression
parse error:
syntax error
>>> angle_in_bits:3779$
^
parse error:
syntax error
>>> total_fs:18136$
^
parse error:
syntax error
>>> s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$
^
error: unterminated character string constant
parse error:
syntax error
>>> round(s);")
^
我假设您正在使用 QtOctave,我是通过谷歌搜索您的错误消息“_ide_reload_variables_list( whos() );”猜测的 如果不是这样,以下 none 可能适用于您的问题。
在提示符下输入 help maxima
指向一个文件 /usr/share/qtoctave/scripts_octave/maxima.m
内容如下:
function result=maxima(command)
in="";
in=sprintf("echo \"string(%s);\"|maxima --very-quiet", command);
[status,result]=system(in);
%if(status!=0) result=""; endif;
result = deblank ( strjust ( strrep (result, "%", "") ,"left") );
endfunction
这告诉我 maxima 是以一种非常特殊的方式通过 Octave 的函数 system
调用的,不允许在 maxima 中使用多个命令。
按以下方式修改 in
的赋值将允许您现在使用命令元胞数组 maxima({command_1,command_2})
调用函数 maxima
,其中 command_i
是字符串.
in=['echo ', sprintf('\"%s;\" ',command{:}), '| maxima --very-quiet'];
请注意函数 system
仍然 returns 只有 一个 输出,即由 maxima 发送到标准输出的那个。
This 您可能也会感兴趣,因为它描述了 Octave 与子进程交互的方法。
我不确定这是否有帮助,因为我认为我提供的修改只是非常肤浅的用途,但如果你告诉它,它可能会帮助你更好地理解八度在做什么 maxima(something)
。它帮助了我。
最后但并非最不重要的一点,据我所知,在八度音阶(或 matlab)和最大值之间没有 真实 接口。如果我错了,我希望有人能纠正我。
感谢 Fred Senese 和 rayryeng 的协助。
我知道有人可能需要这个,所以这里有一些示例代码。这段代码允许您从 Octave 直接访问 maxima 的符号求解器(允许您执行多行 maxima 命令)。由于 Octave 没有很好的符号求解器,但这对以后的其他人来说会派上用场。
mm=maxima("(kill(all), numer:true, ratprint:false, angle_in_bits:3779, total_fs:18136, s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg),(s))")
%mm = '[angle_deg = 75.01323334803705]';
[si ei xt mt] = regexp(mm, '(\d)*(\.)?(\d)*');
number = str2num(mt{1})
>>>number = 75.013
我的 Linux 笔记本电脑 (Ubuntu) 中有 Octave 和 Maxima。 Octave 中存在系统函数,可用于运行 终端命令。
在终端中可以使用管道调用最大值函数 (将 quit(); 添加到 maxima 命令的末尾):
$回声“因子(12345);退出();” |最大值
千里马 5.41.0 http://maxima.sourceforge.net 使用 Lisp GNU Common Lisp (GCL) GCL 2.6.12 在 GNU Public 许可证下分发。请参阅文件复制。 献给 William Schelter 的记忆。 函数 bug_report() 提供错误报告信息。 (%i1) (%o1) 3 5 823 $
在 Octave 系统中-commad 在“-marks 中使用双“”来获得“:
[status,output]=system("echo ""factor(565);quit();""|maxima") status = 0 output = Maxima 5.41.0 http://maxima.sourceforge.net using Lisp GNU Common Lisp (GCL) GCL 2.6.12 Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. The function bug_report() provides bug reporting information. (%i1) (%o1) 5 113
可以从 Octave 的输出字符串中删除额外的 txt。使用 Maxima 的属性 运行 它是来自脚本文件的命令,并且可以在 Octave 中创建脚本。
Br。朱哈 (juhap.karjalainen@mail.suomi.net)