Main Content

シンボリック式からの C コードまたは Fortran コードの生成

関数 ccodefortran を使って、シンボリック式から C または Fortran コード フラグメントや、コード フラグメントを含むファイルを生成できます。これらのコード フラグメントは、シンボリック式の変数に数値を代入する場合と同じ方法で数値を計算します。

シンボリック式 g からコードを生成するには、ccode(g) または fortran(g) を入力します。

以下に例を示します。

syms x y
z = 30*x^4/(x*y^2 + 10) - x^3*(y^2 + 1)^2;
fortran(z)
ans =
    '      t0 = (x**4*3.0D+1)/(x*y**2+1.0D+1)-x**3*(y**2+1.0D0)**2'
ccode(z)
ans =
    '  t0 = ((x*x*x*x)*3.0E+1)/(x*(y*y)+1.0E+1)-(x*x*x)*pow(y*y+1.0,2.0);'

コードを含むファイルを生成するには、ccode(g,'file','filename') または fortran(g,'file','filename') を入力します。上記の例で、

fortran(z, 'file', 'fortrantest')

は、現在のフォルダーに fortrantest というファイルを生成します。fortrantest には、以下の行が記述されています。

      t2 = y**2
      t0 = (x**4*3.0D+1)/(t2*x+1.0D+1)-x**3*(t2+1.0D0)**2

同様に以下のコマンドを入力します。

ccode(z,'file','ccodetest')

以下の行から成る ccodetest というファイルが生成されます。

  t2 = y*y;
  t0 = ((x*x*x*x)*3.0E+1)/(t2*x+1.0E+1)-(x*x*x)*pow(t2+1.0,2.0);

ccodefortran は、多くの中間変数を生成します。これは、"最適化された" コードと呼ばれます。MATLAB® によって生成される中間変数は、小文字の t に自動生成される番号を付けたもので、たとえば t2 のようになります。中間変数は、中間式 (fortrantest および ccodetestt2 など) を再利用するため、結果のコードが効率的になります。また、式が短くなるため、コードが読みやすくなります。