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

Следующие примеры показывают, как сгенерировать эффективные памятью интерполяционные таблицы программно. Используя командную строку, эквивалентную из 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, 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: {[0 0.3307 0.6614 0.9921 1.3228 1.6534 1.9841 ... ]}
    BreakpointDataTypes: [1x1 embedded.numerictype]
            TableValues: [4.2725e-04 0.3278 0.6200 0.8420 0.9759 1.0063 ... ]
          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 = 

  1×1 FunctionApproximation.Problem with properties:

    FunctionToApproximate: 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant'
           NumberOfInputs: 2
               InputTypes: ["numerictype('single')"    …    ]
         InputLowerBounds: [50 0.0500]
         InputUpperBounds: [1000 0.9500]
               OutputType: "numerictype('single')"
                  Options: [1×1 FunctionApproximation.Options]

Задайте дополнительные ограничения путем изменения Options объект сопоставлен с Problem объект, P.

P.Options.BreakpointSpecification = "EvenSpacing"
P = 

  1×1 FunctionApproximation.Problem with properties:

    FunctionToApproximate: 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant'
           NumberOfInputs: 2
               InputTypes: ["numerictype('single')"    …    ]
         InputLowerBounds: [50 0.0500]
         InputUpperBounds: [1000 0.9500]
               OutputType: "numerictype('single')"
                  Options: [1×1 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 = 

  1×1 FunctionApproximation.LUTSolution with properties:

          ID: 72
    Feasible: "true"

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

compare(S)
ans = 

  1×2 struct array with fields:

    Breakpoints
    Original
    Approximate

Сгенерируйте новый блок Lookup Table с помощью approximate метод.

S.approximate

%#ok<*NOPTS>

Визуализируйте переднюю сторону Парето для оптимизации памяти по сравнению с абсолютной погрешностью

Когда это необходимо, чтобы оптимизировать и для памяти и для абсолютной погрешности, полезно визуализировать компромиссы между двумя. Этот пример создает приближение интерполяционной таблицы функционального 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 объект установлен в ложь. Установите это свойство на 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 свойство этого объекта ко лжи, чтобы позволить оптимизации оптимизировать табличные значения, а также точки останова.

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)

Figure contains 2 axes objects. Axes object 1 with title Comparison of Original Function and Approximation contains 2 objects of type line. These objects represent Original, Approximation. Axes object 2 with title Feasibility of Solution: Feasible AbsTol = 0.0078125 RelTol = 0.0078125 contains 3 objects of type area, line. These objects represent Feasible Region : Absolute Error <= Max Error Allowed, Max Error Allowed : max(abs(Original) * RelTol, AbsTol), Absolute Error : abs(Original - Approximation).

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

compare(S2)

Figure contains 2 axes objects. Axes object 1 with title Comparison of Original Function and Approximation contains 2 objects of type line. These objects represent Original, Approximation. Axes object 2 with title Feasibility of Solution: Feasible AbsTol = 0.0078125 RelTol = 0.0078125 contains 3 objects of type area, line. These objects represent Feasible Region : Absolute Error <= Max Error Allowed, Max Error Allowed : max(abs(Original) * RelTol, AbsTol), Absolute Error : abs(Original - Approximation).

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

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

percent_reduction = S2.totalMemoryUsage/S1.totalMemoryUsage
percent_reduction = 0.8571

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

Приложения

Классы

Похожие темы