如何从符号包中将符号表达式转换为 Octave 函数?
How to convert a symbolic expression to a Octave function from the Symbolic Package?
如何从符号包中将符号表达式转换为 Octave 函数?
使用 pkg install -forge symbolic
在 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)) 符号结果变成下面这样一个有价值的函数呢?
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 处计算它,即 return 数值 11.6463 + 1.5708i,来自符号表达式积分a^2 + csc(a)
。基本上,如何使用符号表达式作为数值可评估的表达式?它是 as for Matlab.
参考文献:
- 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
您似乎通过链接 回答了自己的问题。
Octave 有一个 matlabFunction
的实现,它是符号工具箱中 function_handle
的包装器。
>> pkg load symbolic;
>> syms x;
>> y = x^3/3 + log( cos(x) - 1 )/2 - log( cos(x) + 1 )/2
y = (sym)
3
x log(cos(x) - 1) log(cos(x) + 1)
-- + --------------- - ---------------
3 2 2
>> testfun = matlabFunction(y)
testfun =
@(x) x .^ 3 / 3 + log (cos (x) - 1) / 2 - log (cos (x) + 1) / 2
testfun(3)
>> testfun(3)
ans = 11.6463 + 1.5708i
>> testfun([3:1:5]')
ans =
11.646 + 1.571i
22.115 + 1.571i
41.375 + 1.571i
>> testfun2 = matlabFunction(int ( x^2 + csc(x) ))
testfun2 =
@(x) x .^ 3 / 3 + log (cos (x) - 1) / 2 - log (cos (x) + 1) / 2
>> testfun2(3)
ans = 11.6463 + 1.5708i
>> testfun2([3:1:5]')
ans =
11.646 + 1.571i
22.115 + 1.571i
41.375 + 1.571i
我敢肯定还有其他方法可以实现这一点,但它可以让您避免在函数中对方程式进行硬编码。
如何从符号包中将符号表达式转换为 Octave 函数?
使用 pkg install -forge symbolic
在 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)) 符号结果变成下面这样一个有价值的函数呢?
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 处计算它,即 return 数值 11.6463 + 1.5708i,来自符号表达式积分a^2 + csc(a)
。基本上,如何使用符号表达式作为数值可评估的表达式?它是 as
参考文献:
- 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
您似乎通过链接
Octave 有一个 matlabFunction
的实现,它是符号工具箱中 function_handle
的包装器。
>> pkg load symbolic;
>> syms x;
>> y = x^3/3 + log( cos(x) - 1 )/2 - log( cos(x) + 1 )/2
y = (sym)
3
x log(cos(x) - 1) log(cos(x) + 1)
-- + --------------- - ---------------
3 2 2
>> testfun = matlabFunction(y)
testfun =
@(x) x .^ 3 / 3 + log (cos (x) - 1) / 2 - log (cos (x) + 1) / 2
testfun(3)
>> testfun(3)
ans = 11.6463 + 1.5708i
>> testfun([3:1:5]')
ans =
11.646 + 1.571i
22.115 + 1.571i
41.375 + 1.571i
>> testfun2 = matlabFunction(int ( x^2 + csc(x) ))
testfun2 =
@(x) x .^ 3 / 3 + log (cos (x) - 1) / 2 - log (cos (x) + 1) / 2
>> testfun2(3)
ans = 11.6463 + 1.5708i
>> testfun2([3:1:5]')
ans =
11.646 + 1.571i
22.115 + 1.571i
41.375 + 1.571i
我敢肯定还有其他方法可以实现这一点,但它可以让您避免在函数中对方程式进行硬编码。