如何将符号表达式从 Symbolic Package 转换为 Octave 函数?

使用 pkg install -forge symbolic 在 Octave 音阶上安装符号包后。在 Octave 上使用符号包我可以这样写:

octave> pkg load symbolic;
octave> a = sym( "a" );
octave> int ( a^2 + csc(a) )

这将导致:
ans = (sym)

   3
  a    log(cos(a) - 1)   log(cos(a) + 1)
  -- + --------------- - ---------------
  3           2                 2

但是如何将上面的这个 Integral (int(1)) 符号结果变成下面这样的有值(value)的函数呢?
function x = f( x )

    x = x^3/3 + log( cos(x) - 1 )/2 - log( cos(x) + 1 )/2

end

f(3)

# Which evaluates to: 11.6463 +  1.5708i

我想从 int ( a^2 + csc(a) ) 获取符号结果,并调用 result(3),在 3 处计算它,即从符号表达式积分 a^2 + csc(a) 返回数值 11.6463 + 1.5708i。基本上,如何使用符号表达式作为数值可评估的表达式?它是 Matlab 的 as this other question

引用:
  • http://octave.sourceforge.net/symbolic/index.html
  • How do I declare a symbolic matrix in Octave?
  • Octave symbolic expression
  • Julia: how do I convert a symbolic expression to a function?
  • What is symbolic computation?
  • 最佳答案

    您可以使用 pretty

    syms x;
    x = x^3/3 + log( cos(x) - 1 )/2 - log( cos(x) + 1 )/2;
    pretty(x)
    

    这给出了:
                                         3
    log(cos(x) - 1)   log(cos(x) + 1)   x
    --------------- - --------------- + --
           2                 2           3
    

    更新(由于问题已编辑):

    使这个功能:
    function x = f(y)
        syms a;
        f(a) = int ( a^2 + csc(a) );
        x = double(f(y));
    end
    

    现在,当您使用 f(3) 调用它时,它会给出:
    ans =
      11.6463 + 1.5708i
    

    关于matlab - 如何将符号表达式从 Symbolic Package 转换为 Octave 函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40876211/

    10-12 04:43