Main Content

FunctionApproximation.Problem クラス

名前空間: FunctionApproximation

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

説明

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

作成

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

approximationProblem = FunctionApproximation.Problem(function) は、function で指定された関数、Math Function ブロック、またはルックアップ テーブルを近似する FunctionApproximation.Problem オブジェクトを作成します。

入力引数

すべて展開する

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

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

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

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

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

近似でサポートされる 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

ヒント

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

データ型: char | function_handle

プロパティ

すべて展開する

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

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

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

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

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

近似でサポートされる 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

ヒント

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

データ型: char | 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 オブジェクトとして指定します。

メソッド

solve関数の近似の問題に対する最適化された解の計算

コピーのセマンティクス

ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピーを参照してください。

すべて折りたたむ

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

problem = FunctionApproximation.Problem(@(x,y) sin(x)+cos(y))
problem = 

  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 で使用しているプロパティの値は既定の値です。

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

problem.InputLowerBounds = [0,0];
problem.InputUpperBounds = [2*pi, 2*pi]
problem = 

  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 オブジェクトを作成し、近似する数学関数を指定します。

problem = FunctionApproximation.Problem('log')
problem = 

  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 オブジェクトを作成し、近似する cfit オブジェクトを指定します。

ffun = fittype('exp1');
cfun = cfit(ffun,0.1,0.2);
problem = FunctionApproximation.Problem(cfun);
problem = 

  1×1 FunctionApproximation.Problem with properties:

    FunctionToApproximate: [1x1 cfit]
           NumberOfInputs: 1
               InputTypes: "numerictype('double')"
         InputLowerBounds: -Inf
         InputUpperBounds: Inf
               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 = 

  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 オブジェクトのプロパティはモデルから推定されます。

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.362407e-03 |
|   6 |            800 |        1 |         23 |              32 |           32 |             EvenSpacing |     7.812500e-03, 6.694662e-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.196693e-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.278687e-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.196693e-03 |
ans = 
  1x1 FunctionApproximation.LUTSolution with properties:

          ID: 11
    Feasible: "true"

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

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

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

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

制限

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

アルゴリズム

すべて展開する

バージョン履歴

R2018a で導入

すべて展開する