exponenta event banner

Приблизительные функции с таблицей прямого поиска

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