Оптимизируйте интерполяционные таблицы для КПД памяти программно

Следующие примеры показывают, как сгенерировать эффективные памятью интерполяционные таблицы программно. Используя командную строку, эквивалентную из 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]

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, 6.281694e-04 |
|  18 |            336 |        0 |         19 |              16 |           16 |             EvenSpacing |     9.765625e-04, 1.325779e-03 |
|  19 |             48 |        0 |          2 |               8 |           16 |         EvenPow2Spacing |     9.765625e-04, 1.300802e+00 |
|  20 |             64 |        0 |          2 |              16 |           16 |         EvenPow2Spacing |     9.765625e-04, 1.300802e+00 |
|  21 |           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, 6.281694e-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

Чтобы получить доступ к сгенерированному блоку Lookup Table, используйте approximate метод.

approximate(S)

Оптимизируйте существующую интерполяционную таблицу

В этом примере показано, как оптимизировать существующий блок Lookup Table для КПД памяти. Откройте модель, содержащую блок Lookup Table, который вы хотите оптимизировать.

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 |           3088 |        0 |    [19 20] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.296377e-02 |
|   4 |           2928 |        0 |    [18 20] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.404382e-02 |
|   5 |          11592 |        0 |    [37 39] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 2.700279e-02 |
|   6 |          11280 |        0 |    [36 39] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 2.700279e-02 |
|   7 |           1848 |        0 |    [15 15] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.396479e-02 |
|   8 |           1728 |        0 |    [14 15] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.528193e-02 |
|   9 |           1728 |        0 |    [15 14] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.396479e-02 |
|  10 |           1616 |        0 |    [14 14] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.528193e-02 |
|  11 |           7008 |        0 |    [29 30] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.208317e-02 |
|  12 |           6768 |        0 |    [28 30] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.208317e-02 |
|  13 |           9024 |        0 |    [33 34] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 2.954298e-02 |
|  14 |          10968 |        0 |    [35 39] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 2.700278e-02 |
|  15 |            928 |        0 |    [10 11] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.983925e-02 |
|  16 |            840 |        0 |     [9 11] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 4.118272e-02 |
|  17 |            848 |        0 |    [10 10] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.983925e-02 |
|  18 |            768 |        0 |     [9 10] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 4.118272e-02 |
|  19 |           3392 |        0 |    [19 22] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.296377e-02 |
|  20 |           3216 |        0 |    [18 22] |          [16 8] |            8 |             EvenSpacing |     7.812500e-03, 3.404382e-02 |
|  21 |            128 |        0 |      [2 2] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.050016e-01 |
|  22 |           3136 |        0 |    [19 20] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.350690e-02 |
|  23 |           2976 |        0 |    [18 20] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.479964e-02 |
|  24 |           2984 |        0 |    [19 19] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.350690e-02 |
|  25 |           2832 |        0 |    [18 19] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.479964e-02 |
|  26 |          11640 |        1 |    [37 39] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 3.096748e-03 |
|  27 |          11328 |        1 |    [36 39] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 3.096748e-03 |
|  28 |          11040 |        1 |    [36 38] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 2.134504e-03 |
|  29 |           6368 |        0 |    [28 28] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 9.589452e-03 |
|  30 |           8288 |        1 |    [32 32] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 6.172489e-03 |
|  31 |           7296 |        0 |    [30 30] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 8.003332e-03 |
|  32 |           7784 |        1 |    [31 31] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 7.446419e-03 |
|  33 |           1896 |        0 |    [15 15] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.783914e-02 |
|  34 |           1776 |        0 |    [14 15] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.897344e-02 |
|  35 |           1776 |        0 |    [15 14] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 2.034441e-02 |
|  36 |           1664 |        0 |    [14 14] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 2.103841e-02 |
|  37 |           6824 |        0 |    [29 29] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 8.287698e-03 |
|  38 |           6592 |        0 |    [28 29] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 9.247549e-03 |
|  39 |           6592 |        0 |    [29 28] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 9.316519e-03 |
|  40 |            976 |        0 |    [10 11] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 3.175766e-02 |
|  41 |            888 |        0 |     [9 11] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 3.302356e-02 |
|  42 |            896 |        0 |    [10 10] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 3.429314e-02 |
|  43 |            816 |        0 |     [9 10] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 3.558207e-02 |
|  44 |           3288 |        0 |    [19 21] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.350690e-02 |
|  45 |           3120 |        0 |    [18 21] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.479964e-02 |
|  46 |           5096 |        0 |    [25 25] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.076232e-02 |
|  47 |           2144 |        0 |    [16 16] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.691517e-02 |
|  48 |           2656 |        0 |    [16 20] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.691517e-02 |
|  49 |           3168 |        0 |    [16 24] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.691517e-02 |
|  50 |           3680 |        0 |    [16 28] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.691517e-02 |
|  51 |           4064 |        0 |    [16 31] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.691517e-02 |
|  52 |           2656 |        0 |    [20 16] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.233026e-02 |
|  53 |           3296 |        0 |    [20 20] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.233026e-02 |
|  54 |           3936 |        0 |    [20 24] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.233026e-02 |
|  55 |           4576 |        0 |    [20 28] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.322260e-02 |
|  56 |           5056 |        0 |    [20 31] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.233026e-02 |
|  57 |           3168 |        0 |    [24 16] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.121333e-02 |
|  58 |           3936 |        0 |    [24 20] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 9.796647e-03 |
|  59 |           4704 |        0 |    [24 24] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.145920e-02 |
|  60 |           5472 |        0 |    [24 28] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 1.123541e-02 |
|  61 |           6048 |        0 |    [24 31] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 9.856485e-03 |
|  62 |           3680 |        0 |    [28 16] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 9.865012e-03 |
|  63 |           4576 |        1 |    [28 20] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 6.539418e-03 |
|  64 |           4064 |        0 |    [31 16] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 8.752592e-03 |
|  65 |            112 |        0 |      [2 2] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 1.054412e-01 |
|  66 |           3648 |        0 |    [15 15] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 3.462848e-02 |
|  67 |           3408 |        0 |    [14 15] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 3.596578e-02 |
|  68 |           3408 |        0 |    [15 14] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 3.462848e-02 |
|  69 |           3184 |        0 |    [14 14] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 3.596578e-02 |
|  70 |           4144 |        0 |    [16 16] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 3.329117e-02 |
|  71 |           1808 |        0 |    [10 11] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 4.057692e-02 |
|  72 |           1632 |        0 |     [9 11] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 4.191638e-02 |
|  73 |           1648 |        0 |    [10 10] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 4.057692e-02 |
|  74 |           1488 |        0 |     [9 10] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 4.191638e-02 |
|  75 |           2752 |        0 |    [13 13] |          [16 8] |           16 |             EvenSpacing |     7.812500e-03, 3.730308e-02 |
|  76 |            160 |        0 |      [2 2] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 1.056962e-01 |
|  77 |           3696 |        0 |    [15 15] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 1.867522e-02 |
|  78 |           3456 |        0 |    [14 15] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 1.988021e-02 |
|  79 |           3456 |        0 |    [15 14] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 2.043030e-02 |
|  80 |           3232 |        0 |    [14 14] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 2.115314e-02 |
|  81 |           4192 |        0 |    [16 16] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 1.747155e-02 |
|  82 |           1856 |        0 |    [10 11] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 3.201155e-02 |
|  83 |           1680 |        0 |     [9 11] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 3.326033e-02 |
|  84 |           1696 |        0 |    [10 10] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 3.438402e-02 |
|  85 |           1536 |        0 |     [9 10] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 3.565893e-02 |
|  86 |           2800 |        0 |    [13 13] |         [16 32] |           16 |             EvenSpacing |     7.812500e-03, 2.427534e-02 |
|  87 |             80 |        0 |      [2 2] |          [16 8] |            8 |         EvenPow2Spacing |     7.812500e-03, 8.762666e-02 |
|  88 |           1848 |        0 |    [15 15] |          [16 8] |            8 |         EvenPow2Spacing |     7.812500e-03, 3.133052e-02 |
|  89 |            128 |        0 |      [2 2] |         [16 32] |            8 |         EvenPow2Spacing |     7.812500e-03, 8.876663e-02 |
|  90 |           1896 |        0 |    [15 15] |         [16 32] |            8 |         EvenPow2Spacing |     7.812500e-03, 1.728861e-02 |
|  91 |            112 |        0 |      [2 2] |          [16 8] |           16 |         EvenPow2Spacing |     7.812500e-03, 8.821256e-02 |
|  92 |           3648 |        0 |    [15 15] |          [16 8] |           16 |         EvenPow2Spacing |     7.812500e-03, 3.195386e-02 |
|  93 |            160 |        0 |      [2 2] |         [16 32] |           16 |         EvenPow2Spacing |     7.812500e-03, 8.949983e-02 |
|  94 |           3696 |        0 |    [15 15] |         [16 32] |           16 |         EvenPow2Spacing |     7.812500e-03, 1.766077e-02 |
|  95 |            176 |        0 |      [2 2] |          [16 8] |           32 |         EvenPow2Spacing |     7.812500e-03, 8.821365e-02 |
|  96 |            224 |        0 |      [2 2] |         [16 32] |           32 |             EvenSpacing |     7.812500e-03, 1.056971e-01 |
|  97 |           3616 |        0 |    [10 11] |         [16 32] |           32 |             EvenSpacing |     7.812500e-03, 3.201098e-02 |
|  98 |           3264 |        0 |     [9 11] |         [16 32] |           32 |             EvenSpacing |     7.812500e-03, 3.325982e-02 |
|  99 |           3296 |        0 |    [10 10] |         [16 32] |           32 |             EvenSpacing |     7.812500e-03, 3.438386e-02 |
| 100 |           2976 |        0 |     [9 10] |         [16 32] |           32 |             EvenSpacing |     7.812500e-03, 3.565864e-02 |
| 101 |           3968 |        0 |    [11 11] |         [16 32] |           32 |             EvenSpacing |     7.812500e-03, 3.087266e-02 |
| 102 |            224 |        0 |      [2 2] |         [16 32] |           32 |         EvenPow2Spacing |     7.812500e-03, 8.950080e-02 |
| 103 |            128 |        0 |      [2 2] |         [16 32] |            8 |         EvenPow2Spacing |     7.812500e-03, 9.900912e-02 |
| 104 |           3936 |        0 |    [30 16] |         [16 32] |            8 |         EvenPow2Spacing |     7.812500e-03, 1.060568e-02 |
| 105 |           1176 |        0 |     [15 9] |         [16 32] |            8 |         EvenPow2Spacing |     7.812500e-03, 3.455174e-02 |
| 106 |            224 |        0 |      [2 2] |         [16 32] |           32 |         EvenPow2Spacing |     7.812500e-03, 9.976246e-02 |
| 107 |           4416 |        0 |     [15 9] |         [16 32] |           32 |         EvenPow2Spacing |     7.812500e-03, 3.458433e-02 |

Best Solution
|  ID |  Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification |             Error(Max,Current) |
|  63 |           4576 |        1 |    [28 20] |         [16 32] |            8 |             EvenSpacing |     7.812500e-03, 6.539418e-03 |


S = 

  1x1 FunctionApproximation.LUTSolution with properties:

          ID: 63
    Feasible: "true"

Сравните числовое поведение исходной интерполяционной таблицы с оптимизированной интерполяционной таблицей.

compare(S)
ans = 

  1x2 struct array with fields:

    Breakpoints
    Original
    Approximate

Сгенерируйте новый блок Lookup Table с помощью 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;

Решения, которые неосуществимы, означая, что они не соответствуют необходимому абсолютному допуску, отмечены красным. Решения, которые выполнимы, отмечены зеленым. Когда абсолютный допуск увеличивается, приближение находит решения, которые используют меньше памяти. Когда абсолютный допуск ниже, указывая выше на числовую точность, необходимая память также увеличивается.

Сравните приближения Используя на кривой и от табличных значений кривой

Этот пример сравнивает приближения интерполяционной таблицы, сгенерированные для sin функционируйте когда OnCurveTableValues свойство FunctionApproximation.Options объект установлен в true и false. OnCurveTableValues свойство задает, должны ли табличные значения оптимизированного приближения интерполяционной таблицы быть равны квантованному выходу исходной аппроксимируемой функции. В некоторых случаях, путем устанавливания этого значения к false, сгенерированное приближение интерполяционной таблицы может обеспечить те же ошибочные допуски при сокращении памяти, используемой интерполяционной таблицей.

Создайте приближение интерполяционной таблицы Используя на табличных значениях кривой

Используйте FunctionApproximation.Problem объект задать функцию, чтобы аппроксимировать интерполяционной таблицей. По умолчанию, OnCurveTableValues свойство связанного Options объект установлен в истину.

P1 = FunctionApproximation.Problem('sin');
P1.Options.OnCurveTableValues
ans = logical
   0

Сгенерируйте приближение интерполяционной таблицы.

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, 1.000000e+00 |
|   1 |            784 |        1 |         47 |              16 |           16 |             EvenSpacing |     7.812500e-03, 5.388912e-03 |
|   2 |            768 |        1 |         46 |              16 |           16 |             EvenSpacing |     7.812500e-03, 4.534419e-03 |
|   3 |            608 |        1 |         36 |              16 |           16 |             EvenSpacing |     7.812500e-03, 4.089765e-03 |
|   4 |            592 |        1 |         35 |              16 |           16 |             EvenSpacing |     7.812500e-03, 4.272461e-03 |
|   5 |            416 |        1 |         24 |              16 |           16 |             EvenSpacing |     7.812500e-03, 6.192382e-03 |
|   6 |            400 |        1 |         23 |              16 |           16 |             EvenSpacing |     7.812500e-03, 6.939196e-03 |
|   7 |             64 |        0 |          2 |              16 |           16 |         EvenPow2Spacing |     7.812500e-03, 1.315166e+00 |
|   8 |            576 |        0 |         18 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.827414e-03 |
|   9 |            640 |        1 |         20 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.784160e-03 |
|  10 |            576 |        0 |         18 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.866281e-03 |
|  11 |            576 |        0 |         18 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.849443e-03 |
|  12 |            640 |        1 |         20 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.244422e-03 |

Best Solution
|  ID |  Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification |             Error(Max,Current) |
|   6 |            400 |        1 |         23 |              16 |           16 |             EvenSpacing |     7.812500e-03, 6.939196e-03 |
S1 = 
  1x1 FunctionApproximation.LUTSolution with properties:

          ID: 6
    Feasible: "true"

Создайте приближение интерполяционной таблицы Используя любые табличные значения

Создайте другой FunctionApproximation.Problem объект. Установите OnCurveTableValues свойство этого объекта ко лжи, чтобы позволить оптимизации оптимизировать табличные значения, а также точки останова.

P2 = FunctionApproximation.Problem('sin');
P2.Options.OnCurveTableValues = 0
P2 = 
  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]

Сгенерируйте приближение интерполяционной таблицы.

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, 1.000000e+00 |
|   1 |            784 |        1 |         47 |              16 |           16 |             EvenSpacing |     7.812500e-03, 5.388912e-03 |
|   2 |            768 |        1 |         46 |              16 |           16 |             EvenSpacing |     7.812500e-03, 4.534419e-03 |
|   3 |            608 |        1 |         36 |              16 |           16 |             EvenSpacing |     7.812500e-03, 4.089765e-03 |
|   4 |            592 |        1 |         35 |              16 |           16 |             EvenSpacing |     7.812500e-03, 4.272461e-03 |
|   5 |            416 |        1 |         24 |              16 |           16 |             EvenSpacing |     7.812500e-03, 6.192382e-03 |
|   6 |            400 |        1 |         23 |              16 |           16 |             EvenSpacing |     7.812500e-03, 6.939196e-03 |
|   7 |             64 |        0 |          2 |              16 |           16 |         EvenPow2Spacing |     7.812500e-03, 1.315166e+00 |
|   8 |            576 |        0 |         18 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.827414e-03 |
|   9 |            640 |        1 |         20 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.784160e-03 |
|  10 |            576 |        0 |         18 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.866281e-03 |
|  11 |            576 |        0 |         18 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.849443e-03 |
|  12 |            640 |        1 |         20 |              16 |           16 |          ExplicitValues |     7.812500e-03, 7.244422e-03 |

Best Solution
|  ID |  Memory (bits) | Feasible | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification |             Error(Max,Current) |
|   6 |            400 |        1 |         23 |              16 |           16 |             EvenSpacing |     7.812500e-03, 6.939196e-03 |
S2 = 
  1x1 FunctionApproximation.LUTSolution with properties:

          ID: 6
    Feasible: "true"

Просмотр результатов

Сравните лучшие решения для каждого приближения интерполяционной таблицы.

compare(S1)

ans = struct with fields:
    Breakpoints: [51473x1 double]
       Original: [51473x1 double]
    Approximate: [51473x1 double]

compare(S2)

ans = struct with fields:
    Breakpoints: [51473x1 double]
       Original: [51473x1 double]
    Approximate: [51473x1 double]

Максимальная погрешность между исходной функцией и двумя приближениями интерполяционной таблицы приблизительно равна, однако память, используемая интерполяционной таблицей, которая не была ограничена к использованию только на табличных значениях кривой, значительно ниже.

percent_reduction = S2.totalMemoryUsage/S1.totalMemoryUsage
percent_reduction = 1

Смотрите также

Приложения

Классы

Похожие темы