我不确定这个错误是什么(这就是我在标题中包含Ubuntu的原因,我不知道这是否与错误有关)。
我有一个简单的Octave脚本来练习数字集成,如下所示:
function y = f(x)
y = x.*sin(1./x) .* sqrt(abs(1-x));
endfunction
[q, ier, nfun, err] = quad("f", 0, 3)
我得到的错误是:
parse error near line 11 of file /home/ariel/Desktop/Ariel/Programming/Octave_Programming/SimpsonsRule.m
syntax error
>>> This is GNU Emacs 23.3.1 (x86_64-pc-linux-gnu, GTK+ Version 2.24.10)
^
我对此错误感到困惑,因为代码中没有第11行?
请注意:我非常擅长编程并尝试一次学习几种语言,所以原谅可能是一个非常简单的问题,我在网上搜索后无法找到解决方案。
提前致谢!
答案 0 :(得分:1)
看起来这是一个常见的" Hello,World!"运动类型;相同的代码和参数here。
你会得到一个" ABNORMAL RETURN...
"声明,因为您的下限(x=0
)位于函数(...sin(1./x)...
)中表达式的分母中。将下限设置为非常小的内容,例如.001
或上面链接中的内容,以避免不连续。
准确地将该代码(即使没有@Andy建议的1;
)放在一个文件中(称之为你想要的任何东西;你的文件名似乎是SimpsonsRule.m
),然后从中运行它命令行,
octave SimpsonsRule.m
给出@Andy报告的输出。将函数调用更改为
quad("f", 0.001, 3)
产量
q = 1.9819
ier = 0
nfun = 3297
err = 2.8021e-08
你几乎就在那里!
如果您对学习另一种语言感兴趣,请查看支持Octave's quad
function实施的Fortran源代码!我喜欢Fortran,但我主要是在开玩笑。
编辑:
你有选择。
function ...
到quad("f",0,3)
),这样就可以了。function ...
到quad("f",0,3)
)放入任何名称的文件(例如SimpsonsRule.m
)中,并从shell(bash
或其他任何名称调用它,而不是octave
提示)为octave SimpsonsRule.m
,它将起作用。 Octave(和MATLAB)有关于文件名和函数的约定。就像在其他编程语言中一样,Octave知道搜索某些目录和某些文件名以查找您调用的函数。当您调用Octave不知道的函数时(例如,如果您调用foo(1)
,它将在一组目录中搜索名为foo.m
的文件名(即,与函数同名) .m
扩展名。)
所以你的函数被称为f
。创建一个名为f.m
的文件,并准确放置f:
function y = f(x)
y = x.*sin(1./x) .* sqrt(abs(1-x));
endfunction
然后从您的shell启动octave
会话(由$
表示的提示),
$ octave
然后调用闪亮的新f
函数:
octave:1> f(2)
和Octave将报告
ans = 0.95885
现在运行quad
命令,该命令调用您的函数f
:
octave:2> [q, ier, nfun, err] = quad("f", 0.001, 1)
看看它的作用!
请记住,f
可能不是一个好的函数名称 - 它根本没有描述函数的作用,并且很可能与其他函数发生冲突,尽管它不是在这种情况下无害。
如果您认真学习Octave,我建议您从一些教程开始。
答案 1 :(得分:0)
你想在Emacs中使用GNU Octave吗?这可能会导致一些问题,因为带有fltk工具包的图是从readline重新绘制的(在Emacs模式下被禁用)。
另一点:如果您的脚本文件是SimpsonsRule.m,它必须以SimpsonsRule的函数声明开头,或者您添加一些虚拟语句,如1;:
1;
function y = f(x)
y = x.*sin(1./x) .* sqrt(abs(1-x));
endfunction
[q, ier, nfun, err] = quad("f", 0, 3)
运行此脚本时,八度音程返回
octave:1> SimpsonsRule
ABNORMAL RETURN FROM DQAGP
q = 1.9819
ier = 1
nfun = 5061
err = 1.1522e-07
和q对我来说很好看