このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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
オブジェクトを作成します。
入力引数
function
— 近似する関数またはブロック、または最適化する Lookup Table ブロック
'sin'
(既定値) | 数学関数 | 関数ハンドル | cfit
オブジェクト | Math Function ブロック | Lookup Table ブロック | Subsystem ブロック
近似する関数またはブロック、または最適化する Lookup Table ブロック。関数ハンドル、数学関数、cfit
(Curve Fitting Toolbox) オブジェクト、Simulink® ブロックまたはサブシステム、またはいずれかの Lookup Table ブロック (1-D Lookup Table や n-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
プロパティ
FunctionToApproximate
— 近似する関数または最適化する Lookup Table ブロック
'sin'
(既定値) | 数学関数 | 関数ハンドル | cfit
オブジェクト | Math Function ブロック | Lookup Table ブロック | Subsystem ブロック
近似する関数またはブロック、または最適化する Lookup Table ブロック。関数ハンドル、数学関数、Simulink ブロックまたはサブシステム、またはいずれかの Lookup Table ブロック (1-D Lookup Table や n-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
NumberOfInputs
— 関数の近似に対する入力の数
1 | 2 | 3
近似される関数に対する入力の数。このプロパティは FunctionToApproximate
プロパティから継承されるため、書き込み可能なプロパティではありません。
Direct Lookup Table を生成している場合、近似する関数の入力は 2 つ以下です。
データ型: double
InputTypes
— 関数の近似に対する入力の目的のデータ型
numerictype
オブジェクト | numerictype
オブジェクトのベクトル | Simulink.Numerictype
オブジェクト | Simulink.Numerictype
オブジェクトのベクトル
近似される関数に対する入力の目的のデータ型。numerictype
、Simulink.Numerictype
、numerictype
オブジェクトのベクトル、または Simulink.Numerictype
オブジェクトのベクトルとして指定します。指定する InputTypes
の数は NumberOfInputs
と一致しなければなりません。
例: problem.InputTypes = ["numerictype(1,16,13)", "numerictype(1,16,10)"];
InputLowerBounds
— 近似する関数に対する入力の範囲の下限
スカラー | ベクトル
近似する関数に対する入力の範囲の下限。スカラーまたはベクトルとして指定します。inf
を指定すると、近似で使用される InputLowerBounds
が InputTypes
プロパティから導出されます。InputLowerBounds
の次元は NumberOfInputs
と一致しなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
InputUpperBounds
— 近似する関数に対する入力の範囲の上限
スカラー | ベクトル
近似する関数に対する入力の範囲の上限。スカラーまたはベクトルとして指定します。inf
を指定すると、近似で使用される InputUpperBounds
が InputTypes
プロパティから導出されます。InputUpperBounds
の次元は NumberOfInputs
と一致しなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
OutputType
— 関数の近似による出力の目的のデータ型
numerictype
| Simulink.Numerictype
関数の近似による出力の目的のデータ型。numerictype
または Simulink.Numerictype
として指定します。たとえば、出力が語長が 16 ビットで小数部の長さが最高精度の符号付き固定小数点データ型になるように指定するには、OutputType
プロパティを "numerictype(1,16)"
に設定します。
例: problem.OutputType = "numerictype(1,16)";
Options
— 近似で使用する追加のオプションと制約
FunctionApproximation.Options
オブジェクト
近似で使用する追加のオプションと制約。FunctionApproximation.Options
オブジェクトとして指定します。
メソッド
solve | 関数の近似の問題に対する最適化された解の計算 |
コピーのセマンティクス
ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピーを参照してください。
例
関数ハンドルを近似する Problem オブジェクトの作成
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]
数学関数を近似する Problem オブジェクトの作成
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]
この数学関数の入力範囲、入力データ型、および出力データ型のプロパティは既定の設定です。
曲線近似オブジェクトを近似する 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: [1x1 cfit] NumberOfInputs: 1 InputTypes: "numerictype('double')" InputLowerBounds: -Inf InputUpperBounds: Inf OutputType: "numerictype('double')" Options: [1×1 FunctionApproximation.Options]
Lookup Table ブロックを最適化する Problem オブジェクトの作成
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
オブジェクトのプロパティはモデルから推定されます。
制限
ルックアップ テーブル オブジェクトとブレークポイント オブジェクトは、モデル マスク ワークスペースではサポートされていません。
アルゴリズム
必要な仕様
近似する関数と関数ハンドルは次の条件を満たさなければなりません。
関数は時不変でなければならない。
関数は要素単位で動作しなければならない。つまり、各入力に 1 つの出力がある。
関数に状態を含めてはならない。
詳細については、ベクトル化を参照してください。
入力の上限と下限が無限
Problem
オブジェクトで入力範囲を無限として指定した場合、入力の型が浮動小数点以外のときは、ソフトウェアでの近似の際に入力データ型の範囲に基づいて上限と下限の範囲が推定されます。結果の FunctionApproximation.LUTSolution
オブジェクトでは、元のオブジェクトで指定された無限の範囲ではなく、近似のアルゴリズムで使用された範囲が指定されます。
入力の上限と下限および入力データ型の範囲
Problem
オブジェクトに対して指定された InputLowerBounds
または InputUpperBounds
が指定された InputTypes
の範囲から外れる場合、近似のアルゴリズムでは InputTypes
で指定されたデータ型の範囲が使用されます。
FunctionApproximation.Options
オブジェクトの BreakpointSpecification
プロパティが 'EvenSpacing'
に設定されていても、FunctionApproximation.Problem
オブジェクトの InputUpperBounds
プロパティまたは InputLowerBounds
プロパティが InputTypes
の範囲と等しい場合は、アルゴリズムは 'EvenPow2Spacing'
を使用した解の検出を試行しません。
バージョン履歴
R2018a で導入R2022a: 曲線近似オブジェクトのサポート
FunctionApproximation.Problem
オブジェクトで、曲線近似 cfit
(Curve Fitting Toolbox) オブジェクトが近似の有効な入力としてサポートされるようになりました。
R2022a: 1 次元のフラットな内挿のメモリ削減の改善
ルックアップ テーブル オプティマイザーで、1 次元関数でフラットな内挿を使用する場合のルックアップ テーブルの値およびブレークポイントの最適化アルゴリズムが改善されました。この強化により、最適化されたルックアップ テーブルのメモリ削減が改善され、ルックアップ テーブルの最適化プロセスをより速く完了できるようになります。
この改善は、近似する関数が 1 次元であり、FunctionApproximation.Options
で次のすべてのオプションが指定されている場合に適用されます。
Interpolation
がFlat
に設定されている。BreakpointSpecification
がExplicitValues
に設定されている。OnCurveTableValues
がfalse
に設定されている。
R2021b: 最適化されたルックアップ テーブルの近似を MATLAB 関数として生成
FunctionApproximation.Problem
オブジェクトを使用して、最適化されたルックアップ テーブルの近似を MATLAB 関数として生成できるようになりました。MATLAB 関数を生成するには、FunctionApproximation.Options
オブジェクトで ApproximateSolutionType
プロパティを MATLAB
に設定します。
生成された MATLAB 関数は編集可能で、MATLAB Coder™ を使用した C/C++ コードの生成をサポートします。
R2021a: スカラー入力をもつ関数に対するルックアップ テーブルの最適化のサポート
これまで、FunctionApproximation.Problem
クラスでは、近似する関数および関数ハンドルはベクトル化されていなければならず、各入力に対して厳密に 1 つの出力が必要でした。ルックアップ テーブルの最適化で、スカラー入力しか許可されない Simulink ブロックおよびサブシステムの近似が完全にサポートされるようになりました。
R2021a: ルックアップ テーブル値の最適化の改善
ルックアップ テーブル オプティマイザーで、Flat
および Nearest
の内挿法で曲線上にないテーブルの値を許可する場合のルックアップ テーブルの値の最適化アルゴリズムが改善されました。この強化により、ルックアップ テーブルの最適化プロセスをより速く完了できるようになり、最適化されたルックアップ テーブルのメモリ削減が改善されます。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)