exponenta event banner

Создание таблиц подстановки для синусоидальной функции

Введение

В следующих разделах объясняется, как использовать функцию fixpt_look1_func_approx для создания таблиц подстановки. В нем приведены примеры, показывающие, как создавать таблицы подстановки для функции sin (2xeonx) на интервале от 0 до 0,25.

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

Сначала определите значения параметров для fixpt_look1_func_approx функция.

% Required parameters
funcstr = 'sin(2*pi*x)'; % Ideal function
xmin = 0; % Minimum input of interest
xmax = 0.25; % Maximum input of interest
xdt = ufix(16); % x data type
xscale = 2^-16; % x data scaling
ydt = sfix(16); % y data type
yscale = 2^-14; % y data scaling
rndmeth = 'Floor'; % Rounding method
% Optional parameters
errmax = 2^-10; % Maximum allowed error of the lookup table
nptsmax = 21; % Maximum number of points of the lookup table

Параметры errmax, nptsmax, и spacing являются необязательными. Необходимо использовать хотя бы один из параметров errmax и nptsmax. Если используется только errmax параметр без nptsmax, функция создает таблицу поиска с наименьшим количеством точек, для которых наихудшая ошибка не превышает errmax. Если используется только nptsmax параметр без errmax, функция создает таблицу подстановки максимум с nptsmax точки с наименьшей наихудшей ошибкой. Вы можете использовать дополнительный spacing для ограничения интервала между точками останова таблицы подстановки.

Использовать errmax с неограниченным интервалом

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

[xdata,ydata,errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,errmax,[]);

Обратите внимание, что nptsmax и spacing параметры не указаны.

length(xdata)
ans = 16

16 точек требуется для аппроксимации sin (2øx) в пределах допуска, указанного вerrmax. Максимальная ошибка:

errworst
errworst = 9.7656e-04

Значение errworst меньше или равно значению errmax.

Постройте график результатов:

figure(1)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

На верхнем графике показана идеальная функция sin (2xeonx) и аппроксимация таблицы поиска с фиксированной точкой между точками останова. В этом примере идеальная функция и аппроксимация настолько близки друг к другу, что два графика кажутся совпадающими. На нижнем графике отображаются ошибки.

В этом примере точки данных Y, ydata, равны идеальной функции, применяемой к точке в xdata. Однако можно определить другой набор значений для ydata после выполнения fixpt_look1_func_approx. Иногда это может уменьшить максимальную ошибку.

Можно также изменить значения xmin и xmax для вычисления таблицы подстановки для подмножества исходного интервала.

Поиск новой максимальной ошибки после изменения ydata, xmin, или xmax, тип

errworst = fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax, ...

xdt,xscale,ydt,yscale,rndmeth)

Использовать nptsmax с неограниченным интервалом

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

[xdata, ydata, errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,[],nptsmax);

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

length(xdata)
ans = 21

Функция возвращает вектор xdata с 21 баллом. Максимальная ошибка:

errworst
errworst = 5.1139e-04

Значение errworst меньше или равно значению errmax.

Постройте график результатов:

figure(2)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Ограничение интервала

В двух предыдущих примерах функция fixpt_look1_func_approx создает таблицы поиска с неограниченным интервалом между точками. Можно ограничить интервал, чтобы повысить вычислительную эффективность таблицы подстановки с помощью параметра интервала. Обе силы двух, 'pow2'и даже интервал, 'even', увеличить вычислительную скорость таблицы поиска и использовать меньше памяти только для чтения команд (ROM). Однако задание любого из ограничений интервалов вместе с errmax обычно для достижения такой же степени точности требуется больше точек данных в таблице подстановки, чем для неограниченного интервала. Дополнительные сведения см. в разделе Влияние интервалов на скорость, ошибки и использование памяти.

Использовать errmax с четным интервалом

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

spacing = 'even';
[xdata,ydata,errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,errmax,[],spacing);
length(xdata)
ans = 20
errworst
errworst = 9.2109e-04

Постройте график результатов:

figure(3)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Использовать nptsmax с четным интервалом

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

spacing = 'even';
[xdata, ydata, errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,[],nptsmax,spacing);
length(xdata)
ans = 21
errworst
errworst = 8.3793e-04

Результат требует 21 равномерно разнесенной точки для достижения максимальной абсолютной ошибки 2^-10.2209.

Постройте график результатов:

figure(4)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Использовать errmax с мощностью двух интервалов

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

spacing = 'pow2';
[xdata, ydata, errworst] = ...
fixpt_look1_func_approx(funcstr,xmin, ...
xmax,xdt,xscale,ydt,yscale,rndmeth,errmax,[],spacing);
length(xdata)
ans = 33

Точки 33 необходимы для достижения наихудшей ошибки, указанной в errmax. Чтобы убедиться, что эти точки равномерно расположены, введите

widths = diff(xdata)
widths = 32×1

    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
    0.0078
      ⋮

Это создает вектор, записи которого являются разностями между последовательными точками в xdata. Каждая запись widths является 2^-7.

Максимальная ошибка:

errworst
errworst = 3.7209e-04

Это меньше значения errmax.

Постройте график результатов:

figure(5)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Использовать nptsmax с мощностью двух интервалов

Создайте таблицу подстановки с двумя интервалами и сведите к минимуму наихудшую ошибку для указанного числа точек.

spacing = 'pow2';
[xdata, ydata, errworst] = ...
fixpt_look1_func_approx(funcstr,xmin, ...
xmax,xdt,xscale,ydt,yscale,rndmeth,[],nptsmax,spacing);
length(xdata)
ans = 17
errworst
errworst = 0.0013

Результат требует 17 баллов для достижения максимальной абсолютной ошибки 2^-9.6267.

Постройте график результатов:

figure(6)
fixpt_look1_func_plot(xdata,ydata,funcstr,xmin,xmax,xdt, ...
xscale,ydt,yscale,rndmeth);

Figure contains 2 axes. Axes 1 with title Function sin(2*pi*x) Ideal (red) Fixed-Point Lookup Approximation (blue) contains 2 objects of type line. Axes 2 contains 2 objects of type line, text.

Указание как errmax, так и nptsmax

Если включить оба errmax и nptsmax параметры, функция fixpt_look1_func_approx пытается найти таблицу подстановки максимум с nptsmax точки данных, наихудшая ошибка которых не более errmax. Если можно найти таблицу подстановки, удовлетворяющую обоим условиям, для интервала используется следующий порядок приоритета:

  1. Мощность двух

  2. Даже

  3. Неограниченный

Если функция не может найти таблицу подстановки, удовлетворяющую обоим условиям, она игнорирует nptsmax и возвращает таблицу поиска с неограниченным интервалом, наихудшая ошибка которого не более errmax. В этом случае функция ведет себя так же, как если бы nptsmax опущены.

Следующие примеры иллюстрируют результаты использования различных значений для nptsmax при вводе

[xdata ydata errworst] = fixpt_look1_func_approx(funcstr, ...
xmin,xmax,xdt,xscale,ydt,yscale,rndmeth,errmax,nptsmax);

Результаты для трех различных настроек для nptsmax являются следующими:

  • nptsmax = 33; - Функция создает таблицу поиска с 33 точками, имеющими степень двух интервалов, как в примере 3.

  • nptsmax = 21; - Потому что errmax и nptsmax условия не могут быть выполнены с мощностью двух интервалов, функция создает таблицу поиска с 20 точками, имеющими четный интервал, как в примере 5.

  • nptsmax = 16; - Потому что errmax и nptsmax условия не могут быть выполнены ни с степенью двух, ни даже с интервалом, функция создает таблицу поиска с 16 точками, имеющими неограниченный интервал, как в примере 1.

Сравнение результатов примера

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

ПримерВариантыИнтервалНаихудшая ошибкаКоличество точек в таблице

1

errmax=2^-10

'unrestricted'

2^-10

16

2

nptsmax=21

'unrestricted'

2^-10.933

21

3

errmax=2^-10

'even'

2^-10.0844

20

4

nptsmax=21

'even'

2^-10.2209

21

5

errmax=2^-10

'pow2'

2^-11.3921

33

6

nptsmax=21

'pow2'

2^-9.627

17