Аппроксимированные функции с прямой интерполяционной таблицей

Используя Lookup Table Optimizer, можно сгенерировать прямую интерполяционную таблицу, аппроксимирующую блок Simulink® или функцию. Прямые интерполяционные таблицы эффективны, чтобы реализовать на оборудовании, потому что они не требуют никаких вычислений.

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

Создайте FunctionApproximation.Problem объект, задающий функцию, для которой можно сгенерировать аппроксимированное. Чтобы сгенерировать прямую интерполяционную таблицу, установите метод интерполяции для None в FunctionApproximation.Options объект.

problem = FunctionApproximation.Problem('atan2');
problem.InputTypes = [numerictype(0,4,2) numerictype(0,8,4)];
problem.OutputType = fixdt(0,8,7);
problem.Options.Interpolation = "None";
problem.Options.AbsTol = 2^-4;
problem.Options.RelTol = 0;
problem.Options.WordLengths = 1:8;

Используйте solve метод, чтобы сгенерировать оптимальную интерполяционную таблицу.

solution = solve(problem)
|  ID |  Memory (bits) | Feasible |   Table Size | Intermediate WLs | TableData WL |             Error(Max,Current) | 
|   0 |          32768 |        1 |     [16 256] |            [4 8] |            8 |     6.250000e-02, 3.902460e-03 |
|   1 |          28672 |        1 |     [16 256] |            [4 8] |            7 |     6.250000e-02, 7.811287e-03 |
|   2 |          24576 |        1 |     [16 256] |            [4 8] |            6 |     6.250000e-02, 1.561990e-02 |
|   3 |          16384 |        1 |     [16 128] |            [4 7] |            8 |     6.250000e-02, 6.242016e-02 |
|   4 |          14336 |        1 |     [16 128] |            [4 7] |            7 |     6.250000e-02, 5.707978e-02 |
|   5 |          12288 |        1 |     [16 128] |            [4 7] |            6 |     6.250000e-02, 5.870371e-02 |
|   6 |          10240 |        0 |     [16 128] |            [4 7] |            5 |     6.250000e-02, 8.585766e-02 |
|   7 |           8192 |        0 |     [16 128] |            [4 7] |            4 |     6.250000e-02, 1.020576e-01 |

Best Solution
|  ID |  Memory (bits) | Feasible |   Table Size | Intermediate WLs | TableData WL |             Error(Max,Current) |
|   5 |          12288 |        1 |     [16 128] |            [4 7] |            6 |     6.250000e-02, 5.870371e-02 |


solution = 

  1x1 FunctionApproximation.LUTSolution with properties:

          ID: 5
    Feasible: "true"

Используйте compare метод, чтобы сравнить выход исходной функции и аппроксимированного.

compare(solution);

Используйте approximate метод, чтобы сгенерировать подсистему Simulink™, содержащую сгенерированную прямую интерполяционную таблицу.

approximate(solution)

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

В этом примере показано, как аппроксимировать подсистему Simulink™ прямой интерполяционной таблицей.

Откройте модель, содержащую подсистему, чтобы аппроксимировать.

functionToApproximate = 'ex_direct_approximation/MathExpression';
open_system('ex_direct_approximation');

Чтобы сгенерировать прямую интерполяционную таблицу, установите метод интерполяции для None.

problem = FunctionApproximation.Problem(functionToApproximate);
problem.Options.Interpolation = 'None';
problem.Options.RelTol = 0;
problem.Options.AbsTol = 0.2;
problem.Options.WordLengths = [7 8 9 16];
solution = solve(problem);
|  ID |  Memory (bits) | Feasible |   Table Size | Intermediate WLs | TableData WL |             Error(Max,Current) | 
|   0 |        2097152 |        1 |        65536 |               16 |           32 |     2.000000e-01, 0.000000e+00 |
|   1 |            896 |        0 |          128 |                7 |            7 |     2.000000e-01, 2.265625e+00 |
|   2 |           1024 |        0 |          128 |                7 |            8 |     2.000000e-01, 2.265625e+00 |
|   3 |           1152 |        0 |          128 |                7 |            9 |     2.000000e-01, 2.265625e+00 |
|   4 |           2048 |        0 |          128 |                7 |           16 |     2.000000e-01, 2.267090e+00 |

Best Solution
|  ID |  Memory (bits) | Feasible |   Table Size | Intermediate WLs | TableData WL |             Error(Max,Current) |
|   0 |        2097152 |        1 |        65536 |               16 |           32 |     2.000000e-01, 0.000000e+00 |

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

compare(solution);

Сгенерируйте новую подсистему, содержащую приближение интерполяционной таблицы.

approximate(solution);

Замените исходную подсистему на новую подсистему, содержащую приближение интерполяционной таблицы.

replaceWithApproximate(solution);

Можно вернуться модель назад к ее исходному состоянию с помощью revertToOriginal функция. Эта функция помещает исходную подсистему назад в модель.

revertToOriginal(solution);