В следующих примерах показано, как программно создавать таблицы поиска с эффективным использованием памяти. Используя эквивалент командной строки оптимизатора таблицы подстановки, можно:
Оптимизация существующего блока таблицы подстановки.
Создайте таблицу подстановки из блока математической функции.
Создание таблицы подстановки из дескриптора функции или функции.
Создание таблицы подстановки из блока подсистемы.
В этом примере показано, как создать таблицу поиска с эффективным использованием памяти, которая аппроксимирует sin функция. Определите задачу аппроксимации, создав FunctionApproximation.Problem объект.
P = FunctionApproximation.Problem('sin')
P =
1x1 FunctionApproximation.Problem with properties:
FunctionToApproximate: @(x)sin(x)
NumberOfInputs: 1
InputTypes: "numerictype(0,16,13)"
InputLowerBounds: 0
InputUpperBounds: 6.2832
OutputType: "numerictype(1,16,14)"
Options: [1x1 FunctionApproximation.Options]
FunctionToApproximate и NumberOfInputs свойства Problem выводятся из определения объекта и не могут быть изменены после создания. Все остальные свойства доступны для записи.
Изменить FunctionApproximation.Options задание дополнительных ограничений для использования в процессе оптимизации. Например, ограничьте точки останова созданной таблицы подстановки четными интервалами.
P.Options.BreakpointSpecification = 'EvenSpacing'
P =
1x1 FunctionApproximation.Problem with properties:
FunctionToApproximate: @(x)sin(x)
NumberOfInputs: 1
InputTypes: "numerictype(0,16,13)"
InputLowerBounds: 0
InputUpperBounds: 6.2832
OutputType: "numerictype(1,16,14)"
Options: [1x1 FunctionApproximation.Options]
Задайте дополнительные ограничения, такие как абсолютные и относительные допуски вывода и ограничения длины слова.
P.Options.AbsTol = 2^-10; P.Options.RelTol = 2^-6; P.Options.WordLengths = [8,16];
Используйте solve способ решения задачи оптимизации. MATLAB™ отображает итерации процесса оптимизации. solve метод возвращает FunctionApproximation.LUTSolution объект.
S = solve(P)
| ID | Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) |
| 0 | 48 | 0 | 2 | 8 | 16 | EvenSpacing | 9.765625e-04, 1.007261e+00 |
| 1 | 32 | 0 | 2 | 8 | 8 | EvenSpacing | 9.765625e-04, 1.007261e+00 |
| 2 | 672 | 0 | 41 | 8 | 16 | EvenSpacing | 9.765625e-04, 3.322094e-02 |
| 3 | 1648 | 1 | 102 | 8 | 16 | EvenSpacing | 9.765625e-04, 7.988139e-05 |
| 4 | 480 | 0 | 29 | 8 | 16 | EvenSpacing | 9.765625e-04, 1.575496e-01 |
| 5 | 1104 | 0 | 68 | 8 | 16 | EvenSpacing | 9.765625e-04, 1.970943e-03 |
| 6 | 352 | 0 | 21 | 8 | 16 | EvenSpacing | 9.765625e-04, 3.322094e-02 |
| 7 | 320 | 0 | 19 | 8 | 16 | EvenSpacing | 9.765625e-04, 9.553784e-02 |
| 8 | 64 | 0 | 2 | 16 | 16 | EvenSpacing | 9.765625e-04, 9.853516e-01 |
| 9 | 48 | 0 | 2 | 16 | 8 | EvenSpacing | 9.765625e-04, 9.853516e-01 |
| 10 | 640 | 1 | 38 | 16 | 16 | EvenSpacing | 9.765625e-04, 6.281694e-04 |
| 11 | 624 | 0 | 37 | 16 | 16 | EvenSpacing | 9.765625e-04, 3.435787e-03 |
| 12 | 496 | 0 | 29 | 16 | 16 | EvenSpacing | 9.765625e-04, 9.943803e-04 |
| 13 | 480 | 0 | 28 | 16 | 16 | EvenSpacing | 9.765625e-04, 1.238521e-03 |
| 14 | 560 | 0 | 33 | 16 | 16 | EvenSpacing | 9.765625e-04, 1.970943e-03 |
| 15 | 592 | 0 | 35 | 16 | 16 | EvenSpacing | 9.765625e-04, 3.679927e-03 |
| 16 | 608 | 0 | 36 | 16 | 16 | EvenSpacing | 9.765625e-04, 2.703365e-03 |
| 17 | 352 | 1 | 20 | 16 | 16 | EvenSpacing | 9.765625e-04, 5.671342e-04 |
| 18 | 336 | 0 | 19 | 16 | 16 | EvenSpacing | 9.765625e-04, 1.325779e-03 |
| 19 | 208 | 0 | 11 | 16 | 16 | EvenSpacing | 9.765625e-04, 3.430176e-02 |
| 20 | 272 | 0 | 15 | 16 | 16 | EvenSpacing | 9.765625e-04, 1.043701e-02 |
| 21 | 304 | 0 | 17 | 16 | 16 | EvenSpacing | 9.765625e-04, 4.526615e-03 |
| 22 | 320 | 0 | 18 | 16 | 16 | EvenSpacing | 9.765625e-04, 2.378452e-03 |
| 23 | 48 | 0 | 2 | 8 | 16 | EvenPow2Spacing | 9.765625e-04, 1.300802e+00 |
| 24 | 64 | 0 | 2 | 16 | 16 | EvenPow2Spacing | 9.765625e-04, 1.300802e+00 |
| 25 | 1648 | 1 | 102 | 8 | 16 | EvenPow2Spacing | 9.765625e-04, 7.988139e-05 |
Best Solution
| ID | Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) |
| 17 | 352 | 1 | 20 | 16 | 16 | EvenSpacing | 9.765625e-04, 5.671342e-04 |
S =
1x1 FunctionApproximation.LUTSolution with properties:
ID: 17
Feasible: "true"
Сравните численное поведение исходной функции с числовым поведением созданной таблицы поиска, сохраненной в решении. S.
err = compare(S)
err =
struct with fields:
Breakpoints: [51473x1 double]
Original: [51473x1 double]
Approximate: [51473x1 double]

Можно получить доступ к данным таблицы поиска, хранящимся в LUTSolution объект.
t = S.TableData
t =
struct with fields:
BreakpointValues: {[1x20 double]}
BreakpointDataTypes: [1x1 embedded.numerictype]
TableValues: [1x20 double]
TableDataType: [1x1 embedded.numerictype]
IsEvenSpacing: 1
Interpolation: Linear
Для доступа к сформированному блоку таблицы подстановки используйте approximate способ.
approximate(S)

В этом примере показано, как оптимизировать существующий блок таблицы подстановки для повышения эффективности памяти. Откройте модель, содержащую блок «Таблица подстановки», который требуется оптимизировать.
load_system('sldemo_fuelsys'); open_system('sldemo_fuelsys/fuel_rate_control/airflow_calc');

Создать FunctionApproximation.Problem для определения задачи оптимизации и ограничений.
P = FunctionApproximation.Problem('sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant')
P =
1x1 FunctionApproximation.Problem with properties:
FunctionToApproximate: 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant'
NumberOfInputs: 2
InputTypes: [1x2 string]
InputLowerBounds: [50 0.0500]
InputUpperBounds: [1000 0.9500]
OutputType: "numerictype('single')"
Options: [1x1 FunctionApproximation.Options]
Укажите дополнительные ограничения, изменив Options объект, связанный с Problem объект, P.
P.Options.BreakpointSpecification = "EvenSpacing"
P =
1x1 FunctionApproximation.Problem with properties:
FunctionToApproximate: 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant'
NumberOfInputs: 2
InputTypes: [1x2 string]
InputLowerBounds: [50 0.0500]
InputUpperBounds: [1000 0.9500]
OutputType: "numerictype('single')"
Options: [1x1 FunctionApproximation.Options]
Решите проблему оптимизации.
S = solve(P)
| ID | Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) |
| 0 | 12128 | 1 | [18 19] | [32 32] | 32 | ExplicitValues | 7.812500e-03, 0.000000e+00 |
| 1 | 11840 | 1 | [18 19] | [16 32] | 32 | ExplicitValues | 7.812500e-03, 0.000000e+00 |
| 2 | 80 | 0 | [2 2] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 1.047640e-01 |
| 3 | 336 | 0 | [6 6] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 5.359873e-02 |
| 4 | 288 | 0 | [5 6] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 5.763923e-02 |
| 5 | 288 | 0 | [6 5] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 5.852598e-02 |
| 6 | 248 | 0 | [5 5] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 6.255026e-02 |
| 7 | 1016 | 0 | [11 11] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.738934e-02 |
| 8 | 928 | 0 | [10 11] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.983925e-02 |
| 9 | 928 | 0 | [11 10] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.738934e-02 |
| 10 | 848 | 0 | [10 10] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.983925e-02 |
| 11 | 3744 | 0 | [21 22] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.080366e-02 |
| 12 | 3568 | 0 | [20 22] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.188371e-02 |
| 13 | 3408 | 0 | [21 20] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.080366e-02 |
| 14 | 3248 | 0 | [20 20] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.188371e-02 |
| 15 | 7008 | 0 | [29 30] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.208317e-02 |
| 16 | 9024 | 0 | [33 34] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 2.954298e-02 |
| 17 | 10968 | 0 | [35 39] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 2.700278e-02 |
| 18 | 11280 | 0 | [36 39] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 2.700279e-02 |
| 19 | 11592 | 0 | [37 39] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 2.700279e-02 |
| 20 | 840 | 0 | [9 11] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 4.118272e-02 |
| 21 | 768 | 0 | [9 10] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 4.118272e-02 |
| 22 | 3392 | 0 | [19 22] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.296377e-02 |
| 23 | 3216 | 0 | [18 22] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.404382e-02 |
| 24 | 3088 | 0 | [19 20] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.296377e-02 |
| 25 | 2928 | 0 | [18 20] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.404382e-02 |
| 26 | 1848 | 0 | [15 15] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.396479e-02 |
| 27 | 1728 | 0 | [14 15] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.528193e-02 |
| 28 | 1728 | 0 | [15 14] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.396479e-02 |
| 29 | 1616 | 0 | [14 14] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.528193e-02 |
| 30 | 6768 | 0 | [28 30] | [16 8] | 8 | EvenSpacing | 7.812500e-03, 3.208317e-02 |
| 31 | 128 | 0 | [2 2] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.050016e-01 |
| 32 | 384 | 0 | [6 6] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 5.586659e-02 |
| 33 | 336 | 0 | [5 6] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 5.984835e-02 |
| 34 | 336 | 0 | [6 5] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 6.017463e-02 |
| 35 | 296 | 0 | [5 5] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 6.433061e-02 |
| 36 | 1064 | 0 | [11 11] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 3.046093e-02 |
| 37 | 976 | 0 | [10 11] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 3.175766e-02 |
| 38 | 976 | 0 | [11 10] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 3.295625e-02 |
| 39 | 896 | 0 | [10 10] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 3.429314e-02 |
| 40 | 3624 | 0 | [21 21] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.124774e-02 |
| 41 | 3456 | 0 | [20 21] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.233026e-02 |
| 42 | 3456 | 0 | [21 20] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.124774e-02 |
| 43 | 3296 | 0 | [20 20] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.233026e-02 |
| 44 | 6824 | 1 | [29 29] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 5.957022e-03 |
| 45 | 5096 | 0 | [25 25] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.076232e-02 |
| 46 | 5928 | 0 | [27 27] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 9.914692e-03 |
| 47 | 6368 | 0 | [28 28] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 9.589452e-03 |
| 48 | 888 | 0 | [9 11] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 3.302356e-02 |
| 49 | 816 | 0 | [9 10] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 3.558207e-02 |
| 50 | 3288 | 0 | [19 21] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.350690e-02 |
| 51 | 3120 | 0 | [18 21] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.479964e-02 |
| 52 | 3136 | 0 | [19 20] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.350690e-02 |
| 53 | 2976 | 0 | [18 20] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.479964e-02 |
| 54 | 4704 | 0 | [24 24] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.145920e-02 |
| 55 | 5504 | 0 | [26 26] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.017491e-02 |
| 56 | 1896 | 0 | [15 15] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.783914e-02 |
| 57 | 1776 | 0 | [14 15] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.897344e-02 |
| 58 | 1776 | 0 | [15 14] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 2.034441e-02 |
| 59 | 1664 | 0 | [14 14] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 2.103841e-02 |
| 60 | 6592 | 0 | [28 29] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 9.247549e-03 |
| 61 | 6592 | 0 | [29 28] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 9.316519e-03 |
| 62 | 2984 | 0 | [19 19] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.350690e-02 |
| 63 | 2832 | 0 | [18 19] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.479964e-02 |
| 64 | 3576 | 0 | [15 29] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.783914e-02 |
| 65 | 5200 | 0 | [22 29] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.143289e-02 |
| 66 | 5896 | 0 | [25 29] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.042340e-02 |
| 67 | 6360 | 0 | [27 29] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 9.646382e-03 |
| 68 | 3576 | 0 | [29 15] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 1.082333e-02 |
| 69 | 5200 | 1 | [29 22] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 4.794985e-03 |
| 70 | 4272 | 1 | [29 18] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 6.289935e-03 |
| 71 | 3808 | 0 | [29 16] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 9.146322e-03 |
| 72 | 4040 | 1 | [29 17] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 4.853550e-03 |
| 73 | 112 | 0 | [2 2] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 1.054412e-01 |
| 74 | 624 | 0 | [6 6] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 5.441330e-02 |
| 75 | 528 | 0 | [5 6] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 5.850855e-02 |
| 76 | 528 | 0 | [6 5] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 5.939646e-02 |
| 77 | 448 | 0 | [5 5] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 6.331635e-02 |
| 78 | 1984 | 0 | [11 11] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 3.825822e-02 |
| 79 | 1808 | 0 | [10 11] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 4.057692e-02 |
| 80 | 1808 | 0 | [11 10] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 3.825822e-02 |
| 81 | 1648 | 0 | [10 10] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 4.057692e-02 |
| 82 | 2752 | 0 | [13 13] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 3.730308e-02 |
| 83 | 3184 | 0 | [14 14] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 3.596578e-02 |
| 84 | 3648 | 0 | [15 15] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 3.462848e-02 |
| 85 | 1632 | 0 | [9 11] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 4.191638e-02 |
| 86 | 1488 | 0 | [9 10] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 4.191638e-02 |
| 87 | 3408 | 0 | [14 15] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 3.596578e-02 |
| 88 | 3408 | 0 | [15 14] | [16 8] | 16 | EvenSpacing | 7.812500e-03, 3.462848e-02 |
| 89 | 160 | 0 | [2 2] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 1.056962e-01 |
| 90 | 672 | 0 | [6 6] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 5.635968e-02 |
| 91 | 576 | 0 | [5 6] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 6.042931e-02 |
| 92 | 576 | 0 | [6 5] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 6.089415e-02 |
| 93 | 496 | 0 | [5 5] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 6.486682e-02 |
| 94 | 2032 | 0 | [11 11] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 3.087381e-02 |
| 95 | 1856 | 0 | [10 11] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 3.201155e-02 |
| 96 | 1856 | 0 | [11 10] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 3.321355e-02 |
| 97 | 1696 | 0 | [10 10] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 3.438402e-02 |
| 98 | 2800 | 0 | [13 13] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 2.427534e-02 |
| 99 | 3232 | 0 | [14 14] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 2.115314e-02 |
| 100 | 3696 | 0 | [15 15] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 1.867522e-02 |
| 101 | 1680 | 0 | [9 11] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 3.326033e-02 |
| 102 | 1536 | 0 | [9 10] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 3.565893e-02 |
| 103 | 3456 | 0 | [14 15] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 1.988021e-02 |
| 104 | 3456 | 0 | [15 14] | [16 32] | 16 | EvenSpacing | 7.812500e-03, 2.043030e-02 |
| 105 | 80 | 0 | [2 2] | [16 8] | 8 | EvenPow2Spacing | 7.812500e-03, 8.762666e-02 |
| 106 | 560 | 0 | [8 8] | [16 8] | 8 | EvenPow2Spacing | 7.812500e-03, 4.444923e-02 |
| 107 | 1848 | 0 | [15 15] | [16 8] | 8 | EvenPow2Spacing | 7.812500e-03, 3.133052e-02 |
| 108 | 128 | 0 | [2 2] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 8.876663e-02 |
| 109 | 608 | 0 | [8 8] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 4.280622e-02 |
| 110 | 1896 | 0 | [15 15] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 1.728861e-02 |
| 111 | 112 | 0 | [2 2] | [16 8] | 16 | EvenPow2Spacing | 7.812500e-03, 8.821256e-02 |
| 112 | 1072 | 0 | [8 8] | [16 8] | 16 | EvenPow2Spacing | 7.812500e-03, 4.520058e-02 |
| 113 | 3648 | 0 | [15 15] | [16 8] | 16 | EvenPow2Spacing | 7.812500e-03, 3.195386e-02 |
| 114 | 160 | 0 | [2 2] | [16 32] | 16 | EvenPow2Spacing | 7.812500e-03, 8.949983e-02 |
| 115 | 1120 | 0 | [8 8] | [16 32] | 16 | EvenPow2Spacing | 7.812500e-03, 4.298368e-02 |
| 116 | 3696 | 0 | [15 15] | [16 32] | 16 | EvenPow2Spacing | 7.812500e-03, 1.766077e-02 |
| 117 | 176 | 0 | [2 2] | [16 8] | 32 | EvenPow2Spacing | 7.812500e-03, 8.821365e-02 |
| 118 | 2096 | 0 | [8 8] | [16 8] | 32 | EvenPow2Spacing | 7.812500e-03, 4.520053e-02 |
| 119 | 224 | 0 | [2 2] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 1.056971e-01 |
| 120 | 1248 | 0 | [6 6] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 5.635974e-02 |
| 121 | 1056 | 0 | [5 6] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 6.042954e-02 |
| 122 | 1056 | 0 | [6 5] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 6.089419e-02 |
| 123 | 896 | 0 | [5 5] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 6.486649e-02 |
| 124 | 3968 | 0 | [11 11] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 3.087266e-02 |
| 125 | 3616 | 0 | [10 11] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 3.201098e-02 |
| 126 | 3616 | 0 | [11 10] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 3.321287e-02 |
| 127 | 3296 | 0 | [10 10] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 3.438386e-02 |
| 128 | 3264 | 0 | [9 11] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 3.325982e-02 |
| 129 | 2976 | 0 | [9 10] | [16 32] | 32 | EvenSpacing | 7.812500e-03, 3.565864e-02 |
| 130 | 224 | 0 | [2 2] | [16 32] | 32 | EvenPow2Spacing | 7.812500e-03, 8.950080e-02 |
| 131 | 2144 | 0 | [8 8] | [16 32] | 32 | EvenPow2Spacing | 7.812500e-03, 4.298387e-02 |
| 132 | 128 | 0 | [2 2] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 9.900912e-02 |
| 133 | 416 | 0 | [8 5] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 5.790341e-02 |
| 134 | 1176 | 0 | [15 9] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 3.455174e-02 |
| 135 | 3936 | 0 | [30 16] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 1.060568e-02 |
| 136 | 224 | 0 | [2 2] | [16 32] | 32 | EvenPow2Spacing | 7.812500e-03, 1.067945e-01 |
| 137 | 1216 | 0 | [7 5] | [16 32] | 32 | EvenPow2Spacing | 7.812500e-03, 6.091571e-02 |
Best Solution
| ID | Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) |
| 72 | 4040 | 1 | [29 17] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 4.853550e-03 |
S =
1x1 FunctionApproximation.LUTSolution with properties:
ID: 72
Feasible: "true"
Сравните численное поведение исходной таблицы подстановки с оптимизированной таблицей подстановки.
compare(S)
ans =
1x2 struct array with fields:
Breakpoints
Original
Approximate

Создание нового блока таблицы подстановки с помощью approximate способ.
S.approximate

Если требуется оптимизировать как для памяти, так и для абсолютного допуска, полезно визуализировать компромиссы между ними. В этом примере создается аппроксимация таблицы подстановки функции 1-exp(-x) с различными уровнями абсолютного допуска и создает график каждого найденного решения. На конечном графике можно просмотреть компромиссы между эффективностью памяти и числовой верностью.
nTol = 32; % Initialize variables solutions = cell(1,nTol); objectiveValues = cell(1,nTol); constraintValues = cell(1,nTol); memoryUnits = 'bytes'; % Options for absolute tolerance absTol = 2.^linspace(-12,-4,nTol); % Relative tolerance is set to 0 relTol = 0; % Initialize options options = FunctionApproximation.Options( ... 'RelTol', relTol, ... 'BreakpointSpecification', 'EvenSpacing', ... 'Display', false, ... 'WordLengths', 16); % Setup the approximation problem problem = FunctionApproximation.Problem( ... @(x) 1 - exp(-x), ... 'InputTypes',numerictype(0,16), ... 'OutputType',numerictype(1,16,14), ... 'InputLowerBounds',0, ... 'InputUpperBounds',5, ... 'Options',options); % Execute to find solutions with different tolerances for iTol = 1:nTol problem.Options.AbsTol = absTol(iTol); solution = solve(problem); objectiveValues{iTol} = arrayfun(@(x) x.totalMemoryUsage(memoryUnits), solution.AllSolutions); constraintValues{iTol} = arrayfun(@(x) x.Feasible, solution.AllSolutions); solutions{iTol} = solution; end % Plot results h = figure(); hold on; for iTol = 1:nTol for iObjective = 1:numel(objectiveValues{iTol}) if constraintValues{iTol}(iObjective) markerColor = 'g'; else markerColor = 'r'; end plot(absTol(iTol),objectiveValues{iTol}(iObjective), ... 'Marker', '.' ,'LineStyle', 'none', ... 'MarkerSize', 24, ... 'MarkerEdgeColor', markerColor) end end xlabel('AbsTol') ylabel(['MemoryUsage (',memoryUnits,')']) h.Children.XScale = 'log'; h.Children.YMinorGrid = 'on'; grid on box on hold off;

Решения, которые неосуществимы, что означает, что они не соответствуют требуемому абсолютному допуску, отмечены красным цветом. Возможные решения отмечены зеленым цветом. По мере увеличения абсолютного допуска аппроксимация находит решения, использующие меньше памяти. Когда абсолютный допуск ниже, что указывает на более высокую числовую точность, требуемая память также увеличивается.
В этом примере сравниваются аппроксимации таблицы подстановки, созданные для tanh функция, когда OnCurveTableValues имущества FunctionApproximation.Options объект имеет значение true и false. OnCurveTableValues свойство определяет, должны ли табличные значения аппроксимации оптимизированной таблицы поиска быть равны квантованному выходу аппроксимируемой исходной функции. В некоторых случаях путем установки для этого значения значения false, сформированная аппроксимация таблицы поиска может поддерживать те же допуски ошибок при уменьшении памяти, используемой таблицей поиска.
Создание аппроксимации таблицы подстановки с использованием значений таблицы на кривой
Используйте FunctionApproximation.Problem для определения функции, аппроксимируемой таблицей подстановки. По умолчанию OnCurveTableValues свойство связанного Options объект имеет значение false. Установите для этого свойства значение true, чтобы ограничить значения таблицы квантованным выходом аппроксимируемой функции.
P1 = FunctionApproximation.Problem('tanh');
P1.Options.OnCurveTableValues = 1P1 =
1x1 FunctionApproximation.Problem with properties:
FunctionToApproximate: @(x)tanh(x)
NumberOfInputs: 1
InputTypes: "numerictype(1,16,12)"
InputLowerBounds: -8
InputUpperBounds: 8
OutputType: "numerictype(1,16,15)"
Options: [1x1 FunctionApproximation.Options]
Создайте аппроксимацию таблицы подстановки.
S1 = solve(P1)
| ID | Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) | | 0 | 64 | 0 | 2 | 16 | 16 | EvenSpacing | 7.812500e-03, 9.999998e-01 | | 1 | 1248 | 1 | 76 | 16 | 16 | EvenSpacing | 7.812500e-03, 4.368265e-03 | | 2 | 1232 | 1 | 75 | 16 | 16 | EvenSpacing | 7.812500e-03, 4.439035e-03 | | 3 | 944 | 1 | 57 | 16 | 16 | EvenSpacing | 7.812500e-03, 7.780470e-03 | | 4 | 928 | 0 | 56 | 16 | 16 | EvenSpacing | 7.812500e-03, 7.990307e-03 | | 5 | 656 | 0 | 39 | 16 | 16 | EvenSpacing | 7.812500e-03, 1.678519e-02 | | 6 | 640 | 0 | 38 | 16 | 16 | EvenSpacing | 7.812500e-03, 1.660649e-02 | | 7 | 784 | 0 | 47 | 16 | 16 | EvenSpacing | 7.812500e-03, 1.102459e-02 | | 8 | 864 | 0 | 52 | 16 | 16 | EvenSpacing | 7.812500e-03, 9.403441e-03 | | 9 | 896 | 0 | 54 | 16 | 16 | EvenSpacing | 7.812500e-03, 8.643626e-03 | | 10 | 912 | 0 | 55 | 16 | 16 | EvenSpacing | 7.812500e-03, 8.316993e-03 | | 11 | 496 | 0 | 29 | 16 | 16 | EvenSpacing | 7.812500e-03, 2.894880e-02 | | 12 | 720 | 0 | 43 | 16 | 16 | EvenSpacing | 7.812500e-03, 1.355547e-02 | | 13 | 832 | 0 | 50 | 16 | 16 | EvenSpacing | 7.812500e-03, 1.019267e-02 | | 14 | 880 | 0 | 53 | 16 | 16 | EvenSpacing | 7.812500e-03, 8.881069e-03 | | 15 | 448 | 1 | 14 | 16 | 16 | ExplicitValues | 7.812500e-03, 7.801827e-03 | Best Solution | ID | Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) | | 15 | 448 | 1 | 14 | 16 | 16 | ExplicitValues | 7.812500e-03, 7.801827e-03 |
S1 =
1x1 FunctionApproximation.LUTSolution with properties:
ID: 15
Feasible: "true"
Создание аппроксимации таблицы подстановки с использованием любых значений таблицы
Создать другое FunctionApproximation.Problem объект. Установите OnCurveTableValues свойство этого объекта имеет значение false, что позволяет оптимизировать значения таблицы, а также точки останова.
P2 = FunctionApproximation.Problem('tanh');
P2.Options.OnCurveTableValues = 0P2 =
1x1 FunctionApproximation.Problem with properties:
FunctionToApproximate: @(x)tanh(x)
NumberOfInputs: 1
InputTypes: "numerictype(1,16,12)"
InputLowerBounds: -8
InputUpperBounds: 8
OutputType: "numerictype(1,16,15)"
Options: [1x1 FunctionApproximation.Options]
Создайте аппроксимацию таблицы подстановки.
S2 = solve(P2)
| ID | Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) | | 0 | 64 | 0 | 2 | 16 | 16 | EvenSpacing | 7.812500e-03, 9.999998e-01 | | 1 | 1248 | 1 | 76 | 16 | 16 | EvenSpacing | 7.812500e-03, 4.368265e-03 | | 2 | 1232 | 1 | 75 | 16 | 16 | EvenSpacing | 7.812500e-03, 4.439035e-03 | | 3 | 944 | 1 | 57 | 16 | 16 | EvenSpacing | 7.812500e-03, 7.780470e-03 | | 4 | 928 | 1 | 56 | 16 | 16 | EvenSpacing | 7.812500e-03, 6.110240e-03 | | 5 | 656 | 0 | 39 | 16 | 16 | EvenSpacing | 7.812500e-03, 1.678519e-02 | | 6 | 640 | 0 | 38 | 16 | 16 | EvenSpacing | 7.812500e-03, 1.660649e-02 | | 7 | 784 | 1 | 47 | 16 | 16 | EvenSpacing | 7.812500e-03, 7.743777e-03 | | 8 | 704 | 1 | 42 | 16 | 16 | EvenSpacing | 7.812500e-03, 7.805676e-03 | | 9 | 672 | 1 | 40 | 16 | 16 | EvenSpacing | 7.812500e-03, 7.809550e-03 | | 10 | 368 | 0 | 21 | 16 | 16 | EvenSpacing | 7.812500e-03, 4.855583e-02 | | 11 | 512 | 0 | 30 | 16 | 16 | EvenSpacing | 7.812500e-03, 2.773526e-02 | | 12 | 592 | 0 | 35 | 16 | 16 | EvenSpacing | 7.812500e-03, 2.088471e-02 | | 13 | 624 | 0 | 37 | 16 | 16 | EvenSpacing | 7.812500e-03, 1.870074e-02 | | 14 | 384 | 1 | 12 | 16 | 16 | ExplicitValues | 7.812500e-03, 7.812317e-03 | | 15 | 384 | 0 | 12 | 16 | 16 | ExplicitValues | 7.812500e-03, 1.196141e-02 | | 16 | 384 | 1 | 12 | 16 | 16 | ExplicitValues | 7.812500e-03, 7.812317e-03 | Best Solution | ID | Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) | | 14 | 384 | 1 | 12 | 16 | 16 | ExplicitValues | 7.812500e-03, 7.812317e-03 |
S2 =
1x1 FunctionApproximation.LUTSolution with properties:
ID: 14
Feasible: "true"
Посмотреть Результаты
Сравните наилучшие решения для каждого приближения таблицы поиска.
compare(S1)

ans = struct with fields:
Breakpoints: [65536x1 double]
Original: [65536x1 double]
Approximate: [65536x1 double]
compare(S2)

ans = struct with fields:
Breakpoints: [65536x1 double]
Original: [65536x1 double]
Approximate: [65536x1 double]
Максимальная ошибка между исходной функцией и двумя приближениями таблицы подстановки примерно равна, однако память, используемая таблицей подстановки, которая не была ограничена использованием только значений таблицы кривых, значительно ниже.
percent_reduction = S2.totalMemoryUsage/S1.totalMemoryUsage
percent_reduction = 0.8571
FunctionApproximation.LUTMemoryUsageCalculator | FunctionApproximation.LUTSolution | FunctionApproximation.Options | FunctionApproximation.Problem