Оптимизируйте интерполяционные таблицы для программной эффективности памяти

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

Figure contains 2 axes. Axes 1 with title Comparison of Original Function and Approximation contains 2 objects of type line. These objects represent Original, Approximation. Axes 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. Axes 1 with title Comparison of Original Function and Approximation contains 2 objects of type line. These objects represent Original, Approximation. Axes 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

См. также

Приложения

Классы

Похожие темы