メインコンテンツ

FunctionApproximation.Problem クラス

名前空間: FunctionApproximation

近似する関数または最適化するルックアップ テーブルを定義するオブジェクト

説明

FunctionApproximation.Problem オブジェクトは、ルックアップ テーブルで近似する数学関数、関数ハンドル、cfit オブジェクト、または Simulink® ブロック、あるいは最適化する Lookup Table ブロックを定義します。問題を定義した後、solve メソッドを使用して、近似を含む FunctionApproximation.LUTSolution オブジェクトを生成します。

作成

problem = FunctionApproximation.Problem() は、既定のプロパティ値で FunctionApproximation.Problem オブジェクトを作成します。function 入力が指定されていない場合、FunctionToApproximate プロパティは 'sin' に設定されます。

problem = FunctionApproximation.Problem(function) は、function で指定された、数学関数、関数ハンドル、cfit オブジェクト、または Simulink ブロックを近似するための FunctionApproximation.Problem オブジェクト、あるいは最適化する Lookup Table ブロックを作成します。

入力引数

すべて展開する

近似する関数、オブジェクト、またはブロック、あるいは最適化する Lookup Table ブロック。数学関数、関数ハンドル、cfit (Curve Fitting Toolbox) オブジェクト、Simulink ブロック、またはサブシステム、あるいはいずれかの Lookup Table ブロック (1-D Lookup Tablen-D Lookup Table など) として指定します。

数学関数、関数ハンドル、cfit オブジェクト、または Simulink ブロックを指定した場合、solve メソッドは入力関数またはブロックのルックアップ テーブルによる近似を生成します。

いずれかの Lookup Table ブロックを指定した場合、solve メソッドは最適化されたルックアップ テーブルを生成します。

近似でサポートされる MATLAB® 数学関数は次のとおりです。

  • 1./x

  • 10.^x

  • 2.^x

  • acos

  • acosh

  • asin

  • asinh

  • atan

  • atan2

  • atanh

  • cos

  • cosh

  • exp

  • log

  • log10

  • log2

  • sin

  • sinh

  • sqrt

  • tan

  • tanh

  • x.^2

関数ハンドルは MATLAB 検索パスにないと近似は失敗します。

ヒント

ルックアップ テーブルによる近似の生成プロセスは、サブシステムよりも関数ハンドルの方が迅速です。サブシステムを関数ハンドルで表すことができる場合は、関数ハンドルの方が迅速に処理できます。

cfit オブジェクトを指定する場合は、関数 fittype (Curve Fitting Toolbox) を使用して近似するライブラリ モデルを指定します。ライブラリ モデルのリストについては、曲線近似または曲面近似のライブラリ モデルのリスト (Curve Fitting Toolbox)を参照してください。

データ型: char | string | function_handle

プロパティ

すべて展開する

近似する関数、オブジェクト、またはブロック、あるいは最適化する Lookup Table ブロック。数学関数、関数ハンドル、cfit (Curve Fitting Toolbox) オブジェクト、Simulink ブロック、またはサブシステム、あるいはいずれかの Lookup Table ブロック (1-D Lookup Tablen-D Lookup Table など) として指定します。

数学関数、関数ハンドル、cfit オブジェクト、または Simulink ブロックを指定した場合、solve メソッドは入力関数またはブロックのルックアップ テーブルによる近似を生成します。

いずれかの Lookup Table ブロックを指定した場合、solve メソッドは最適化されたルックアップ テーブルを生成します。

近似でサポートされる MATLAB 数学関数は次のとおりです。

  • 1./x

  • 10.^x

  • 2.^x

  • acos

  • acosh

  • asin

  • asinh

  • atan

  • atan2

  • atanh

  • cos

  • cosh

  • exp

  • log

  • log10

  • log2

  • sin

  • sinh

  • sqrt

  • tan

  • tanh

  • x.^2

関数ハンドルは MATLAB 検索パスにないと近似は失敗します。

ヒント

ルックアップ テーブルによる近似の生成プロセスは、サブシステムよりも関数ハンドルの方が迅速です。サブシステムを関数ハンドルで表すことができる場合は、関数ハンドルの方が迅速に処理できます。

cfit オブジェクトを指定する場合は、関数 fittype (Curve Fitting Toolbox) を使用して近似するライブラリ モデルを指定します。ライブラリ モデルのリストについては、曲線近似または曲面近似のライブラリ モデルのリスト (Curve Fitting Toolbox)を参照してください。

データ型: char | string | function_handle

近似される関数に対する入力の数。このプロパティは FunctionToApproximate プロパティから継承されるため、書き込み可能なプロパティではありません。

Direct Lookup Table を生成している場合、近似する関数の入力は 2 つ以下です。

データ型: double

近似される関数に対する入力の目的のデータ型。numerictypeSimulink.Numerictypenumerictype オブジェクトのベクトル、または Simulink.Numerictype オブジェクトのベクトルとして指定します。指定する InputTypes の数は NumberOfInputs と一致しなければなりません。

例: problem.InputTypes = ["numerictype(1,16,13)", "numerictype(1,16,10)"];

近似する関数に対する入力の範囲の下限。スカラーまたはベクトルとして指定します。inf を指定すると、近似で使用される InputLowerBoundsInputTypes プロパティから導出されます。InputLowerBounds の次元は NumberOfInputs と一致しなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

近似する関数に対する入力の範囲の上限。スカラーまたはベクトルとして指定します。inf を指定すると、近似で使用される InputUpperBoundsInputTypes プロパティから導出されます。InputUpperBounds の次元は NumberOfInputs と一致しなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

関数の近似による出力の目的のデータ型。numerictype または Simulink.Numerictype オブジェクトとして指定します。たとえば、出力が語長が 16 ビットで小数部の長さが最高精度の符号付き固定小数点データ型になるように指定するには、OutputType プロパティを "numerictype(1,16)" に設定します。

例: problem.OutputType = "numerictype(1,16)";

近似で使用する追加のオプションと制約。FunctionApproximation.Options オブジェクトとして指定します。

メソッド

すべて展開する

すべて折りたたむ

FunctionApproximation.Problem オブジェクトを作成し、近似する数学関数を指定します。

problem = FunctionApproximation.Problem('log')
problem = 
  1×1 FunctionApproximation.Problem with properties:

    FunctionToApproximate: @(x)log(x)
           NumberOfInputs: 1
               InputTypes: "numerictype(1,16,10)"
         InputLowerBounds: 0.6250
         InputUpperBounds: 15.6250
               OutputType: "numerictype(1,16,13)"
                  Options: [1×1 FunctionApproximation.Options]

FunctionApproximation.Problem オブジェクトを作成し、近似する関数ハンドルを指定します。

problem = FunctionApproximation.Problem(@(x,y) sin(x)+cos(y))
problem = 
  1×1 FunctionApproximation.Problem with properties:

    FunctionToApproximate: @(x,y)sin(x)+cos(y)
           NumberOfInputs: 2
               InputTypes: ["numerictype('double')"    "numerictype('double')"]
         InputLowerBounds: [-Inf -Inf]
         InputUpperBounds: [Inf Inf]
               OutputType: "numerictype('double')"
                  Options: [1×1 FunctionApproximation.Options]

この FunctionApproximation.Problem オブジェクト problem で使用しているプロパティの値は既定の値です。

関数入力の範囲を 02*pi に設定します。

problem.InputLowerBounds = [0,0];
problem.InputUpperBounds = [2*pi, 2*pi]
problem = 
  1×1 FunctionApproximation.Problem with properties:

    FunctionToApproximate: @(x,y)sin(x)+cos(y)
           NumberOfInputs: 2
               InputTypes: ["numerictype('double')"    "numerictype('double')"]
         InputLowerBounds: [0 0]
         InputUpperBounds: [6.2832 6.2832]
               OutputType: "numerictype('double')"
                  Options: [1×1 FunctionApproximation.Options]

FunctionApproximation.Problem オブジェクトを作成して既存のルックアップ テーブルを最適化します。

openExample('simulink_automotive/ModelingAFaultTolerantFuelControlSystemExample',...
    'supportingfile','sldemo_fuelsys');
problem = FunctionApproximation.Problem('sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant')
problem = 

  1×1 FunctionApproximation.Problem with properties:

    FunctionToApproximate: 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant'
           NumberOfInputs: 2
               InputTypes: ["numerictype('single')"    "numerictype('single')"]
         InputLowerBounds: [50 0.0500]
         InputUpperBounds: [1000 0.9500]
               OutputType: "numerictype('single')"
                  Options: [1×1 FunctionApproximation.Options]

この problem オブジェクトのプロパティはモデルから推定されます。

FunctionApproximation.Problem オブジェクトを作成し、近似する cfit オブジェクトを指定します。

ffun = fittype('exp1');
cfun = cfit(ffun,0.1,0.2);
problem = FunctionApproximation.Problem(cfun)
problem = 
  1×1 FunctionApproximation.Problem with properties:

    FunctionToApproximate: [1×1 cfit]
           NumberOfInputs: 1
               InputTypes: "numerictype('double')"
         InputLowerBounds: -Inf
         InputUpperBounds: Inf
               OutputType: "numerictype('double')"
                  Options: [1×1 FunctionApproximation.Options]

R2023a 以降

この例では、関数近似問題に対する純粋な浮動小数点の解を求める方法を示します。

近似する関数を指定する FunctionApproximation.Problem オブジェクトを作成します。

problem = FunctionApproximation.Problem("sin");

入力と出力の型を浮動小数点データ型に指定します。

problem.InputTypes = [numerictype('Single')];
problem.OutputType = [numerictype('Single')];

FunctionApproximation.Options オブジェクトを使用して、ルックアップ テーブルによる近似で使用できる語長を指定します。固定小数点の解を求めるには、単精度または倍精度のデータ型に対応する語長を指定します。

problem.Options.WordLengths = 32;

solve メソッドを使用して関数の近似を生成します。

solve(problem)
Searching for fixed-point solutions.

|  ID |  Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification |             Error(Max,Current) | 
|   0 |            128 |        0 |          2 |              32 |           32 |             EvenSpacing |     7.812500e-03, 1.000000e+00 |
|   1 |           1568 |        1 |         47 |              32 |           32 |             EvenSpacing |     7.812500e-03, 2.331257e-03 |
|   2 |           1536 |        1 |         46 |              32 |           32 |             EvenSpacing |     7.812500e-03, 2.434479e-03 |
|   3 |           1216 |        1 |         36 |              32 |           32 |             EvenSpacing |     7.812500e-03, 4.021697e-03 |
|   4 |           1184 |        1 |         35 |              32 |           32 |             EvenSpacing |     7.812500e-03, 4.265845e-03 |
|   5 |            832 |        1 |         24 |              32 |           32 |             EvenSpacing |     7.812500e-03, 6.421237e-03 |
|   6 |            800 |        1 |         23 |              32 |           32 |             EvenSpacing |     7.812500e-03, 7.061585e-03 |
|   7 |            448 |        0 |         12 |              32 |           32 |             EvenSpacing |     7.812500e-03, 4.009663e-02 |
|   8 |            608 |        0 |         17 |              32 |           32 |             EvenSpacing |     7.812500e-03, 1.884634e-02 |
|   9 |            704 |        0 |         20 |              32 |           32 |             EvenSpacing |     7.812500e-03, 8.071933e-03 |
|  10 |            736 |        0 |         21 |              32 |           32 |             EvenSpacing |     7.812500e-03, 8.607101e-03 |
|  11 |            768 |        1 |         22 |              32 |           32 |             EvenSpacing |     7.812500e-03, 7.243455e-03 |
|  12 |            128 |        0 |          2 |              32 |           32 |         EvenPow2Spacing |     7.812500e-03, 1.315148e+00 |
|  13 |           1152 |        1 |         18 |              32 |           32 |          ExplicitValues |     7.812500e-03, 7.812380e-03 |
|  14 |           1024 |        0 |         16 |              32 |           32 |          ExplicitValues |     7.812500e-03, 1.202238e-02 |
|  15 |           1152 |        0 |         18 |              32 |           32 |          ExplicitValues |     7.812500e-03, 1.068657e-02 |
|  16 |           1280 |        1 |         20 |              32 |           32 |          ExplicitValues |     7.812500e-03, 7.309205e-03 |
Searching for floating-point solutions.

|  17 |           1536 |        1 |         46 |              32 |           32 |             EvenSpacing |     7.812500e-03, 2.434489e-03 |
|  18 |            128 |        0 |          2 |              32 |           32 |         EvenPow2Spacing |     7.812500e-03, 1.315148e+00 |
|  19 |           1152 |        1 |         18 |              32 |           32 |          ExplicitValues |     7.812500e-03, 7.812365e-03 |
|  20 |           1024 |        0 |         16 |              32 |           32 |          ExplicitValues |     7.812500e-03, 1.202232e-02 |

Best Solution
|  ID |  Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification |             Error(Max,Current) |
|  11 |            768 |        1 |         22 |              32 |           32 |             EvenSpacing |     7.812500e-03, 7.243455e-03 |
ans = 
  1×1 FunctionApproximation.LUTSolution with properties:

          ID: 11
    Feasible: "true"

solve メソッドは、すべての実行可能解を返します。テーブルでは、最初に固定小数点の解が返され、その後に浮動小数点の解が返されます。ルックアップ テーブル オプティマイザーは、次のすべての条件を満たす場合、浮動小数点の解を最適解として選択します。

  • 浮動小数点の解に必要なメモリが固定小数点の解と等しいかそれよりも少ない。

  • FunctionApproximation.Problem オブジェクトの InputTypes プロパティと OutputType プロパティの両方で浮動小数点データ型が指定されている。

  • FunctionApproximation.Options オブジェクトの WordLengths プロパティに単精度または倍精度のデータ型に対応する語長が含まれている。

制限

  • ルックアップ テーブル オブジェクトとブレークポイント オブジェクトは、モデル マスク ワークスペースではサポートされていません。

アルゴリズム

すべて展開する

バージョン履歴

R2018a で導入

すべて展開する