Следующие примеры показывают, как программно сгенерировать интерполяционные таблицы эффективности памяти. Используя эквивалент Lookup Table Optimizer в командной строке, можно:
Оптимизируйте существующий Lookup Table блок.
Сгенерируйте интерполяционную таблицу из блока Math Function.
Сгенерируйте интерполяционную таблицу из указателя на функцию или функцию.
Сгенерируйте интерполяционную таблицу из блока Subsystem.
Этот пример показывает, как сгенерировать эффективную для памяти интерполяционную таблицу, которая аппроксимирует 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]
The 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™ отображает итерации процесса оптимизации. The 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
. The OnCurveTableValues
свойство определяет, должны ли значения таблицы оптимизированного приближения интерполяционной таблицы равняться квантованному выходу аппроксимируемой исходной функции. В некоторых случаях путем установки этого значения на false
сгенерированная интерполяционная таблица приближения может поддерживать одинаковые допуски на ошибки при уменьшении памяти, используемой интерполяционной таблицей.
Создайте приближение интерполяционной таблицы, используя значения на кривой
Используйте FunctionApproximation.Problem
объект, чтобы задать функцию для аппроксимации интерполяционной таблицей. По умолчанию в OnCurveTableValues
свойство связанного Options
для объекта задано значение false. Установите это свойство равным true, чтобы ограничить значения таблицы квантованным выходом аппроксимируемой функции.
P1 = FunctionApproximation.Problem('tanh');
P1.Options.OnCurveTableValues = 1
P1 = 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 = 0
P2 = 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