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 Table や n-D Lookup Table など) として指定します。
数学関数、関数ハンドル、cfit オブジェクト、または Simulink ブロックを指定した場合、solve メソッドは入力関数またはブロックのルックアップ テーブルによる近似を生成します。
いずれかの Lookup Table ブロックを指定した場合、solve メソッドは最適化されたルックアップ テーブルを生成します。
近似でサポートされる MATLAB® 数学関数は次のとおりです。
1./x10.^x2.^xacosacoshasinasinhatanatan2atanhcoscoshexploglog10log2sinsinhsqrttantanhx.^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 Table や n-D Lookup Table など) として指定します。
数学関数、関数ハンドル、cfit オブジェクト、または Simulink ブロックを指定した場合、solve メソッドは入力関数またはブロックのルックアップ テーブルによる近似を生成します。
いずれかの Lookup Table ブロックを指定した場合、solve メソッドは最適化されたルックアップ テーブルを生成します。
近似でサポートされる MATLAB 数学関数は次のとおりです。
1./x10.^x2.^xacosacoshasinasinhatanatan2atanhcoscoshexploglog10log2sinsinhsqrttantanhx.^2
関数ハンドルは MATLAB 検索パスにないと近似は失敗します。
ヒント
ルックアップ テーブルによる近似の生成プロセスは、サブシステムよりも関数ハンドルの方が迅速です。サブシステムを関数ハンドルで表すことができる場合は、関数ハンドルの方が迅速に処理できます。
cfit オブジェクトを指定する場合は、関数 fittype (Curve Fitting Toolbox) を使用して近似するライブラリ モデルを指定します。ライブラリ モデルのリストについては、曲線近似または曲面近似のライブラリ モデルのリスト (Curve Fitting Toolbox)を参照してください。
データ型: char | string | function_handle
近似される関数に対する入力の数。このプロパティは FunctionToApproximate プロパティから継承されるため、書き込み可能なプロパティではありません。
Direct Lookup Table を生成している場合、近似する関数の入力は 2 つ以下です。
データ型: double
近似される関数に対する入力の目的のデータ型。numerictype、Simulink.Numerictype、numerictype オブジェクトのベクトル、または Simulink.Numerictype オブジェクトのベクトルとして指定します。指定する InputTypes の数は NumberOfInputs と一致しなければなりません。
例: problem.InputTypes = ["numerictype(1,16,13)", "numerictype(1,16,10)"];
近似する関数に対する入力の範囲の下限。スカラーまたはベクトルとして指定します。inf を指定すると、近似で使用される InputLowerBounds が InputTypes プロパティから導出されます。InputLowerBounds の次元は NumberOfInputs と一致しなければなりません。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
近似する関数に対する入力の範囲の上限。スカラーまたはベクトルとして指定します。inf を指定すると、近似で使用される InputUpperBounds が InputTypes プロパティから導出されます。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 で使用しているプロパティの値は既定の値です。
関数入力の範囲を 0 ~ 2*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プロパティに単精度または倍精度のデータ型に対応する語長が含まれている。
制限
ルックアップ テーブル オブジェクトとブレークポイント オブジェクトは、モデル マスク ワークスペースではサポートされていません。
アルゴリズム
近似する関数と関数ハンドルは次の条件を満たさなければなりません。
関数は時不変でなければならない。
関数は要素単位で動作しなければならない。つまり、各入力に 1 つの出力がある。
関数に状態を含めてはならない。
詳細については、ベクトル化を参照してください。
Problem オブジェクトで入力範囲を無限として指定した場合、入力の型が浮動小数点以外のときは、ソフトウェアでの近似の際に入力データ型の範囲に基づいて上限と下限の範囲が推定されます。結果の FunctionApproximation.LUTSolution オブジェクトでは、元のオブジェクトで指定された無限の範囲ではなく、近似のアルゴリズムで使用された範囲が指定されます。
Problem オブジェクトに対して指定された InputLowerBounds または InputUpperBounds が指定された InputTypes の範囲から外れる場合、近似のアルゴリズムでは InputTypes で指定されたデータ型の範囲が使用されます。
FunctionApproximation.Options オブジェクトの BreakpointSpecification プロパティが 'EvenSpacing' に設定されていても、FunctionApproximation.Problem オブジェクトの InputUpperBounds プロパティまたは InputLowerBounds プロパティが InputTypes の範囲と等しい場合は、アルゴリズムは 'EvenPow2Spacing' を使用した解の検出を試行しません。
バージョン履歴
R2018a で導入FunctionApproximation.Problem オブジェクトで、曲線近似 cfit (Curve Fitting Toolbox) オブジェクトが近似の有効な入力としてサポートされるようになりました。
ルックアップ テーブル オプティマイザーで、1 次元関数でフラットな内挿を使用する場合のルックアップ テーブルの値およびブレークポイントの最適化アルゴリズムが改善されました。この強化により、最適化されたルックアップ テーブルのメモリ削減が改善され、ルックアップ テーブルの最適化プロセスをより速く完了できるようになります。
この改善は、近似する関数が 1 次元であり、FunctionApproximation.Options で次のすべてのオプションが指定されている場合に適用されます。
InterpolationがFlatに設定されている。BreakpointSpecificationがExplicitValuesに設定されている。OnCurveTableValuesがfalseに設定されている。
FunctionApproximation.Problem オブジェクトを使用して、最適化されたルックアップ テーブルによる近似を MATLAB 関数として生成できるようになりました。MATLAB 関数を生成するには、FunctionApproximation.Options オブジェクトで ApproximateSolutionType プロパティを MATLAB に設定します。
生成された MATLAB 関数は編集可能で、MATLAB Coder™ を使用した C/C++ コードの生成をサポートします。
これまで、FunctionApproximation.Problem クラスでは、近似する関数および関数ハンドルはベクトル化されていなければならず、各入力に対して厳密に 1 つの出力が必要でした。ルックアップ テーブルの最適化で、スカラー入力しか許可されない Simulink ブロックおよびサブシステムの近似が完全にサポートされるようになりました。
ルックアップ テーブル オプティマイザーで、Flat および Nearest の内挿法で曲線上にないテーブルの値を許可する場合のルックアップ テーブルの値の最適化アルゴリズムが改善されました。この強化により、ルックアップ テーブルの最適化プロセスをより速く完了できるようになり、最適化されたルックアップ テーブルのメモリ削減が改善されます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)