解析在Ubuntu上编译Octave脚本的错误

时间:2014-10-07 12:29:53

标签: ubuntu octave

我不确定这个错误是什么(这就是我在标题中包含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行?

请注意:我非常擅长编程并尝试一次学习几种语言,所以原谅可能是一个非常简单的问题,我在网上搜索后无法找到解决方案。

提前致谢!

2 个答案:

答案 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,但我主要是在开玩笑。


编辑:

你有选择。

  1. 如果您使用Octave命令行,请将这些行完全复制并粘贴到命令行中(function ...quad("f",0,3)),这样就可以了。
  2. 将完全相同的内容(function ...quad("f",0,3))放入任何名称的文件(例如SimpsonsRule.m)中,并从shell(bash或其他任何名称调用它,而不是octave提示)为octave SimpsonsRule.m,它将起作用。
  3. 或者更复杂的解决方案:将函数定义(仅)放在文件中,然后单独调用该函数。更多内容如下。
  4. 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对我来说很好看