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