3

シンボリックパッケージからシンボリック式をオクターブ関数に変換する方法は?

を使用してオクターブにシンボリックパッケージをインストールした後pkg install -forge symbolic。オクターブでシンボリック パッケージを使用すると、次のように書くことができます。

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 で計算したい、つまり、シンボリック式 Integral から数値 11.6463 + 1.5708i を返しますa^2 + csc(a)。基本的に、シンボリック式を数値的に評価可能な式として使用するにはどうすればよいですか? これはMatlabのこの他の質問です。

参考文献:

  1. http://octave.sourceforge.net/symbolic/index.html
  2. Octave でシンボリック行列を宣言するにはどうすればよいですか?
  3. オクターブ記号式
  4. Julia: シンボリック式を関数に変換するにはどうすればよいですか?
  5. 記号計算とは
4

2 に答える 2

4

使用できます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
于 2016-11-29T21:41:37.167 に答える
2

Matlab に関する他の質問にリンクして、自分の質問に答えたようです。

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

これを実装する方法は他にもあると思いますが、関数内で方程式をハードコーディングすることを回避できる場合があります。

于 2016-12-01T20:07:46.757 に答える